天天看點

lamp搭建1. lamp簡介2. web伺服器工作流程3. lamp平台建構3.5 驗證

lamp

  • 1. lamp簡介
  • 2. web伺服器工作流程
    • 2.1 cgi與fastcgi
    • 2.2 httpd與php結合的方式
  • 3. lamp平台建構
    • 3.1 安裝httpd
    • 3.2 安裝mysql
    • 3.3 安裝php
    • 3.4 配置apache
      • 3.4.1 啟用代理子產品
      • 3.4.2 配置虛拟主機
  • 3.5 驗證

1. lamp簡介

有了前面學習的知識的鋪墊,今天可以來學習下第一個常用的web架構了。

所謂lamp,其實就是由Linux+Apache+Mysql/MariaDB+Php/Perl/Python的一組動态網站或者伺服器的開源軟體,除Linux外其它各部件本身都是各自獨立的程式,但是因為經常被放在一起使用,擁有了越來越高的相容度,共同組成了一個強大的Web應用程式平台。

LAMP指的是Linux(作業系統)、Apache(HTTP伺服器)、MySQL(也指MariaDB,資料庫軟體)和PHP(有時也是指Perl或Python)的第一個字母,一般用來建立web應用平台。

2. web伺服器工作流程

在說lamp架構平台的搭建前,我們先來了解下什麼是CGI,什麼是FastCGI,什麼是…

web伺服器的資源分為兩種,靜态資源和動态資源

  • 靜态資源就是指靜态内容,用戶端從伺服器獲得的資源的表現形式與原檔案相同。可以簡單的了解為就是直接存儲于檔案系統中的資源
  • 動态資源則通常是程式檔案,需要在伺服器執行之後,将執行的結果傳回給用戶端

那麼web伺服器如何執行程式并将結果傳回給用戶端呢?下面通過一張圖來說明一下web伺服器如何處理用戶端的請求

lamp搭建1. lamp簡介2. web伺服器工作流程3. lamp平台建構3.5 驗證

如上圖所示

階段①顯示的是httpd伺服器(即apache)和php伺服器通過FastCGI協定進行通信,且php作為獨立的服務程序運作

階段②顯示的是php程式和mysql資料庫間通過mysql協定進行通信。php與mysql本沒有什麼聯系,但是由Php語言寫成的程式可以與mysql進行資料互動。同理perl和python寫的程式也可以與mysql資料庫進行互動

2.1 cgi與fastcgi

上圖階段①中提到了FastCGI,下面我們來了解下CGI與FastCGI。

  • CGI(Common Gateway Interface,通用網關接口),CGI是外部應用程式(CGI程式)與WEB伺服器之間的接口标準,是在CGI程式和Web伺服器之間傳遞資訊的過程。CGI規範允許Web伺服器執行外部程式,并将它們的輸出發送給Web浏覽器,CGI将web的一組簡單的靜态超媒體文檔變成一個完整的新的互動式媒體。
  • FastCGI(Fast Common Gateway Interface)是CGI的改良版,CGI是通過啟用一個解釋器程序來處理每個請求,耗時且耗資源,而FastCGI則是通過master-worker形式來處理每個請求,即啟動一個master主程序,然後根據配置啟動幾個worker程序,當請求進來時,master會從worker程序中選擇一個去處理請求,這樣就避免了重複的生成和殺死程序帶來的頻繁cpu上下文切換而導緻耗時

2.2 httpd與php結合的方式

httpd與php結合的方式有以下三種:

  • modules:php将以httpd的擴充子產品形式存在,需要加載動态資源時,httpd可以直接通過php子產品來加工資源并傳回給用戶端
    • httpd prefork:libphp5.so(多程序模型的php)
    • httpd event or worker:libphp5-zts.so(線程模型的php)
  • CGI:httpd需要加載動态資源時,通過CGI與php解釋器聯系,獲得php執行的結果,此時httpd負責與php連接配接的建立和斷開等
  • FastCGI:利用php-fpm機制,啟動為服務程序,php自行運作為一個服務,https通過socket與php通信

較于CGI方式,FastCGI更為常用,很少有人使用CGI方式來加載動态資源

##2.3 web工作流程

通過上面的圖說明一下web的工作流程:

  • 用戶端通過http協定請求web伺服器資源
  • web伺服器收到請求後判斷用戶端請求的資源是靜态資源或是動态資源
    • 若是靜态資源則直接從本地檔案系統取之傳回給用戶端。
    • 否則若為動态資源則通過FastCGI協定與php伺服器聯系,通過CGI程式的master程序排程worker程序來執行程式以獲得用戶端請求的動态資源,并将執行的結果通過FastCGI協定傳回給httpd伺服器,httpd伺服器收到php的執行結果後将其封裝為http響應封包響應給用戶端。在執行程式擷取動态資源時若需要獲得資料庫中的資源時,由Php伺服器通過mysql協定與MySQL/MariaDB伺服器互動,取之而後傳回給httpd,httpd将從php伺服器收到的執行結果封裝成http響應封包響應給用戶端。

3. lamp平台建構

環境說明:

系統平台 IP 需要安裝的服務

centos7

redhat7

192.168.110.21

httpd-2.4

mysql-5.7

php

php-mysql

lamp平台軟體安裝次序:

  1. 先安裝httpd
  2. 再安裝mysql
  3. 最後安裝php

注意:php要求httpd使用prefork MPM

3.1 安裝httpd

//建立apache服務的使用者群組
[[email protected] ~]# groupadd -r apache
[[email protected] ~]# useradd -r -M -s /sbin/nologin -g apache apache 

