阿里雲 ECS Linux 雲伺服器編譯安裝 PHP 開發環境

dongzt發表於2018-07-27

本文介紹如何使用一臺普通配置的雲伺服器 ECS 例項搭建 LNMP 平臺的web環境,這也是本人的一些踩坑總結。

適用物件

適用於熟悉Linux作業系統,剛開始使用阿里雲進行建站的個人使用者。

基本流程

使用雲伺服器 ECS 搭建 LNMP 平臺的操作步驟如下:

1.準備編譯環境

2.安裝 nginx

3.安裝 mysql

4.安裝 php-fpm

5.測試訪問

步驟一:準備編譯環境

本文主要說明手動安裝 LNMP 平臺的操作步驟,您也可以在雲市場購買 LNMP 映象直接啟動 ECS,以便快速建站。

開啟一個終端,登入 ECS 雲伺服器:

ssh user@IP

回車,輸入正確的密碼後再回車即可登入。

1、系統版本說明

[root@example ~]# cat /etc/redhat-release
CentOS Linux release 7.3.1611 (Core)
[root@example ~]#

注:這是本文件實施時參考的系統版本。您的實際使用版本可能與此不同,下文中的 nginxmysql,及 php 版本,您也可以根據實際情況選擇相應版本。

2、關閉SELINUX

修改配置檔案,重啟服務後永久生效。

[root@example ~]# sed -i 's/SELINUX=.*/SELINUX=disabled/g'  /etc/selinux/config

命令列設定立即生效。

[root@example ~]# setenforce 0

3、安全組設定

ECS 安全組放行需訪問的埠和訪問白名單,下面的示例表示允許所有 IP 訪問伺服器的 80 埠。您可以根據實際情況放行允許訪問的客戶端 IP

安全組

步驟二:安裝 Nginx

Nginx 是一個小巧而高效的 Linux 下的 Web 伺服器軟體,是由 Igor Sysoev 為俄羅斯訪問量第二的 Rambler.ru 站點開發的,已經在一些俄羅斯的大型網站上執行多年,目前很多國內外的入口網站、行業網站也都在是使用 Nginx,相當穩定。

Nginx下載頁面地址

http://nginx.org/en/download.html

nignx下載頁面

1、新增執行nginx服務程式的使用者

[root@example ~]# groupadd -r nginx
[root@example ~]# useradd -r -g nginx  nginx

2、下載原始碼包解壓編譯。

將滑鼠放到你想下載的對應版本的檔案上方,【右鍵】->【複製連結地址】, 然後:

進入要存放原始碼檔案的目錄:

[root@example ~]# cd /usr/local/src

下載對應版本的壓縮包:

[root@example ~]# wget http://nginx.org/download/nginx-1.10.2.tar.gz

解壓縮:

[root@example ~]# tar xvf nginx-1.10.2.tar.gz

安裝依賴包:

[root@example ~]# yum groupinstall "Development tools"
[root@example ~]# yum -y install gcc wget gcc-c++ automake autoconf libtool libxml2-devel libxslt-devel perl-devel perl-ExtUtils-Embed pcre-devel openssl-devel

進入解壓後的原始碼目錄:

[root@example ~]# cd /usr/local/src/nginx-1.10.2

配置編譯引數:

./configure \
--prefix=/usr/local/nginx \
--sbin-path=/usr/sbin/nginx \
--conf-path=/etc/nginx/nginx.conf \
--error-log-path=/var/log/nginx/error.log \
--http-log-path=/var/log/nginx/access.log \
--pid-path=/var/run/nginx.pid \
--lock-path=/var/run/nginx.lock \
--http-client-body-temp-path=/var/tmp/nginx/client \
--http-proxy-temp-path=/var/tmp/nginx/proxy \
--http-fastcgi-temp-path=/var/tmp/nginx/fcgi \
--http-uwsgi-temp-path=/var/tmp/nginx/uwsgi \
--http-scgi-temp-path=/var/tmp/nginx/scgi \
--user=nginx \
--group=nginx \
--with-pcre \
--with-http_v2_module \
--with-http_ssl_module \
--with-http_realip_module \
--with-http_addition_module \
--with-http_sub_module \
--with-http_dav_module \
--with-http_flv_module \
--with-http_mp4_module \
--with-http_gunzip_module \
--with-http_gzip_static_module \
--with-http_random_index_module \
--with-http_secure_link_module \
--with-http_stub_status_module \
--with-http_auth_request_module \
--with-mail \
--with-mail_ssl_module \
--with-file-aio \
--with-ipv6 \
--with-threads \
--with-stream \
--with-stream_ssl_module

