CentOS7 + PHP7 + nginx + php-fpm の環境構築

  • 84
    いいね
  • 0
    コメント
この記事は最終更新日から1年以上が経過しています。

PHP7の正式リリースまであと少しになりました。(10月16日現在)
という事で開発中のPHP7の環境を試しに構築してみました。

12月3日に正式リリースされました。おめでとうございます!
という事で、手順を更新しました。
開発用のyumリポジトリからPHPをインストールしていたのですが、リポジトリがいつまで存続するかもわからないので、
最新ソースをダウンロード、ビルドしてインストールするように手順を変更しました。

前提条件

  • OSは事前にインストール
  • インストールするPHP7は開発中のリポジトリからダウンロードしてインストールします
  • なので、正式リリース後は正規の手順を参照してください(時間あればそちらも書きます) 更新しました。

1.php7

1-1.必要そうなパッケージをインストール

$ yum install autoconf automake libtool re2c flex bison

1-2.get source

$ git clone -b PHP-7.0.0 https://github.com/php/php-src.git

1-3.build & install

phpng
公式に載っている手順でインストールしていきます。
configure オプションはとりあえず以下のにしました。
必要に応じて追加・削除してください。
--enable-fpm は付けないと php-fpm の実行ファイルがインストールされないので注意です。

$ cd php-src
$ ./buildconf
$ ./configure \
    --prefix=/usr/local/php7 \
    --with-config-file-path=/usr/local/php7/etc \
    --enable-mbstring \
    --enable-fpm \
    --enable-opcache
$ make && make install

1-4.パス通す

$ cat /etc/profile.d/php7.sh 
export PATH=${PATH}:/usr/local/php7/bin/:/usr/local/php7/sbin/
$ source /etc/profile

2.nginx

2-1.nginxのyumリポジトリ追加

$ cat /etc/yum.repos.d/nginx.repo
[nginx]
name=nginx repo
baseurl=http://nginx.org/packages/centos/$releasever/$basearch/
gpgcheck=0
enabled=1

2-2.install

$ yum --enablerepo=nginx install nginx

2-3.config

※以下を編集

/etc/nginx/conf.d/default.conf

    root   /usr/share/nginx/html;
    index  index.html index.htm;

    # pass the PHP scripts to FastCGI server listening on 127.0.0.1:9000
    #
    location ~ \.php$ {
        fastcgi_pass   127.0.0.1:9000;
        fastcgi_index  index.php;
        fastcgi_param  SCRIPT_FILENAME  $document_root$fastcgi_script_name;
        include         fastcgi_params;
    }

3.php-fpm

php7をインストールするとインストールディレクトリに
php-fpmの設定ファイルや実行ファイルもろもろがあるので、そのファイルを編集していきます。

3-1.config

$ cp -p /usr/local/php7/etc/php-fpm.conf{.default,}
$ vi /usr/local/php7/etc/php-fpm.conf
$ diff -u /usr/local/php7/etc/php-fpm.conf{.default,}
--- /usr/local/php7/etc/php-fpm.conf.default    2015-10-14 19:25:25.000000000 +0000
+++ /usr/local/php7/etc/php-fpm.conf    2015-10-16 03:18:42.380697082 +0000
@@ -14,7 +14,7 @@
 ; Pid file
 ; Note: the default prefix is /usr/local/php7/var
 ; Default Value: none
-;pid = run/php-fpm.pid
+pid = run/php-fpm.pid

 ; Error log file@@ -78,7 +78,7 @@

 ; Send FPM to background. Set to 'no' to keep FPM in foreground for debugging.
 ; Default Value: yes
-;daemonize = yes
+daemonize = yes

 ; Set open file descriptor rlimit for the master process.
 ; Default Value: system defined value
$ cp -p /usr/local/php7/etc/php-fpm.d/www.conf{.default,}
$ vi /usr/local/php7/etc/php-fpm.d/www.conf
$ diff -u /usr/local/php7/etc/php-fpm.d/www.conf{.default,}
--- /usr/local/php7/etc/php-fpm.d/www.conf.default  2015-10-14 19:25:25.000000000 +0000
+++ /usr/local/php7/etc/php-fpm.d/www.conf  2015-10-16 03:23:56.448721659 +0000
@@ -20,8 +20,8 @@
 ; Unix user/group of processes

 ;       will be used.