//安裝依賴包
[[email protected] ~]# yum -y install openssl-devel pcre-devel expat-devel libtool
已加載插件:product-id, search-disabled-repos, subscription-manager
This system is not registered with an entitlement server. You can use subscription-manager to register.
base                                                         | 3.6 kB  00:00:00     
centosplus                                                   | 3.4 kB  00:00:00     
epel/x86_64/metalink                                         | 6.2 kB  00:00:00     
epel                                                         | 4.7 kB  00:00:00     
extras                                                       | 3.4 kB  00:00:00     
file:///mnt/repodata/repomd.xml: [Errno 14] curl#37 - "Couldn't open file /mnt/repodata/repomd.xml"
正在嘗試其它鏡像。
updates                                                      | 3.4 kB  00:00:00     
(1/2): epel/x86_64/updateinfo                                | 959 kB  00:00:41     
(2/2): epel/x86_64/primary_db                                | 6.6 MB  00:01:35     
正在解決依賴關系
--> 正在檢查事務
---> 軟體包 expat-devel.x86_64.0.2.1.0-10.el7_3 将被 安裝
...
...
已安裝:
  expat-devel.x86_64 0:2.1.0-10.el7_3         libtool.x86_64 0:2.4.2-22.el7_3       
  openssl-devel.x86_64 1:1.0.2k-16.el7        pcre-devel.x86_64 0:8.32-17.el7       

作為依賴被安裝:
  autoconf.noarch 0:2.69-11.el7              automake.noarch 0:1.13.4-3.el7         
  keyutils-libs-devel.x86_64 0:1.5.8-3.el7   krb5-devel.x86_64 0:1.15.1-37.el7_6    
  libcom_err-devel.x86_64 0:1.42.9-13.el7    libkadm5.x86_64 0:1.15.1-37.el7_6      
  libselinux-devel.x86_64 0:2.5-14.1.el7     libsepol-devel.x86_64 0:2.5-10.el7     
  libverto-devel.x86_64 0:0.2.5-4.el7        m4.x86_64 0:1.4.16-10.el7              
  perl-Data-Dumper.x86_64 0:2.145-3.el7      perl-Test-Harness.noarch 0:3.28-3.el7  
  perl-Thread-Queue.noarch 0:3.02-2.el7      zlib-devel.x86_64 0:1.2.7-18.el7       

作為依賴被更新:
  e2fsprogs.x86_64 0:1.42.9-13.el7         e2fsprogs-libs.x86_64 0:1.42.9-13.el7    
  krb5-libs.x86_64 0:1.15.1-37.el7_6       libcom_err.x86_64 0:1.42.9-13.el7        
  libselinux.x86_64 0:2.5-14.1.el7         libselinux-python.x86_64 0:2.5-14.1.el7  
  libselinux-utils.x86_64 0:2.5-14.1.el7   libsepol.x86_64 0:2.5-10.el7             
  libss.x86_64 0:1.42.9-13.el7             openssl.x86_64 1:1.0.2k-16.el7           
  openssl-libs.x86_64 1:1.0.2k-16.el7      zlib.x86_64 0:1.2.7-18.el7               

完畢!

下載下傳和安裝apr以及apr-util
[[email protected] ~]# cd /usr/src/
[[email protected] src]# wget http://mirrors.shu.edu.cn/apache//apr/apr-1.6.3.tar.bz2
--2018-08-04 18:42:17--  http://mirrors.shu.edu.cn/apache//apr/apr-1.6.3.tar.bz2
Resolving mirrors.shu.edu.cn (mirrors.shu.edu.cn)... 202.121.199.235
Connecting to mirrors.shu.edu.cn (mirrors.shu.edu.cn)|202.121.199.235|:80... connected.
HTTP request sent, awaiting response... 302 Found
Location: http://172.16.24.182/mirrors.shu.edu.cn/apache//apr/apr-1.6.3.tar.bz2 [following]
--2018-08-04 18:42:17--  http://172.16.24.182/mirrors.shu.edu.cn/apache//apr/apr-1.6.3.tar.bz2
Connecting to 172.16.24.182:80... connected.
HTTP request sent, awaiting response... 200 OK
Length: 854100 (834K) [application/x-bzip2]
Saving to: ‘apr-1.6.3.tar.bz2’

100%[======================================================>] 854,100     1.67MB/s   in 0.5s

2018-08-04 18:42:18 (1.67 MB/s) - ‘apr-1.6.3.tar.bz2’ saved [854100/854100]

[[email protected] src]# wget http://mirrors.shu.edu.cn/apache//apr/apr-util-1.6.1.tar.bz2
--2018-08-04 18:43:13--  http://mirrors.shu.edu.cn/apache//apr/apr-util-1.6.1.tar.bz2
Resolving mirrors.shu.edu.cn (mirrors.shu.edu.cn)... 202.121.199.235
Connecting to mirrors.shu.edu.cn (mirrors.shu.edu.cn)|202.121.199.235|:80... connected.
HTTP request sent, awaiting response... 302 Found
Location: http://172.16.24.175/mirrors.shu.edu.cn/apache//apr/apr-util-1.6.1.tar.bz2 [following]
--2018-08-04 18:43:13--  http://172.16.24.175/mirrors.shu.edu.cn/apache//apr/apr-util-1.6.1.tar.bz2
Connecting to 172.16.24.175:80... connected.
HTTP request sent, awaiting response... 200 OK
Length: 428595 (419K) [application/x-bzip2]
Saving to: ‘apr-util-1.6.1.tar.bz2’

100%[======================================================>] 428,595     1.14MB/s   in 0.4s

2018-08-04 18:43:14 (1.14 MB/s) - ‘apr-util-1.6.1.tar.bz2’ saved [428595/428595]

[[email protected] src]# ls
apr-1.6.5.tar.bz2  apr-util-1.6.1.tar.bz2  debug  kernels

