開發人員學Linux(7):CentOS7編譯安裝PHP並配置PHP-FPM

1.前言
上一篇講述瞭如何編譯安裝MySQL,雖然可以通過yum install 或者rpm來安裝,但是yum install和rpm安裝有一個特點,就是有些參數是別人根據大衆需求定製的,如果需要進行自己的特定參數指定,這個是比較難做到的,因此有一定Linux基礎的人都是編譯安裝或者根據公司的具體環境製作適合環境的安裝包。上一篇的例子中講述瞭如何編譯安裝和如何配置多實例,並在最後講述瞭如何配置主從複製配置。
以前開源開發經常將LAMP,就是Linux+Apache+MySQL+PHP,對於一些起步型的公司來說LAMP可以滿足他們的所有幻想:既可以響應一定規模的用戶,對硬件的要求也很小。現在隨着Nginx的興起,LAMP變成了LNMP,即Linux+Nginx+MySQL+PHP,因此本篇將講述如何編譯安裝PHP並且使用php-fpm來讓Nginx支持PHP。
2.準備
2.1下載PHP5.6.3源碼
考慮到很多開源PHP還在用PHP5版本,因此這裏以PHP5.6.3版本的編譯安裝爲例:
下載:

wget http://cn2.php.net/distributions/php-5.6.3.tar.gz

2.2WordPress中文版
WordPress是一個非常著名的個人博客系統,這裏用它來驗證我們的php-fpm配置正確與否。
下載:

wget https://cn.wordpress.org/wordpress-4.7.4-zh_CN.zip

2.3安裝依賴庫

yum install gcc automake autoconf libtool make –y
yum install gcc gcc-c++ glibc –y
yum install libmcrypt-devel mhash-devel libxslt-devel –y
yum install libjpeg libjpeg-devel libpng libpng-devel freetype freetype-devel libxml2 libxml2-devel –y
yum install zlib zlib-devel glibc glibc-devel glib2 glib2-devel bzip2 bzip2-devel –y
yum install ncurses ncurses-devel curl curl-devel e2fsprogs e2fsprogs-devel -y
yum install krb5 krb5-devel libidn libidn-devel openssl openssl-devel -y

注:上面有些依賴庫在上一篇中已經安裝了,爲省事我在這裏又一股腦列上了,在實際安裝過程中如果本地已經安裝了就不會再次安裝和下載了。
3.編譯和設置
3.1編譯文件
假定下載的php-5.6.3.tar.gz位於/root目錄下,首先解壓文件:

tar zxvf /root/php-5.6.3.tar.gz


然後執行configure:

cd /root/php-5.6.3
./configure --prefix=/usr/local/php  --enable-fpm --with-mcrypt --enable-mbstring --disable-pdo --with-curl --disable-debug  --disable-rpath --enable-inline-optimization --with-bz2  --with-zlib --enable-sockets --enable-sysvsem --enable-sysvshm --enable-pcntl --enable-mbregex --with-mhash --enable-zip --with-pcre-regex --with-mysql --with-mysqli --with-gd --with-jpeg-dir -with-gettext --enable-xml --enable-freetype

如果依賴庫都安裝了就不會報錯,如果提示缺少依賴庫就用yum install 來安裝。在上面的參數中:
--prefix=/usr/local/php:表示將來程序安裝在/usr/local/php目錄;
--enable-fpm:表示啓用php-fpm模塊,不啓用這個nginx就沒辦法將php頁面請求轉發個nginx處理了。
接着執行:

make
make install

因爲源代碼有點多,編譯需要一點時間,請耐性等待。成功之後在/usr/local下會新建php文件夾,其文件目錄結構如下:

[root@localhost ~]# ls -l /usr/local/php
total 0
drwxr-xr-x 2 root root 147 Jun  7 23:38 bin
drwxr-xr-x 2 root root  71 Jun 12 22:13 etc
drwxr-xr-x 3 root root  17 Jun  7 23:12 include
drwxr-xr-x 3 root root  85 Jun 12 22:12 lib
drwxr-xr-x 4 root root  28 Jun  7 23:12 php
drwxr-xr-x 2 root root  21 Jun  7 23:12 sbin
drwxr-xr-x 4 root root  28 Jun  7 23:12 var