如果沒有配置出錯,然後進行編譯安裝:

[root@example ~]# make && make install

建立 nginx 相關的目錄:

[root@example ~]# mkdir -pv /var/tmp/nginx/client

3、新增SysV啟動指令碼。

[root@example ~]# vim /etc/init.d/nginx

複製以下內容到指令碼中:

#!/bin/sh
#
# nginx - this script starts and stops the nginx daemon
#
# chkconfig:   - 85 15
# description: Nginx is an HTTP(S) server, HTTP(S) reverse \
#               proxy and IMAP/POP3 proxy server
# processname: nginx
# config:      /etc/nginx/nginx.conf
# config:      /etc/sysconfig/nginx
# pidfile:     /var/run/nginx.pid
# Source function library.
. /etc/rc.d/init.d/functions
# Source networking configuration.
. /etc/sysconfig/network
# Check that networking is up.
[ "$NETWORKING" = "no" ] && exit 0
nginx="/usr/sbin/nginx"
prog=$(basename $nginx)
NGINX_CONF_FILE="/etc/nginx/nginx.conf"
[ -f /etc/sysconfig/nginx ] && . /etc/sysconfig/nginx
lockfile=/var/lock/subsys/nginx
start() {
    [ -x $nginx ] || exit 5
    [ -f $NGINX_CONF_FILE ] || exit 6
    echo -n $"Starting $prog: "
    daemon $nginx -c $NGINX_CONF_FILE
    retval=$?
    echo
    [ $retval -eq 0 ] && touch $lockfile
    return $retval
}
stop() {
    echo -n $"Stopping $prog: "
    killproc $prog -QUIT
    retval=$?
    echo
    [ $retval -eq 0 ] && rm -f $lockfile
    return $retval
killall -9 nginx
}
restart() {
    configtest || return $?
    stop
    sleep 1
    start
}
reload() {
    configtest || return $?
    echo -n $"Reloading $prog: "
    killproc $nginx -HUP
RETVAL=$?
    echo
}
force_reload() {
    restart
}
configtest() {
$nginx -t -c $NGINX_CONF_FILE
}
rh_status() {
    status $prog
}
rh_status_q() {
    rh_status >/dev/null 2>&1
}
case "$1" in
    start)
        rh_status_q && exit 0
    $1
        ;;
    stop)
        rh_status_q || exit 0
        $1
        ;;
    restart|configtest)
        $1
        ;;
    reload)
        rh_status_q || exit 7
        $1
        ;;
    force-reload)
        force_reload
        ;;
    status)
        rh_status
        ;;
    condrestart|try-restart)
        rh_status_q || exit 0
            ;;
    *)
      echo $"Usage: $0 {start|stop|status|restart|condrestart|try-restart|reload|force-reload|configtest}"
        exit 2
esac

4、賦予指令碼執行許可權。

[root@example ~]# chmod +x /etc/init.d/nginx

5、新增至服務管理列表,設定開機自啟。

[root@example ~]# chkconfig --add nginx
[root@example ~]# chkconfig  nginx on

6、啟動服務。

[root@example ~]# service nginx start

7、瀏覽器訪問可看到預設歡迎頁面。

nignx預設的歡迎頁面

步驟三:安裝 MySQL

MySQL下載頁面地址

https://dev.mysql.com/downloads/mysql/

1、準備編譯環境。

[root@example ~]# yum groupinstall "Server Platform Development"  "Development tools" -y
[root@example ~]# yum install cmake -y

2、準備 MySQL 資料存放目錄。

