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



~~PHP7の正式リリースまであと少しになりました。（１０月１６日現在）
という事で開発中のPHP7の環境を試しに構築してみました。~~
12月3日に正式リリースされました。おめでとうございます！
という事で、手順を更新しました。
開発用のyumリポジトリからPHPをインストールしていたのですが、リポジトリがいつまで存続するかもわからないので、
最新ソースをダウンロード、ビルドしてインストールするように手順を変更しました。

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

### 1-1.必要そうなパッケージをインストール
```bash
$ yum install autoconf automake libtool re2c flex bison
```

### 1-2.get source
```bash
$ git clone -b PHP-7.0.0 https://github.com/php/php-src.git
```

### 1-3.build & install
[phpng](https://wiki.php.net/phpng)
公式に載っている手順でインストールしていきます。
configure オプションはとりあえず以下のにしました。
必要に応じて追加・削除してください。
**--enable-fpm** は付けないと php-fpm の実行ファイルがインストールされないので注意です。

```bash
$ 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.パス通す
```bash
$ 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リポジトリ追加
```bash
$ 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
```bash
$ 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
```bash
$ 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
```

```bash
$ 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
```

```bash
$ 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
```
```bash
$ systemctl daemon-reload
```

## 4.サービス起動
```bash
$ systemctl start nginx
$ systemctl start php-fpm
```

## 5.動作確認
```bash
$ echo '<?php phpinfo();' > /usr/share/nginx/html/info.php
$ curl 'http://localhost/info.php'
```


## 参考にさせていただいたサイト
Thanksヽ(=´▽`=)ﾉ

* https://www.howtoforge.com/tutorial/install-php-7-on-debian-8-jessie/
* http://php7.zend.com/repo.php