Edited at

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

More than 3 years have passed since last update.

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