[[email protected] src]# tar xf apr-1.6.3.tar.bz2 
[[email protected] src]# tar xf apr-util-1.6.1.tar.bz2 
[[email protected] src]# ls
apr-1.6.3  apr-1.6.3.tar.bz2  apr-util-1.6.1  apr-util-1.6.1.tar.bz2  debug  kernels
[[email protected] src]# cd apr-1.6.3
[[email protected] apr-1.6.3]# ls
apr-config.in  build-outputs.mk  helpers       misc           strings
apr.dep        CHANGES           include       mmap           support
apr.dsp        CMakeLists.txt    libapr.dep    network_io     tables
apr.dsw        config.layout     libapr.dsp    NOTICE         test
apr.mak        configure         libapr.mak    NWGNUmakefile  threadproc
apr.pc.in      configure.in      libapr.rc     passwd         time
apr.spec       docs              LICENSE       poll           tools
atomic         dso               locks         random         user
build          emacs-mode        Makefile.in   README
buildconf      encoding          Makefile.win  README.cmake
build.conf     file_io           memory        shmem
[[email protected] apr-1.6.3]# vim configure
cfgfile="${ofile}T"
    trap "$RM \"$cfgfile\"; exit 1" 1 2 15
    # $RM "$cfgfile"        //将此行加上注釋,或者删除此行
[[email protected] apr-1.6.3]# ./configure --prefix=/usr/local/apr
checking build system type... x86_64-pc-linux-gnu
checking host system type... x86_64-pc-linux-gnu
checking target system type... x86_64-pc-linux-gnu
Configuring APR library
Platform: x86_64-pc-linux-gnu
checking for working mkdir -p... yes
APR Version: 1.6.3
checking for chosen layout... apr
checking for gcc... gcc
checking whether the C compiler works... yes
checking for C compiler default output file name... a.out
checking for suffix of executables... 
checking whether we are cross compiling... no
checking for suffix of object files... o
checking whether we are using the GNU C compiler... yes
checking whether gcc accepts -g... yes
...
...
configure: creating ./config.status
config.status: creating Makefile
config.status: creating include/apr.h
config.status: creating build/apr_rules.mk
config.status: creating build/pkg/pkginfo
config.status: creating apr-1-config
config.status: creating apr.pc
config.status: creating test/Makefile
config.status: creating test/internal/Makefile
config.status: creating include/arch/unix/apr_private.h
config.status: executing libtool commands
config.status: executing default commands

[[email protected] apr-1.6.3]# make && make install
make[1]: 進入目錄“/usr/src/apr-1.6.3”
/usr/src/apr-1.6.3/build/mkdir.sh tools
/bin/sh /usr/src/apr-1.6.3/libtool --silent --mode=compile gcc -g -O2 -pthread   -DHAVE_CONFIG_H  -DLINUX -D_REENTRANT -D_GNU_SOURCE   -I./include -I/usr/src/apr-1.6.3/include/arch/unix -I./include/arch/unix -I/usr/src/apr-1.6.3/include/arch/unix -I/us
...
...
/usr/bin/install -c -m 644 build/apr_rules.out /usr/local/apr/build-1/apr_rules.mk
/usr/bin/install -c -m 644 /usr/src/apr-1.6.3/build/apr_common.m4 /usr/local/apr/build-1
/usr/bin/install -c -m 644 /usr/src/apr-1.6.3/build/find_apr.m4 /usr/local/apr/build-1
/usr/bin/install -c -m 755 apr-config.out /usr/local/apr/bin/apr-1-config

[[email protected] apr-1.6.3]# cd /usr/src/apr-util-1.6.1
[[email protected] apr-util-1.6.1]# ./configure --prefix=/usr/local/apr-util --with-apr=/usr/local/apr/
checking build system type... x86_64-pc-linux-gnu
checking host system type... x86_64-pc-linux-gnu
checking target system type... x86_64-pc-linux-gnu
checking for a BSD-compatible install... /usr/bin/install -c
checking for working mkdir -p... yes
...
...
configure: creating ./config.status
config.status: creating Makefile
config.status: creating export_vars.sh
config.status: creating build/pkg/pkginfo
config.status: creating apr-util.pc
config.status: creating apu-1-config
config.status: creating include/private/apu_select_dbm.h
config.status: creating include/apr_ldap.h
config.status: creating include/apu.h
config.status: creating include/apu_want.h
config.status: creating test/Makefile
config.status: creating include/private/apu_config.h
config.status: executing default commands

[[email protected] apr-util-1.6.1]# make && make install
make[1]: 進入目錄“/usr/src/apr-util-1.6.1”
/bin/sh /usr/local/apr/build-1/libtool --silent --mode=compile gcc -g -O2 -pthread   -DHAVE_CONFIG_H  -DLINUX -D_REENTRANT -D_GNU_SOURCE   -I/usr/src/apr-util-1.6.1/include -I/usr/src/apr-util-1.6.1/include/private  -I/usr/local/apr/include/apr-1    -o buckets/apr_brigade.lo -c buckets/apr_brigade.c && touch buckets/apr_brigade.lo
...
...
See any operating system documentation about shared libraries for
more information, such as the ld(1) and ld.so(8) manual pages.
----------------------------------------------------------------------
/usr/bin/install -c -m 644 aprutil.exp /usr/local/apr-util/lib
/usr/bin/install -c -m 755 apu-config.out /usr/local/apr-util/bin/apu-1-config

//編譯安裝httpd
[[email protected] ~]# wget http://mirror.bit.edu.cn/apache//httpd/httpd-2.4.34.tar.bz2
--2018-08-04 18:30:46--  http://mirror.bit.edu.cn/apache//httpd/httpd-2.4.34.tar.bz2
Resolving mirror.bit.edu.cn (mirror.bit.edu.cn)... 114.247.56.117, 2001:da8:204:2001:250:56ff:fea1:22
Connecting to mirror.bit.edu.cn (mirror.bit.edu.cn)|114.247.56.117|:80... connected.
HTTP request sent, awaiting response... 200 OK
Length: 6942969 (6.6M) [application/octet-stream]
Saving to: ‘httpd-2.4.34.tar.bz2’

