標籤:

開發人員學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 cn2.php.net/distributio

2.2WordPress中文版

WordPress是一個非常著名的個人博客系統,這裡用它來驗證我們的php-fpm配置正確與否。

下載:wget cn.wordpress.org/wordpr

2.3安裝依賴庫

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

註:上面有些依賴庫在上一篇中已經安裝了,為省事我在這裡又一股腦列上了,在實際安裝過程中如果本地已經安裝了就不會再次安裝和下載了。

3.編譯和設置

3.1編譯文件

假定下載的php-5.6.30.tar.gz位於/root目錄下,首先解壓文件:

tar zxvf /root/php-5.6.30.tar.gzn

然後執行configure:

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

如果依賴庫都安裝了就不會報錯,如果提示缺少依賴庫就用yum install 來安裝。在上面的參數中:

--prefix=/usr/local/ php-5.6.30:表示將來程序安裝在/usr/local/ php-5.6.30目錄;

--enable-fpm:表示啟用php-fpm模塊,不啟用這個nginx就沒辦法將php頁面請求轉發個nginx處理了。

接著執行:

makenmake installn

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

[root@localhost ~]# ls -l /usr/local/php-5.6.30ntotal 0ndrwxr-xr-x 2 root root 147 Jun 7 23:38 binndrwxr-xr-x 2 root root 71 Jun 12 22:13 etcndrwxr-xr-x 3 root root 17 Jun 7 23:12 includendrwxr-xr-x 3 root root 85 Jun 12 22:12 libndrwxr-xr-x 4 root root 28 Jun 7 23:12 phpndrwxr-xr-x 2 root root 21 Jun 7 23:12 sbinndrwxr-xr-x 4 root root 28 Jun 7 23:12 varn

3.2配置

3.2.1php.ini配置

首先將剛才解壓的文件夾中將php.ini-development拷貝到/usr/local/php/lib目錄並命名為php.ini:

cp /root/php-5.6.30/php.ini-development /usr/local/php-5.6.30/lib/php.inin

注意:在開發伺服器將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-5.6.30/var/log/error-log.log ;錯誤日誌存放位置

date.timezone = "Asia/Shanghai"; 這句原本是」 ;date.timezone =」,需要去掉其注釋並設置為中國時區

3.2.2php-fpm.conf配置

首先將/usr/local/php-5.6.30/etc/php-fpm.conf.default拷貝一份並命名為php-fpm.conf:

cd /usr/local/php-5.6.30

cp etc/php-fpm.conf.default etc/php-fpm.conf

接著對php-fpm.conf做如下更改:

;pid = run/php-fpm.pid這一句取消注釋,並改為:pid = /usr/local/php-5.6.30/php-fpm.pid;

;error_log = log/php-fpm.log這一句取消注釋,並改為:error_log = /usr/local/php-5.6.30/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-5.6.30/sbin目錄下,可以通過/usr/local/php-5.6.30/sbin/php-fpm來執行監聽,默認是監聽9000埠。

也可以將其添加為service服務,service文件名為phpfpm.service,文件內容為:

[Unit]nDescription=php-fpm 5.6.30nAfter=network.targetn n[Service]nType=forkingnExecStart=/usr/local/php-5.6.30/sbin/php-fpmnExecRestart=kill -USR2 `cat /usr/local/php-5.6.30/php-fpm.pid`nExecStop=kill -INT `cat /usr/local/php-5.6.30/php-fpm.pid`nPrivateTmp=truen n[Install]nWantedBy=multi-user.targetn

將上述文件保存到/lib/systemd/system/目錄下,然後執行systemctl enable phpfpm.service來啟用service。

4.安裝WordPress

4.1資料庫準備

4.1.1啟動MySQL資料庫

為了觀察上一篇我們的Master-slave配置效果,這次我們將兩個資料庫實例都啟動:

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

4.1.2MySQL資料庫準備

為了信息安全,專門在主資料庫實例上創建一個名為wordpress的庫,並為wordpress庫配置一個資料庫賬戶,命令如下:

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

即新建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 {n listen 80;n server_name wordpress.goodapp.net;n access_log logs/wordpress.access.log main;n error_log logs/wordpress.error.log;n #root html;n #index index.html index.htm index.jsp index.php;n n location /{n root html/wordpress;n index index.htm index.html index.php;n }n n location ~* .php$ {n root html/wordpress;n fastcgi_pass 127.0.0.1:9000;n fastcgi_index index.php;n fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;n include fastcgi_params;n }n }n

然後在/usr/local/nginx-1.12.0/conf/nginx.conf中include這個文件,文件內容如下:

接著檢查配置是否有語法錯誤,如果沒有語法錯誤就重新載入配置:

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

4.2.3啟動應用

首先啟動nginx:

systemctl reload nginx.service

註:見本系列前面章節,因nginx已配置為隨系統啟動了,可以通過上述命令重新啟動。

接著啟動php-fpm:

/usr/local/php-5.6.30/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-5.6.30/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:WindowsSystem32driversetc目錄,修改後的內容如下:

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

註:192.168.60.198是CentOS7虛擬機的IP地址。

在瀏覽器中打開http:// wordpress.goodapp.net/test.php頁面,效果如下:

4.3安裝

在宿主機打開wordpress.goodapp.net/w即可看到安裝界面:

點擊「現在就開始!」就進入安裝界面,如下圖:

在本篇《4.1.2MySQL資料庫準備》中我們已經創建了wordpress庫和wordpress用戶,其密碼為WordPress,將上述信息填寫並提交即完成wordpress的安裝。

完成安裝後的wordpress後台管理首頁效果如下:

至於wordpress如何使用這裡就不詳述了,感興趣的可以去其官網看手冊,這裡主要是用wordpress來檢查nginx+php-fpm是否配置正確。

5.MySQL主從效果檢查

感興趣的朋友可以看一下我們上一篇講的MySQL主從配置是否正確,下面是我用HeidiSQL這個開源的資料庫管理工具查看到的主從資料庫的界面:

註:HeiDiSQL官網:MySQL, MSSQL and PostgreSQL made easy,可免費下載使用,支持PostgreSQL、MySQL及SQL Server。

6.總結

本篇講述了如何編譯PHP及通過配置讓Nginx藉助php-fpm來支持php應用,最後通過一個php應用wordpress的安裝和配置來檢查nginx+php-fpm是否配置正確,並且在本篇也檢驗了上一篇所述的MySQL主從複製是否正常工作。


推薦閱讀:

把網站從PHP5.4移到PHP5.6的那些坑——第二話:PHP版本不一樣還怎麼愉快玩耍
PHP高效獲取遠程圖片尺寸和大小的實現方法
webSoket+php搭建chatServer(附源碼)
怎樣學習才能擁有所謂「高並發」的經驗?
swoole啟動2萬個定時器對性能有影響嗎?

TAG:PHP | Nginx | CentOS |