[root@example ~]# mkdir /mnt/data
[root@example ~]# groupadd -r mysql
[root@example ~]# useradd -r -g mysql -s /sbin/nologin mysql
[root@example ~]# id mysql
uid=497(mysql) gid=498(mysql) groups=498(mysql)

3、更改資料目錄屬主屬組:

[root@example ~]# chown -R mysql:mysql /mnt/data

4、解壓編譯在 MySQL 官網下載的穩定版原始碼包

進入MySQL 的下載頁面:

MySQL官網下載頁面

點選你想要的版本, 因為是編譯安裝,所以選擇 Source Code 版本:
選擇版本

然後將本頁面拉到下面,選擇下載最下方的一個版本,點選Download
點選下載

跳轉頁面之後,對紅框中的連結進行:【右鍵】->【複製連結地址】
複製連結

開啟終端,切換目錄:

[root@example ~]# cd /usr/local/src

下載壓縮包:

[root@example ~]# wget https://dev.mysql.com/get/Downloads/MySQL-5.6/mysql-5.6.40.tar.gz

解壓縮:

[root@example ~]# tar xvf mysql-5.6.40.tar.gz

進入解壓縮後的目錄:

[root@example ~]# cd /usr/local/src/mysql-5.6.40

配置編譯引數:

[root@example ~]# cmake \
-DCMAKE_INSTALL_PREFIX=/usr/local/mysql \
-DMYSQL_DATADIR=/mnt/data \
-DSYSCONFDIR=/etc \
-DWITH_INNOBASE_STORAGE_ENGINE=1 \
-DWITH_ARCHIVE_STORAGE_ENGINE=1 \
-DWITH_BLACKHOLE_STORAGE_ENGINE=1 \
-DWITH_READLINE=1 \
-DWITH_SSL=system \
-DWITH_ZLIB=system \
-DWITH_LIBWRAP=0 \
-DMYSQL_TCP_PORT=3306 \
-DMYSQL_UNIX_ADDR=/tmp/mysql.sock \
-DDEFAULT_CHARSET=utf8 \
-DDEFAULT_COLLATION=utf8_general_ci

若出現如下錯誤:

CMake Error at cmake/ssl.cmake:247 (MESSAGE):
  Cannot find appropriate system libraries for SSL.  Make sure you've
  specified a supported SSL version.  Consult the documentation for WITH_SSL
  alternatives
Call Stack (most recent call first):
  CMakeLists.txt:446 (MYSQL_CHECK_SSL)

-- Could NOT find Curses (missing:  CURSES_LIBRARY CURSES_INCLUDE_PATH)
CMake Error at cmake/readline.cmake:85 (MESSAGE):
  Curses library not found.  Please install appropriate package,

      remove CMakeCache.txt and rerun cmake.On Debian/Ubuntu, package name is libncurses5-dev, on Redhat and derivates it is ncurses-devel.
Call Stack (most recent call first):
  cmake/readline.cmake:128 (FIND_CURSES)
  cmake/readline.cmake:218 (MYSQL_USE_BUNDLED_EDITLINE)
  CMakeLists.txt:448 (MYSQL_CHECK_EDITLINE)

-- Configuring incomplete, errors occurred!
See also "/usr/local/src/mysql-5.6.38/CMakeFiles/CMakeOutput.log".
See also "/usr/local/src/mysql-5.6.38/CMakeFiles/CMakeError.log".

執行此操作:

[root@example ~]# rm CMakeCache.txt
[root@example ~]# yum install ncurses-devel

接著:

[root@example ~]# make && make install

5、修改安裝目錄的屬組為mysql。

[root@example ~]# chown -R mysql:mysql /usr/local/mysql/

6、初始化資料庫。

[root@example ~]# /usr/local/mysql/scripts/mysql_install_db --user=mysql --datadir=/mnt/data/

注:在當前版本的作業系統的最小安裝完成後,在 /etc 目錄下會存在一個 my.cnf,需要將此檔案更名為其他的名字,如:/etc/my.cnf.bak,否則,該檔案會干擾原始碼安裝的 MySQL 的正確配置,造成無法啟動。