100%[======================================================>] 6,942,969    591KB/s   in 19s

2018-08-04 18:31:05 (353 KB/s) - ‘httpd-2.4.34.tar.bz2’ saved [6942969/6942969]

[[email protected] ~]# ls
anaconda-ks.cfg  httpd-2.4.34.tar.bz2
[[email protected] ~]# tar xf httpd-2.4.34.tar.bz2
[[email protected] ~]# cd httpd-2.4.34
[[email protected] httpd-2.4.34]# ./configure --prefix=/usr/local/apache \
> --sysconfdir=/etc/httpd24 \
> --enable-so \
> --enable-ssl \
> --enable-cgi \
> --enable-rewrite \
> --with-zlib \
> --with-pcre \
> --with-apr=/usr/local/apr \
> --with-apr-util=/usr/local/apr-util/ \
> --enable-modules=most \
> --enable-mpms-shared=all \
> --with-mpm=prefork
checking for chosen layout... Apache
checking for working mkdir -p... yes
checking for grep that h
...
...
config.status: executing default commands
configure: summary of build options:

    Server Version: 2.4.34
    Install prefix: /usr/local/apache
    C compiler:     gcc -std=gnu99
    CFLAGS:          -g -O2 -pthread  
    CPPFLAGS:        -DLINUX -D_REENTRANT -D_GNU_SOURCE  
    LDFLAGS:           
    LIBS:             
    C preprocessor: gcc -E
    
[[email protected] httpd-2.4.34]# make && make install
Making all in srclib
make[1]: 進入目錄“/root/httpd-2.4.34/srclib”
make[1]: 離開目錄“/root/httpd-2.4.34/srclib”
Making all in os
make[1]: 進入目錄“/root/httpd-2.4.34/os”
Making all in unix
make[2]: 進入目錄“/root/httpd-2.4.34/os/unix”
...
...
Installing CGIs
mkdir /usr/local/apache/cgi-bin
Installing header files
mkdir /usr/local/apache/include
Installing build system files
mkdir /usr/local/apache/build
Installing man pages and online manual
mkdir /usr/local/apache/man
mkdir /usr/local/apache/man/man1
mkdir /usr/local/apache/man/man8
mkdir /usr/local/apache/manual
make[1]: 離開目錄“/root/httpd-2.4.34”

//安裝後配置
[[email protected] ~]# echo 'export PATH=/usr/local/apache/bin:$PATH' > /etc/profile.d/httpd.sh
[[email protected] ~]# source /etc/profile.d/httpd.sh
[[email protected] ~]# ln -s /usr/local/apache/include/ /usr/include/httpd
[[email protected] ~]# echo 'MANPATH /usr/local/apache/man' >> /etc/man.config

//取消ServerName前面的注釋
[[email protected] ~]# sed -i '/#ServerName/s/#//g' /etc/httpd24/httpd.conf 

//啟動apache
[[email protected] ~]# apachectl start
[[email protected] ~]# ss -anlt
State      Recv-Q Send-Q Local Address:Port               Peer Address:Port              
LISTEN     0      128            *:22                         *:*                  
LISTEN     0      5              *:873                        *:*                  
LISTEN     0      128           :::80                        :::*                  
LISTEN     0      32            :::21                        :::*                  
LISTEN     0      128           :::22                        :::*                  
LISTEN     0      5             :::873                       :::*  
           

3.2 安裝mysql

//安裝依賴包
[[email protected] ~]#  yum -y install ncurses-devel openssl-devel openssl cmake mariadb-devel已加載插件:product-id, search-disabled-repos, subscription-manager
This system is not registered with an entitlement server. You can use subscription-manager to register.
file:///mnt/repodata/repomd.xml: [Errno 14] curl#37 - "Couldn't open file /mnt/repodata/repomd.xml"
正在嘗試其它鏡像。
軟體包 1:openssl-devel-1.0.2k-16.el7.x86_64 已安裝并且是最新版本
軟體包 1:openssl-1.0.2k-16.el7.x86_64 已安裝并且是最新版本
正在解決依賴關系
--> 正在檢查事務
...
...
已安裝:
  cmake.x86_64 0:2.8.12.2-2.el7                                                     
  mariadb-devel.x86_64 1:5.5.60-1.el7_5                                             
  ncurses-devel.x86_64 0:5.9-14.20130511.el7_4                                      

作為依賴被安裝:
  libarchive.x86_64 0:3.1.2-10.el7_2                                                

作為依賴被更新:
  mariadb-libs.x86_64 1:5.5.60-1.el7_5                                              
  ncurses.x86_64 0:5.9-14.20130511.el7_4                                            
  ncurses-base.noarch 0:5.9-14.20130511.el7_4                                       
  ncurses-libs.x86_64 0:5.9-14.20130511.el7_4                                       

完畢!

//建立使用者群組
[[email protected] ~]#  groupadd -r -g 306 mysql
[[email protected] ~]# useradd -M -s /sbin/nologin -g 306 -u 306 mysql

//下載下傳二進制格式的mysql軟體包
[[email protected] ~]# cd /usr/src/
[[email protected] src]# wget https://downloads.mysql.com/archives/get/file/mysql-5.7.23-linux-glibc2.12-x86_64.tar.gz
--2018-08-13 23:56:27--  https://downloads.mysql.com/archives/get/file/mysql-5.7.23-linux-glibc2.12-x86_64.tar.gz
Resolving downloads.mysql.com (downloads.mysql.com)... 137.254.60.14
Connecting to downloads.mysql.com (downloads.mysql.com)|137.254.60.14|:443... connected.
HTTP request sent, awaiting response... 302 Found
Location: https://cdn.mysql.com/archives/mysql-5.7/mysql-5.7.23-linux-glibc2.12-x86_64.tar.gz [following]
......
Saving to: ‘mysql-5.7.23-linux-glibc2.12-x86_64.tar.gz’

