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