[root@example ~]#  mv /etc/my.cnf /etc/my.cnf.bak

7、拷貝配置檔案和啟動指令碼。

[root@example ~]# cp /usr/local/mysql/support-files/mysql.server /etc/init.d/mysqld
[root@example ~]# chmod +x /etc/init.d/mysqld
[root@example ~]# cp support-files/my-default.cnf /etc/my.cnf

8、設定開機自動啟動。

[root@example ~]# chkconfig mysqld  on
[root@example ~]# chkconfig --add mysqld

9、修改配置檔案中的安裝路徑及資料目錄存放路徑。

[root@example ~]# echo -e "basedir = /usr/local/mysql\ndatadir = /mnt/data\n" >> /etc/my.cnf

10、設定PATH環境變數。

[root@example ~]# echo "export PATH=$PATH:/usr/local/mysql/bin" > /etc/profile.d/mysql.sh
[root@example ~]# source /etc/profile.d/mysql.sh

11、啟動服務。

[root@example ~]# service mysqld start

若出現如下錯誤:

Starting MySQL.Logging to '/mnt/data/localhost.localdomain.err'.
The server quit without updating PID file (/mnt/data/localh[FAILED]ldomain.pid).
[root@localhost mysql]# service mysqld start
Starting MySQL.The server quit without updating PID file (/mnt/data/localhost.localdomain.pid).                                            [FAILED]

重新初始化:
進入當前目錄下的 scripts 目錄:

[root@localhost mysql]# cd scripts/
[root@localhost scripts]# ./mysql_install_db --user=mysql --datadir=/mnt/data/
FATAL ERROR: Could not find ./bin/my_print_defaults

If you compiled from source, you need to run 'make install' to
copy the software into the correct location ready for operation.

If you are using a binary release, you must either be at the top
level of the extracted archive, or pass the --basedir option
pointing to that location.

接著執行:

[root@localhost scripts]# /usr/local/mysql/scripts/mysql_install_db --user=mysql --basedir=/usr/local/mysql --datadir=/mnt/data &

看到如下資訊之後回車:

[1] 16068
[root@localhost scripts]# Installing MySQL system tables...2017-12-01 01:23:46 0 [Warning] TIMESTAMP with implicit DEFAULT value is deprecated. Please use --explicit_defaults_for_timestamp server option (see documentation for more details).
2017-12-01 01:23:46 0 [Note] Ignoring --secure-file-priv value as server is running with --bootstrap.
2017-12-01 01:23:46 0 [Note] /usr/local/mysql/bin/mysqld (mysqld 5.6.38) starting as process 16077 ...
2017-12-01 01:23:46 16077 [Note] InnoDB: Using atomics to ref count buffer pool pages
2017-12-01 01:23:46 16077 [Note] InnoDB: The InnoDB memory heap is disabled
2017-12-01 01:23:46 16077 [Note] InnoDB: Mutexes and rw_locks use GCC atomic builtins
2017-12-01 01:23:46 16077 [Note] InnoDB: Memory barrier is not used
2017-12-01 01:23:46 16077 [Note] InnoDB: Compressed tables use zlib 1.2.7
2017-12-01 01:23:46 16077 [Note] InnoDB: Using CPU crc32 instructions
2017-12-01 01:23:46 16077 [Note] InnoDB: Initializing buffer pool, size = 128.0M
2017-12-01 01:23:46 16077 [Note] InnoDB: Completed initialization of buffer pool
2017-12-01 01:23:46 16077 [Note] InnoDB: The first specified data file ./ibdata1 did not exist: a new database to be created!
2017-12-01 01:23:46 16077 [Note] InnoDB: Setting file ./ibdata1 size to 12 MB
2017-12-01 01:23:46 16077 [Note] InnoDB: Database physically writes the file full: wait...
2017-12-01 01:23:46 16077 [Note] InnoDB: Setting log file ./ib_logfile101 size to 48 MB
2017-12-01 01:23:46 16077 [Note] InnoDB: Setting log file ./ib_logfile1 size to 48 MB
2017-12-01 01:23:46 16077 [Note] InnoDB: Renaming log file ./ib_logfile101 to ./ib_logfile0
2017-12-01 01:23:46 16077 [Warning] InnoDB: New log files created, LSN=45781
2017-12-01 01:23:46 16077 [Note] InnoDB: Doublewrite buffer not found: creating new
2017-12-01 01:23:46 16077 [Note] InnoDB: Doublewrite buffer created
2017-12-01 01:23:46 16077 [Note] InnoDB: 128 rollback segment(s) are active.
2017-12-01 01:23:46 16077 [Warning] InnoDB: Creating foreign key constraint system tables.
2017-12-01 01:23:46 16077 [Note] InnoDB: Foreign key constraint system tables created
2017-12-01 01:23:46 16077 [Note] InnoDB: Creating tablespace and datafile system tables.
2017-12-01 01:23:46 16077 [Note] InnoDB: Tablespace and datafile system tables created.
2017-12-01 01:23:46 16077 [Note] InnoDB: Waiting for purge to start
2017-12-01 01:23:46 16077 [Note] InnoDB: 5.6.38 started; log sequence number 0
2017-12-01 01:23:46 16077 [Note] RSA private key file not found: /mnt/data//private_key.pem. Some authentication plugins will not work.
2017-12-01 01:23:46 16077 [Note] RSA public key file not found: /mnt/data//public_key.pem. Some authentication plugins will not work.
2017-12-01 01:23:47 16077 [Note] Binlog end
2017-12-01 01:23:47 16077 [Note] InnoDB: FTS optimize thread exiting.
2017-12-01 01:23:47 16077 [Note] InnoDB: Starting shutdown...
2017-12-01 01:23:48 16077 [Note] InnoDB: Shutdown completed; log sequence number 1625977
OK