100%[=====================================>] 643,790,848 2.46MB/s   in 4m 20s

2018-08-14 00:00:50 (2.36 MB/s) - ‘mysql-5.7.23-linux-glibc2.12-x86_64.tar.gz’saved [643790848/643790848]

//解壓軟體至/usr/local/
[[email protected] src]# tar xf mysql-5.7.23-linux-glibc2.12-x86_64.tar.gz -C /usr/local/
[[email protected] src]# ls /usr/local/
apache    bin    include  libexec                              share
apr       etc    lib      mysql-5.7.23-linux-glibc2.12-x86_64  src
apr-util  games  lib64    sbin
[[email protected] src]# cd /usr/local/
[[email protected] local]# ln -sv mysql-5.7.23-linux-glibc2.12-x86_64/ mysql
"mysql" -> "mysql-5.7.23-linux-glibc2.12-x86_64/"
[[email protected] local]# ll
總用量 0
drwxr-xr-x  13 root root 152 2月  20 15:30 apache
drwxr-xr-x   6 root root  58 2月  20 15:11 apr
drwxr-xr-x   5 root root  43 2月  20 15:18 apr-util
drwxr-xr-x.  2 root root   6 3月  10 2016 bin
drwxr-xr-x.  2 root root   6 3月  10 2016 etc
drwxr-xr-x.  2 root root   6 3月  10 2016 games
drwxr-xr-x.  2 root root   6 3月  10 2016 include
drwxr-xr-x.  2 root root   6 3月  10 2016 lib
drwxr-xr-x.  2 root root   6 3月  10 2016 lib64
drwxr-xr-x.  2 root root   6 3月  10 2016 libexec
lrwxrwxrwx   1 root root  36 2月  20 16:00 mysql -> mysql-5.7.23-linux-glibc2.12-x86_64/
drwxr-xr-x   9 root root 129 2月  20 15:57 mysql-5.7.23-linux-glibc2.12-x86_64
drwxr-xr-x.  2 root root   6 3月  10 2016 sbin
drwxr-xr-x.  5 root root  49 1月  17 22:31 share
drwxr-xr-x.  2 root root   6 3月  10 2016 src

//修改目錄/usr/local/mysql的屬主屬組
[[email protected] local]# chown -R mysql.mysql /usr/local/mysql
[[email protected] local]# ll /usr/local/mysql -d
lrwxrwxrwx 1 mysql mysql 36 2月  20 16:00 /usr/local/mysql -> mysql-5.7.23-linux-glibc2.12-x86_64/

//添加環境變量
[[email protected] local]# ls /usr/local/mysql
bin  COPYING  docs  include  lib  man  README  share  support-files
[[email protected] local]# echo 'export PATH=/usr/local/mysql/bin:$PATH' > /etc/profile.d/mysql.sh
[[email protected] local]# . /etc/profile.d/mysql.sh
[[email protected] local]#  echo $PATH
/usr/local/mysql/bin:/usr/local/apache/bin:/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/root/bin

//建立資料存放目錄
[[email protected] local]# mkdir /opt/test
[[email protected] local]# chown -R mysql.mysql /opt/test/
[[email protected] local]# ll /opt/
總用量 8
-rw-r--r--. 1 root  root     0 2月  18 16:07 123
-rw-------. 1 root  root  1734 2月  19 09:30 abc
-rw-------. 1 root  root  1734 12月  5 23:16 anaconda-ks.cfg
drwxr-xr-x. 3 root  root    18 2月  19 17:23 lw
drwxr-xr-x  2 mysql mysql    6 2月  20 16:04 test

//初始化資料庫
[[email protected] local]# /usr/local/mysql/bin/mysqld --initialize --user=mysql --datadir=/opt/test/
2019-02-20T08:07:04.429940Z 0 [Warning] TIMESTAMP with implicit DEFAULT value is deprecated. Please use --explicit_defaults_for_timestamp server option (see documentation for more details).
2019-02-20T08:07:09.246470Z 0 [Warning] InnoDB: New log files created, LSN=45790
2019-02-20T08:07:10.824315Z 0 [Warning] InnoDB: Creating foreign key constraint system tables.
2019-02-20T08:07:13.553148Z 0 [Warning] No existing UUID has been found, so we assume that this is the first time that this server has been started. Generating a new UUID: 87b6b4ac-34e6-11e9-b93c-000c29e97649.
2019-02-20T08:07:13.576295Z 0 [Warning] Gtid table is not ready to be used. Table 'mysql.gtid_executed' cannot be opened.
2019-02-20T08:07:14.185473Z 1 [Note] A temporary password is generated for [email protected]: 6x9&nhqalJ#e
//請注意,這個指令的最後會生成一個臨時密碼,此處密碼是jtBzkkb=r5ik
//再次注意,這個密碼是随機的,你的不會跟我一樣,一定要記住這個密碼,因為一會登入時會用到

//配置mysql
[[email protected] local]# ln -sv /usr/local/mysql/include/ /usr/local/include/mysql
"/usr/local/include/mysql" -> "/usr/local/mysql/include/"
[[email protected] local]# vim /etc/ld.so.conf.d/mysql.conf
[[email protected] local]# cat /etc/ld.so.conf.d/mysql.conf
/usr/local/mysql/lib
[[email protected] local]# ldconfig -v
ldconfig: 無法對 /libx32 進行 stat 操作: 沒有那個檔案或目錄
ldconfig: 多次給出路徑“/usr/lib”
ldconfig: 多次給出路徑“/usr/lib64”
ldconfig: 無法對 /usr/libx32 進行 stat 操作: 沒有那個檔案或目錄
/usr/lib64/mysql:
	libmysqlclient.so.18 -> libmysqlclient_r.so