-user = nobody
-group = nobody
+user = nginx
+group = nginx

3-2.起動スクリプト作成

/etc/init.d/php-fpm
#! /bin/sh
### BEGIN INIT INFO
# Provides:          php--fpm
# Required-Start:    $all
# Required-Stop:     $all
# Default-Start:     2 3 4 5
# Default-Stop:      0 1 6
# Short-Description: starts php-fpm
# Description:       starts the PHP FastCGI Process Manager daemon
### END INIT INFO
php_fpm_BIN=/usr/local/php7/sbin/php-fpm
php_fpm_CONF=/usr/local/php7/etc/php-fpm.conf
php_fpm_PID=/usr/local/php7/var/run/php-fpm.pid
php_opts="--fpm-config $php_fpm_CONF"
wait_for_pid () {
        try=0
        while test $try -lt 35 ; do
                case "$1" in
                        'created')
                        if [ -f "$2" ] ; then
                                try=''
                                break
                        fi
                        ;;
                        'removed')
                        if [ ! -f "$2" ] ; then
                                try=''
                                break
                        fi
                        ;;
                esac
                echo -n .
                try=`expr $try + 1`
                sleep 1
        done
}
case "$1" in
        start)
                echo -n "Starting php-fpm "
                $php_fpm_BIN $php_opts
                if [ "$?" != 0 ] ; then
                        echo " failed"
                        exit 1
                fi
                wait_for_pid created $php_fpm_PID
                if [ -n "$try" ] ; then
                        echo " failed"
                        exit 1
                else
                        echo " done"
                fi
        ;;
        stop)
                echo -n "Gracefully shutting down php-fpm "
                if [ ! -r $php_fpm_PID ] ; then
                        echo "warning, no pid file found - php-fpm is not running ?"
                        exit 1
                fi
                kill -QUIT `cat $php_fpm_PID`
                wait_for_pid removed $php_fpm_PID
                if [ -n "$try" ] ; then
                        echo " failed. Use force-exit"
                        exit 1
                else
                        echo " done"
                       echo " done"
                fi
        ;;
        force-quit)
                echo -n "Terminating php-fpm "
                if [ ! -r $php_fpm_PID ] ; then
                        echo "warning, no pid file found - php-fpm is not running ?"
                        exit 1
                fi
                kill -TERM `cat $php_fpm_PID`
                wait_for_pid removed $php_fpm_PID
                if [ -n "$try" ] ; then
                        echo " failed"
                        exit 1
                else
                        echo " done"
                fi
        ;;
        restart)
                $0 stop
                $0 start
        ;;
        reload)
                echo -n "Reload service php-fpm "
                if [ ! -r $php_fpm_PID ] ; then
                        echo "warning, no pid file found - php-fpm is not running ?"
                        exit 1
                fi
                kill -USR2 `cat $php_fpm_PID`
                echo " done"
        ;;
        *)
                echo "Usage: $0 {start|stop|force-quit|restart|reload}"
                exit 1
        ;;
esac
$ chmod 755 /etc/init.d/php-fpm

3-3.(一応)サービスに追加

/lib/systemd/system/php-fpm.service
[Unit]
Description=The PHP 7 FastCGI Process Manager
After=network.target

[Service]
Type=simple
PIDFile=/usr/local/php7/var/run/php-fpm.pid
ExecStart=/usr/local/php7/sbin/php-fpm --nodaemonize --fpm-config /usr/local/php7/etc/php-fpm.conf
ExecReload=/bin/kill -USR2 $MAINPID

[Install]
WantedBy=multi-user.target
$ systemctl daemon-reload

4.サービス起動

$ systemctl start nginx
$ systemctl start php-fpm

5.動作確認

$ echo '<?php phpinfo();' > /usr/share/nginx/html/info.php
$ curl 'http://localhost/info.php'

参考にさせていただいたサイト

Thanksヽ(=´▽`=)ノ