88
Help us understand the problem. What are the problem?

More than 5 years have passed since last update.

posted at

updated at

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

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ヽ(=´▽`=)ノ

Why not register and get more from Qiita?
  1. We will deliver articles that match you
    By following users and tags, you can catch up information on technical fields that you are interested in as a whole
  2. you can read useful information later efficiently
    By "stocking" the articles you like, you can search right away
88
Help us understand the problem. What are the problem?