/usr/local/mysql/lib:
	libmysqlclient.so.20 -> libmysqlclient.so.20.3.10
/lib:
/lib64:
...
...
	libutil.so.1 -> libutil-2.17.so
/lib/sse2: (hwcap: 0x0000000004000000)
/lib64/sse2: (hwcap: 0x0000000004000000)
/lib64/tls: (hwcap: 0x8000000000000000)

[[email protected] local]# ldconfig -p |grep mysql
	libmysqlclient.so.20 (libc6,x86-64) => /usr/local/mysql/lib/libmysqlclient.so.20
	libmysqlclient.so.18 (libc6,x86-64) => /usr/lib64/mysql/libmysqlclient.so.18
	libmysqlclient.so (libc6,x86-64) => /usr/lib64/mysql/libmysqlclient.so
	libmysqlclient.so (libc6,x86-64) => /usr/local/mysql/lib/libmysqlclient.so

//生成配置檔案
[[email protected] local]# vim /etc/my.cnf
[[email protected] local]# cat /etc/my.cnf
[mysqld]
basedir = /usr/local/mysql
datadir = /opt/test
socket = /tmp/mysql.sock
port = 3306
pid-file = /opt/test/mysql.pid
user = mysql
skip-name-resolve

//配置服務啟動腳本
[[email protected] local]# cp -a /usr/local/mysql/support-files/mysql.server /etc/init.d/mysqld
[[email protected] local]# vim /etc/init.d/mysqld 
basedir=/usr/local/mysql
datadir=/opt/test/

//啟動mysql
[[email protected] local]# service mysqld start 
Starting MySQL..Logging to '/opt/test/lw.err'.
... SUCCESS! 
[[email protected] local]# ps -ef |grep mysql
root      33944      1  1 16:22 pts/0    00:00:00 /bin/sh /usr/local/mysql/bin/mysqd_safe --datadir=/opt/test --pid-file=/opt/test/mysql.pid
mysql     34124  33944 17 16:22 pts/0    00:00:02 /usr/local/mysql/bin/mysqld --basedir=/usr/local/mysql --datadir=/opt/test --plugin-dir=/usr/local/mysql/lib/plugin --user=mysql --log-error=lw.err --pid-file=/opt/test/mysql.pid --socket=/tmp/mysql.sock --port=3306
root      34160  33730  0 16:22 pts/0    00:00:00 grep --color=auto mysql
[[email protected] local]# ss -anlt
State      Recv-Q Send-Q Local Address:Port               Peer Address:Port              
LISTEN     0      128            *:22                         *:*                  
LISTEN     0      5              *:873                        *:*                  
LISTEN     0      128           :::80                        :::*                  
LISTEN     0      32            :::21                        :::*                  
LISTEN     0      128           :::22                        :::*                  
LISTEN     0      5             :::873                       :::*                  
LISTEN     0      80            :::3306                      :::*    

//修改密碼
//使用臨時密碼登入
[[email protected] local]# mysql -uroot -p
Enter password: 
Welcome to the MySQL monitor.  Commands end with ; or \g.
Your MySQL connection id is 3
Server version: 5.7.23

Copyright (c) 2000, 2018, Oracle and/or its affiliates. All rights reserved.

Oracle is a registered trademark of Oracle Corporation and/or its
affiliates. Other names may be trademarks of their respective
owners.

Type 'help;' or '\h' for help. Type '\c' to clear the current input statement.

//設定新密碼
mysql> set password = password('lw1234');
Query OK, 0 rows affected, 1 warning (0.01 sec)

mysql> quit
Bye
           

3.3 安裝php

//安裝依賴包
[[email protected] local]# yum -y install libxml2 libxml2-devel openssl openssl-devel bzip2 bzip2-devel libcurl libcurl-devel libicu-devel libjpeg libjpeg-devel libpng libpng-devel openldap-devel  libpcre-devel freetype freetype-devel gmp gmp-devel libmcrypt libmcrypt-devel readline readline-devel libxslt libxslt-devel mhash mhash-devel php72w-mysqlnd
已加載插件:product-id, search-disabled-repos, subscription-manager
This system is not registered with an entitlement server. You can use subscription-manager to register.
file:///mnt/repodata/repomd.xml: [Errno 14] curl#37 - "Couldn't open file /mnt/repodata/repomd.xml"
正在嘗試其它鏡像。
軟體包 libxml2-2.9.1-6.el7_2.3.x86_64 已安裝并且是最新版本
軟體包 1:openssl-1.0.2k-16.el7.x86_64 已安裝并且是最新版本
...
...
作為依賴被更新:
  curl.x86_64 0:7.29.0-51.el7            cyrus-sasl-lib.x86_64 0:2.1.26-23.el7      
  libicu.x86_64 0:50.1.2-17.el7          nspr.x86_64 0:4.19.0-1.el7_5               
  nss.x86_64 0:3.36.0-7.1.el7_6          nss-pem.x86_64 0:1.0.3-5.el7               
  nss-softokn.x86_64 0:3.36.0-5.el7_5    nss-softokn-freebl.x86_64 0:3.36.0-5.el7_5 
  nss-sysinit.x86_64 0:3.36.0-7.1.el7_6  nss-tools.x86_64 0:3.36.0-7.1.el7_6        
  nss-util.x86_64 0:3.36.0-1.1.el7_6     openldap.x86_64 0:2.4.44-21.el7_6          

完畢!