Filling help tables...2017-12-01 01:23:48 0 [Warning] TIMESTAMP with implicit DEFAULT value is deprecated. Please use --explicit_defaults_for_timestamp server option (see documentation for more details).
2017-12-01 01:23:48 0 [Note] Ignoring --secure-file-priv value as server is running with --bootstrap.
2017-12-01 01:23:48 0 [Note] /usr/local/mysql/bin/mysqld (mysqld 5.6.38) starting as process 16099 ...
2017-12-01 01:23:48 16099 [Note] InnoDB: Using atomics to ref count buffer pool pages
2017-12-01 01:23:48 16099 [Note] InnoDB: The InnoDB memory heap is disabled
2017-12-01 01:23:48 16099 [Note] InnoDB: Mutexes and rw_locks use GCC atomic builtins
2017-12-01 01:23:48 16099 [Note] InnoDB: Memory barrier is not used
2017-12-01 01:23:48 16099 [Note] InnoDB: Compressed tables use zlib 1.2.7
2017-12-01 01:23:48 16099 [Note] InnoDB: Using CPU crc32 instructions
2017-12-01 01:23:48 16099 [Note] InnoDB: Initializing buffer pool, size = 128.0M
2017-12-01 01:23:48 16099 [Note] InnoDB: Completed initialization of buffer pool
2017-12-01 01:23:48 16099 [Note] InnoDB: Highest supported file format is Barracuda.
2017-12-01 01:23:48 16099 [Note] InnoDB: 128 rollback segment(s) are active.
2017-12-01 01:23:48 16099 [Note] InnoDB: Waiting for purge to start
2017-12-01 01:23:48 16099 [Note] InnoDB: 5.6.38 started; log sequence number 1625977
2017-12-01 01:23:48 16099 [Note] RSA private key file not found: /mnt/data//private_key.pem. Some authentication plugins will not work.
2017-12-01 01:23:48 16099 [Note] RSA public key file not found: /mnt/data//public_key.pem. Some authentication plugins will not work.
2017-12-01 01:23:48 16099 [Note] Binlog end
2017-12-01 01:23:48 16099 [Note] InnoDB: FTS optimize thread exiting.
2017-12-01 01:23:48 16099 [Note] InnoDB: Starting shutdown...
2017-12-01 01:23:49 16099 [Note] InnoDB: Shutdown completed; log sequence number 1625987
OK