3.2配置
3.2.1php.ini配置
首先將剛纔解壓的文件夾中將php.ini-development拷貝到/usr/local/php/lib目錄並命名爲php.ini:

cp  /root/php-5.6.3/php.ini-development /usr/local/php/lib/php.ini


注意:在開發服務器將php.ini-development改爲php.ini,如果是生產服務器建議將php.ini-production改爲php.ini, php.ini-production與php.ini-development相比是關閉了一些調試輸出,這在生產環境中可以減少日誌文件的體積和提高性能,在開發環境中建議還是打開以便於調試。在接下來的講解中是基於開發環境配置的。
對php.ini做如下更改:
error_reporting = E_ALL & ~E_NOTICE ;輸出調試信息和通知
error_log = /usr/local/php/var/log/error-log.log ;錯誤日誌存放位置
date.timezone = "Asia/Shanghai"; 這句原本是” ;date.timezone =”,需要去掉其註釋並設置爲中國時區
3.2.2php-fpm.conf配置
首先將/usr/local/php/ etc/php-fpm.conf.default拷貝一份並命名爲php-fpm.conf:

cd /usr/local/php
cp etc/php-fpm.conf.default etc/php-fpm.conf

接着對php-fpm.conf做如下更改:
;pid = run/php-fpm.pid這一句取消註釋,並改爲:pid = /usr/local/php/var/run/php-fpm.pid;
;error_log = log/php-fpm.log這一句取消註釋,並改爲:error_log = /usr/local/php/var/log/error-log.log
user = nobody改爲:user = nginx
group = nobody改爲:group = nginx
;catch_workers_output = yes這一句取消註釋,改爲:catch_workers_output = yes
php-fpm可執行文件在/usr/local/php/sbin目錄下,可以通過/usr/local/php/sbin來執行監聽,默認是監聽9000端口。
4.安裝WordPress
4.1數據庫準備
4.1.1啓動MySQL數據庫
爲了觀察上一篇我們的Master-slave配置效果,這次我們將兩個數據庫實例都啓動:

/usr/local/mysql-5.7.18/data/3306/mysql start
/usr/local/mysql-5.7.18/data/3307/mysql start

4.1.2MySQL數據庫準備
爲了信息安全,專門在主數據庫實例上創建一個名爲wordpress的庫,併爲wordpress庫配置一個數據庫賬戶,命令如下:

create database wordpress;
grant all privileges on wordpress.* to wordpress@localhost identified by 'WordPress';flush privileges;

即新建wordpress庫,同時新建wordpress數據庫賬號,賬戶密碼爲WordPress,擁有對wordpress庫的全部權限。
4.2WordPress站點及域名解析配置
4.2.1解壓縮WordPress
假設wordpress-4.7.4-zh_CN.zip在/root目錄下,執行以下命令來解壓文件:

cd ~
tar zxvf ./wordpress-4.7.4-zh_CN.tar.gz

將wordpress放入nginx目錄下:

mv ./wordpress /usr/local/nginx-1.12.0/html


4.2.2在nginx中增加站點
首先在/usr/local/nginx-1.12.0/conf/vhosts增加一個文件,名爲wordpress.goodapp.net.conf,其內容如下:
    

server {
        listen       80;
        server_name  wordpress.goodapp.net;
        access_log  logs/wordpress.access.log  main;
        error_log  logs/wordpress.error.log;
        #root   html;
        #index  index.html index.htm index.jsp index.php;
        
        location /{
                root html/wordpress;
                index index.htm index.html index.php;
            }
            
        location ~* \.php$ {
                 root html/wordpress;
                 fastcgi_pass 127.0.0.1:9000;
                 fastcgi_index index.php;
                 fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
                 include fastcgi_params;
            }
    }

然後在/usr/local/nginx-1.12.0/conf/nginx.conf中include這個文件,文件內容如下:
wKioL1k_8wuwnIqcAABjd0dN1K8390.png-wh_50 
接着檢查配置是否有語法錯誤,如果沒有語法錯誤就重新加載配置:

/usr/local/nginx-1.12.0/sbin/nginx –t


4.2.3啓動應用
首先啓動nginx:

systemctl reload nginx.service


注:見本系列前面章節,因nginx已配置爲隨系統啓動了,可以通過上述命令重新啓動。
接着啓動php-fpm:

/usr/local/php/sbin/php-fpm


這是可以觀察php-fpm的啓動狀態:

[root@localhost ~]# netstat -lntp | grep 9000
tcp        0      0 127.0.0.1:9000          0.0.0.0:*               LISTEN      5498/php-fpm: maste

如果結果不是上述,可以查看錯誤日誌:

tail /usr/local/php/var/log/error-log.log


4.2.4配置檢測
我們可以在/usr/local/nginx-1.12.0/html/wordpress中創建一個測試php頁面,文件名爲test.php,文件內容如下:

<?php
    phpinfo();
?>

爲了能在Windows宿主機中能通過域名觀察結果,需要對hosts文件做修改,hosts文件位於C:\Windows\System32\drivers\etc目錄,修改後的內容如下:

# Copyright (c) 1993-2009 Microsoft Corp.
#
# This is a sample HOSTS file used by Microsoft TCP/IP for Windows.
#
# This file contains the mappings of IP addresses to host names. Each
# entry should be kept on an individual line. The IP address should
# be placed in the first column followed by the corresponding host name.
# The IP address and the host name should be separated by at least one
# space.
#
# Additionally, comments (such as these) may be inserted on individual
# lines or following the machine name denoted by a '#' symbol.
#
# For example:
#
#      102.54.94.97     rhino.acme.com          # source server
#       38.25.63.10     x.acme.com              # x client host
# localhost name resolution is handled within DNS itself.
#    127.0.0.1       localhost
#    ::1             localhost
192.168.60.198       www.goodapp.net
192.168.60.198       bbs.goodapp.net
192.168.60.198       wordpress.goodapp.net

注:192.168.60.198是CentOS7虛擬機的IP地址。
在瀏覽器中打開http:// wordpress.goodapp.net/test.php頁面,效果如下:
wKioL1k_81_xyBaFAAEe2whxVEE767.png-wh_50 
4.3安裝
在宿主機打開http://wordpress.goodapp.net/wp-admin/install.php即可看到安裝界面:
wKiom1k_827wwpVrAAC46GUzWMw687.png-wh_50 
點擊“現在就開始!”就進入安裝界面,如下圖:
wKioL1k_832DevzJAACR0jPoQB8376.png-wh_50 
在本篇《4.1.2MySQL數據庫準備》中我們已經創建了wordpress庫和wordpress用戶,其密碼爲WordPress,將上述信息填寫並提交即完成wordpress的安裝。
完成安裝後的wordpress後臺管理首頁效果如下:
wKiom1k_85DiVgjjAAG329sOVpw885.png-wh_50 
至於wordpress如何使用這裏就不詳述了,感興趣的可以去其官網看手冊,這裏主要是用wordpress來檢查nginx+php-fpm是否配置正確。
5.MySQL主從效果檢查
感興趣的朋友可以看一下我們上一篇講的MySQL主從配置是否正確,下面是我用HeidiSQL這個開源的數據庫管理工具查看到的主從數據庫的界面:
wKiom1k_86LQPtpjAAG329sOVpw570.png-wh_50 
注:HeiDiSQL官網:https://www.heidisql.com,可免費下載使用,支持PostgreSQL、MySQL及SQL Server。
6.總結
本篇講述瞭如何編譯PHP及通過配置讓Nginx藉助php-fpm來支持php應用,最後通過一個php應用wordpress的安裝和配置來檢查nginx+php-fpm是否配置正確,並且在本篇也檢驗了上一篇所述的MySQL主從複製是否正常工作。


聲明:本文首發於本人個人微信訂閱號:zhoujinqiaoIT,其後會同時在本人的CSDN、51CTO及oschina三處博客發佈,本人會負責在此四處答疑。


發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章