//下載下傳php
[[email protected] ~]# cd /usr/src/
[[email protected] src]# wget http://cn.php.net/distributions/php-7.2.8.tar.xz
[[email protected] ~]# cd /usr/src/
[[email protected] src]# tar -xf php-7.2.8.tar.xz
[[email protected] php-7.2.8]# ./configure -prefix=/usr/local/php7 \
> --with-config-file-path=/etc \
> --enable-fpm \
> --enable-inline-optimization \
> --disable-debug \
> --disable-rpath \
> --enable-shared \
> --enable-soap \
> --with-openssl \
> --enable-bcmath \
> --with-iconv \
> --with-bz2 \
> --enable-calendar \
> --with-curl \
> --enable-exif  \
> --enable-ftp \
> --with-gd \
> --with-jpeg-dir \
> --with-png-dir \
> --with-zlib-dir \
> --with-freetype-dir \
> --with-gettext \
> --enable-json \
> --enable-mbstring \
> --enable-pdo \
> --with-mysqli=mysqlnd \
> --with-pdo-mysql=mysqlnd \
> --with-readline \
> --enable-shmop \
> --enable-simplexml \
> --enable-sockets \
> --enable-zip \
> --enable-mysqlnd-compression-support \
> --with-pear \
> --enable-pcntl \
> --enable-posix

[[email protected] php-7.2.8]# make -j $(cat /proc/cpuinfo |grep processor|wc -l)
/bin/sh /usr/src/php-7.2.8/libtool --silent --preserve-dup-deps --mode=compile cc -DZEND_ENABLE_STATIC_TSRMLS_CACHE=1 -Iext/opcache/ -I/usr/src/php-7.2.8/ext/opcache/ -DPHP_ATOM_INC -I/usr/src/php-7.2.8/include -I/usr/src/php-7.2.8/main -I/usr/src/php-7.2.8 -I/usr/src/php-7.2.8/ext/date/lib -I/usr/include/libxml2 -I/usr/include/freetype2 -I/usr/include/libpng15 -I/usr/src/php-7.2.8/ext/mbstring/oniguruma -I/usr/src/php-7.2.8/ext/mbstring/libmbfl -I/usr/src/php-7.2.8/ext/mbstring/libmbfl/mbfl -I/usr/src/php-7.2.8/ext/sqlite3/libsqlite -I/usr/src/php-7.2.8/ext/zip/lib -I/usr/src/php-7.2.8/TSRM -I/usr/src/php-7.2.8/Zend   
過程略
[[email protected] php-7.2.8]# make install

//安裝後配置
[[email protected] php-7.2.8]# echo 'export PATH=/usr/local/php7/bin:$PATH' > /etc/profile.d/php7.sh
[[email protected] php-7.2.8]# source /etc/profile.d/php7.sh
[[email protected] php-7.2.8]# which php
/usr/local/php7/bin/php
[[email protected] php-7.2.8]# php -v
PHP 7.2.8 (cli) (built: Feb 20 2019 17:29:13) ( NTS )
Copyright (c) 1997-2018 The PHP Group
Zend Engine v3.2.0, Copyright (c) 1998-2018 Zend Technologies

//配置php-fpm
[[email protected] php-7.2.8]# cp php.ini-production /etc/php.ini
[[email protected] php-7.2.8]# cp sapi/fpm/init.d.php-fpm /etc/init.d/php-fpm
[[email protected] php-7.2.8]# chmod +x /etc/rc.d/init.d/php-fpm
[[email protected] php-7.2.8]# cp /usr/local/php7/etc/php-fpm.conf.default /usr/local/php7/etc/php-fpm.conf
[[email protected] php-7.2.8]# cp /usr/local/php7/etc/php-fpm.d/www.conf.default /usr/local/php7/etc/php-fpm.d/www.conf

//編輯php-fpm的配置檔案(/usr/local/php7/etc/php-fpm.conf):
//配置fpm的相關選項為你所需要的值:
[[email protected] php-7.2.8]#  vim /usr/local/php7/etc/php-fpm.conf
[[email protected] php-7.2.8]# tail -4 /usr/local/php7/etc/php-fpm.conf
pm.max_children = 50    //最多同時提供50個程序提供50個并發服務
pm.start_servers = 5    //啟動時啟動5個程序
pm.min_spare_servers = 2    //最小空閑程序數
pm.max_spare_servers = 8    //最大空閑程序數

//啟動php-fpm
[[email protected] php-7.2.8]# service php-fpm start
Starting php-fpm  done

//預設情況下,fpm監聽在127.0.0.1的9000端口,也可以使用如下指令驗證其是否已經監聽在相應的套接字
[[email protected] php-7.2.8]# ss -anlt
State      Recv-Q Send-Q Local Address:Port               Peer Address:Port              
LISTEN     0      128            *:22                         *:*                  
LISTEN     0      128    127.0.0.1:9000                       *:*                  
LISTEN     0      5              *:873                        *:*                  
LISTEN     0      128           :::80                        :::*                  
LISTEN     0      32            :::21                        :::*                  
LISTEN     0      128           :::22                        :::*                  
LISTEN     0      5             :::873                       :::*                  
LISTEN     0      80            :::3306                      :::*   

[[email protected] php-7.2.8]# ps -ef |grep php
root      54233      1  0 17:46 ?        00:00:00 php-fpm: master process (/usr/local/php7/etc/php-fpm.conf)
nobody    54234  54233  0 17:46 ?        00:00:00 php-fpm: pool www
nobody    54235  54233  0 17:46 ?        00:00:00 php-fpm: pool www
nobody    54236  54233  0 17:46 ?        00:00:00 php-fpm: pool www
nobody    54237  54233  0 17:46 ?        00:00:00 php-fpm: pool www
nobody    54238  54233  0 17:46 ?        00:00:00 php-fpm: pool www
root      54241  33730  0 17:48 pts/0    00:00:00 grep --color=auto php

           

