LoginSignup
91
88

More than 5 years have passed since last update.

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

Last updated at Posted at 2015-10-16

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

91
88
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
91
88