To start mysqld at boot time you have to copy
support-files/mysql.server to the right place for your system

PLEASE REMEMBER TO SET A PASSWORD FOR THE MySQL root USER !
To do so, start the server, then issue the following commands:

  /usr/local/mysql/bin/mysqladmin -u root password 'new-password'
  /usr/local/mysql/bin/mysqladmin -u root -h localhost.localdomain password 'new-password'

Alternatively you can run:

  /usr/local/mysql/bin/mysql_secure_installation

which will also give you the option of removing the test
databases and anonymous user created by default.  This is
strongly recommended for production servers.

See the manual for more instructions.

You can start the MySQL daemon with:

  cd . ; /usr/local/mysql/bin/mysqld_safe &

You can test the MySQL daemon with mysql-test-run.pl

  cd mysql-test ; perl mysql-test-run.pl

Please report any problems at http://bugs.mysql.com/

The latest information about MySQL is available on the web at

  http://www.mysql.com

Support MySQL by buying support/licenses at http://shop.mysql.com

New default config file was created as /usr/local/mysql/my.cnf and
will be used by default by the server when you start it.
You may edit this file to change server settings

WARNING: Default config file /etc/my.cnf exists on the system
This file will be read by default by the MySQL server
If you do not want to use this, either remove it, or use the
--defaults-file argument to mysqld_safe when starting the server

[1]+  完成                  /usr/local/mysql/scripts/mysql_install_db --user=mysql --basedir=/usr/local/mysql --datadir=/mnt/data

檢視一下 MySQL 的狀態:

[root@localhost scripts]# service mysqld status
MySQL is not running, but lock file (/var/lock/subsys/mysql[FAILED]

啟動與重啟的檢查:

[root@localhost scripts]# service mysqld start
Starting MySQL.Logging to '/mnt/data/localhost.localdomain.err'.
                                                           [  OK  ]
[root@localhost scripts]# service mysqld restart
Shutting down MySQL.                                       [  OK  ]
Starting MySQL.                                            [  OK  ]

登入連線資料庫:

[root@example ~]# mysql -h 127.0.0.1

步驟四:安裝php-fpm

Nginx 本身不能處理 PHP,作為 Web 伺服器,當它接收到請求後,不支援對外部程式的直接呼叫或者解析,必須通過 FastCGI 進行呼叫。如果是 PHP 請求,則交給 PHP 直譯器處理,並把結果返回給客戶端。PHP-FPM 是支援解析 PHP的一個 FastCGI程式管理器。提供了更好管理 PHP程式的方式,可以有效控制記憶體和程式、可以平滑過載 PHP 配置。

1、安裝依賴包。

[root@example ~]# yum install libmcrypt libmcrypt-devel mhash mhash-devel libxml2 libxml2-devel bzip2 bzip2-devel

2、從官網下載的原始碼包,解壓縮並編譯安裝。
PHP ( 7.0.26 ) 下載頁面:

http://php.net/get/php-7.0.26.tar.gz/from/...

download

選擇一個映象源,【右鍵】->【複製連結地址】:

切換到存放原始碼的目錄:

[root@example ~]# cd /usr/local/src/

下載壓縮包:

[root@example ~]# wget http://cn2.php.net/get/php-7.0.26.tar.gz/from/this/mirror

下載好以後,這個壓縮包的檔名是 mirror, 但是它其實是一個 .tar.gz 的壓縮包,所以將它解壓縮:

tar -zxvf php-7.0.26.tar.gz

進入解壓縮後的目錄:

[root@example ~]# cd php-7.0.26/

配置編譯引數:

[root@example ~]# ./configure --prefix=/usr/local/php \
--with-config-file-scan-dir=/etc/php.d \
--with-config-file-path=/etc \
--with-mysqli=/usr/local/mysql \
--with-mysqli=/usr/local/mysql/bin/mysql_config \
--with-pdo-mysql=/usr/local/mysql \
--enable-mbstring \
--with-freetype-dir \
--with-jpeg-dir \
--with-png-dir \
--with-zlib \
--with-libxml-dir=/usr \
--with-openssl \
--enable-xml \
--enable-sockets \
--enable-fpm \
--with-mcrypt \
--with-bz2 \
--with-curl=/usr/local/curl

如果沒有 curl,請看這:Linux 編譯安裝 CURL

如果沒有配置出錯,執行編譯安裝:

[root@example ~]# make && make install

如果你使用的是配置比較低,記憶體比較小的伺服器,可能到編譯這一步就會卡掉,因為在前面已經啟動了 MySQL ,MySQL的記憶體佔用很高,我的伺服器記憶體是 1 個 G ,MySQL的記憶體佔用是 45.6% ,如果出現編譯停止,報 fileinfo 擴充套件的錯誤,請先停止MySQL服務,等 PHP 安裝完後再將其啟動。

3、新增php和php-fpm配置檔案。

[root@example ~]# cp /usr/local/src/php-7.0.26/php.ini-production /etc/php.ini
[root@example ~]# cd /usr/local/php/etc/
[root@example ~]# cp php-fpm.conf.default php-fpm.conf
[root@example ~]# sed -i 's@;pid = run/php-fpm.pid@pid = /usr/local/php/var/run/php-fpm.pid@' php-fpm.conf

4、新增php-fpm啟動指令碼,並賦予指令碼執行許可權:

[root@example ~]# cp /usr/local/src/php-7.0.26/sapi/fpm/init.d.php-fpm /etc/init.d/php-fpm
[root@example ~]# chmod +x /etc/init.d/php-fpm

5、新增php-fpm至服務列表並設定開機自啟。

[root@example ~]# chkconfig --add php-fpm
[root@example ~]# chkconfig --list php-fpm
[root@example ~]# chkconfig php-fpm on

6、啟動服務。

[root@example ~]# service php-fpm start

若出現如下情況:

Starting php-fpm [01-Dec-2017 02:31:24] WARNING: Nothing matches the include pattern '/usr/local/php/etc/php-fpm.d/*.conf' from /usr/local/php/etc/php-fpm.conf at line 125.
[01-Dec-2017 02:31:24] ERROR: No pool defined. at least one pool section must be specified in config file
[01-Dec-2017 02:31:24] ERROR: failed to post process the configuration
[01-Dec-2017 02:31:24] ERROR: FPM initialization failed
 failed

執行此操作:

[root@localhost etc]# cd /usr/local/php/etc/php-fpm.d
[root@localhost php-fpm.d]# cp www.conf.default www.conf
[root@localhost php-fpm.d]# service php-fpm start
Starting php-fpm  done
[root@localhost php-fpm.d]#

7、新增 nginxfastcgi 的支援,首先備份預設的配置檔案。

[root@localhost php-fpm.d]# cp /etc/nginx/nginx.conf /etc/nginx/nginx.confbak
[root@localhost php-fpm.d]# cp /etc/nginx/nginx.conf.default /etc/nginx/nginx.conf

編輯 /etc/nginx/nginx.conf ,在所支援的主頁面格式中新增 php 格式的主頁,類似如下:

[root@localhost php-fpm.d]# vim /etc/nginx/nginx.conf
location / {
           root   /usr/local/nginx/html;
           index  index.php index.html index.htm;
       }

取消以下內容前面的註釋:

location ~ \.php$ {
          root           /usr/local/nginx/html;
          fastcgi_pass    127.0.0.1:9000;
          fastcgi_index   index.php;
          fastcgi_param  SCRIPT_FILENAME  /usr/local/nginx/html/$fastcgi_script_name;
          include        fastcgi_params;
      }

重新載入nginx的配置檔案。

[root@localhost php-fpm.d]# service nginx reload

在 /usr/local/nginx/html/ 新建 index.php 的測試頁面,內容如下。

<?php
phpinfo();

瀏覽器訪問測試,如看到以下內容則表示 LNMP 平臺構建完成。

phpinfo

本作品採用《CC 協議》,轉載必須註明作者和本文連結

相關文章