3.4 配置apache

3.4.1 啟用代理子產品

在apache httpd 2.4以後已經專門有一個子產品針對FastCGI的實作,此子產品為mod_proxy_fcgi.so,它其實是作為mod_proxy.so子產品的擴充,是以,這兩個子產品都要加載,編輯httpd.conf檔案,取消以下兩行内容的注釋:

  • LoadModule proxy_module modules/mod_proxy.so
  • LoadModule proxy_fcgi_module modules/mod_proxy_fcgi.so
//啟用httpd的相關子產品
[[email protected] php-7.2.8]# sed -i '/proxy_module/s/#//g' /etc/httpd24/httpd.conf
[[email protected] php-7.2.8]# sed -i '/proxy_fcgi_module/s/#//g' /etc/httpd24/httpd.conf=
           

3.4.2 配置虛拟主機

在需要使用fcgi的虛拟主機中添加類似如下兩行:

ProxyRequests Off       //關閉正向代理
ProxyPassMatch ^/(.*\.php)$ fcgi://127.0.0.1:9000/PATH/TO/DOCUMENT_ROOT/$1
           

例如:

ProxyPassMatch ^/(.*\.php)$ fcgi://127.0.0.1:9000/usr/local/apache/htdocs/liuwei.com/$1
           

以上設定表示把以.php結尾的檔案請求發送到php-fpm程序,php-fpm至少需要知道運作的目錄和URI,是以這裡直接在fcgi://127.0.0.1:9000後指明了這兩個參數,其它參數的傳遞已經被mod_proxy_fcgi.so進行了封裝,不需要手動指定。

注意:

這裡寫的/var/www/html/是yum源安裝方式生成的網頁存放目錄,這裡必須改成你編譯安裝指定的網頁存放路徑,禁止直接複制我這裡的路徑

這裡的idfsoft.com是域名,你必須改成你所使用的域名,禁止直接複制此處的域名

這裡的$1表示比對所有以.php結尾的http請求

//建立虛拟主機目錄并生成php測試頁面
[[email protected] php-7.2.8]# mkdir /usr/local/apache/htdocs/liuwei.com
[[email protected] php-7.2.8]# vim /usr/local/apache/htdocs/liuwei.com/index.php
[[email protected] php-7.2.8]# chown -R apache.apache /usr/local/apache/htdocs/
[[email protected] php-7.2.8]# ll /usr/local/apache/htdocs/ -d
drwxr-xr-x 3 apache apache 42 2月  20 18:01 /usr/local/apache/htdocs/
[[email protected] php-7.2.8]# cat /usr/local/apache/htdocs/liuwei.com/index.php
<?php
	phpinfo()
?>
[[email protected] php-7.2.8]# vim /etc/httpd24/httpd.conf
[[email protected] php-7.2.8]# tail -15 /etc/httpd24/httpd.conf
[[email protected] php-7.2.8]# tail -15 /etc/httpd24/httpd.conf
<IfModule ssl_module>
SSLRandomSeed startup builtin
SSLRandomSeed connect builtin
</IfModule>
<VirtualHost *:80>
    DocumentRoot "/usr/local/apache/htdocs/liuwei.com"
    ServerName www.liuwei.com
    ProxyRequests Off
    ProxyPassMatch ^/(.*\.php)$ fcgi://127.0.0.1:9000/usr/local/apache/htdocs/liuwei.com/$1
    <Directory "/usr/local/apache/htdocs/liuwei.com">
        Options none
        AllowOverride none
        Require all granted
    </Directory>
</VirtualHost>  

[[email protected] php-7.2.8]# vim /etc/httpd24/httpd.conf 
//搜尋AddType,添加以下内容
    AddType application/x-httpd-php .php
    AddType application/x-httpd-php-source .phps

[[email protected] php-7.2.8]# sed -i '/    DirectoryIndex/s/index.html/index.php index.html/g' /etc/httpd24/httpd.conf

//重新開機apache服務
[[email protected] php-7.2.8]# apachectl stop
[[email protected] php-7.2.8]# ss -anlt
State      Recv-Q Send-Q Local Address:Port               Peer Address:Port              
LISTEN     0      128            *:22                         *:*                  
LISTEN     0      128    127.0.0.1:9000                       *:*                  
LISTEN     0      5              *:873                        *:*                  
LISTEN     0      32            :::21                        :::*                  
LISTEN     0      128           :::22                        :::*                  
LISTEN     0      5             :::873                       :::*                  
LISTEN     0      80            :::3306                      :::*       
[[email protected] php-7.2.8]# apachectl start
[[email protected] php-7.2.8]# ss -anlt
State      Recv-Q Send-Q Local Address:Port               Peer Address:Port              
LISTEN     0      128            *:22                         *:*                  
LISTEN     0      128    127.0.0.1:9000                       *:*                  
LISTEN     0      5              *:873                        *:*                  
LISTEN     0      128           :::80                        :::*                  
LISTEN     0      32            :::21                        :::*                  
LISTEN     0      128           :::22                        :::*                  
LISTEN     0      5             :::873                       :::*                  
LISTEN     0      80            :::3306                      :::*           
           

3.5 驗證

1.修改/etc/hosts檔案,添加域名與IP的映射

lamp搭建1. lamp簡介2. web伺服器工作流程3. lamp平台建構3.5 驗證

2.在浏覽器上使用域名通路,若看到以下界面則表示lamp架構搭建成功,否則請檢查你的操作

lamp搭建1. lamp簡介2. web伺服器工作流程3. lamp平台建構3.5 驗證
lamp搭建1. lamp簡介2. web伺服器工作流程3. lamp平台建構3.5 驗證

繼續閱讀