PHP7.0.0が正式リリースされましたーパチパチパチ。
というわけでCentOS7にインストールする手順を記します。

前提条件

  • サーバはConoHa
  • OSはConoHaのCentOS7.1イメージ
  • phpenvとphp-buildを使う
  • php-fpm利用、unix-socketでlisten
  • systemdで自動起動

近いうちに7.0.1が出るでしょうから、phpenvとphp-buildでバージョン併用できるようにします。なお、こけてもらっては困るような本番環境での利用は避けたほうがよかろうかと思います。PHP7.0.0自体の安定性が不安です。

手順

CentOS7.1をConoHaで立ち上げる

Web画面からどうぞ

yumアップデート

# yum -y update

kernelのアップデートがあったりするので終了後にサーバ再起動します。

必要なライブラリを入れる

不要なものも混ざっているかもしれませんが、yumで入れます。systemd-develはsystemdで「Type=notify」にするために必要です。

    - gcc
    - gcc-c++
    - flex
    - bison
    - patch
    - autoconf
    - mysql
    - python-passlib
    - git
    - bison-devel
    - curl-devel
    - libjpeg-devel
    - libmcrypt
    - libmcrypt-devel
    - libpng-devel
    - libtidy
    - libtidy-devel
    - libxml2-devel
    - libxslt-devel
    - openssl-devel
    - readline-devel
    - systemd-devel

re2cのインストール

CentOS7系にはyumでre2cは用意されていないようなので、自前コンパイルします。
(※2016-06-06追記:epelの中にre2cがありました。epelは「yum install epel-release」で入ります。epel導入後、「yum install re2c」でインストールできます)

mkdir /root/src
cd /root/src
wget https://github.com/skvadrik/re2c/releases/download/0.13.6/re2c-0.13.6.tar.gz
gunzip re2c-0.13.6.tar.gz
tar xvf re2c-0.13.6.tar
cd re2c-0.13.6
./configure
make
make install
re2c -v

phpenvとphp-buildのインストール

システムワイドにインストールしています。開発環境ならユーザ単位でもよいでしょう。

環境変数を先に設定することでphpenvのインストール先を/opt以下に設定します。

# vi /etc/profile.d/phpenv.sh

入力内容は次のものです。

export PHPENV_ROOT="/opt/phpenv"
export PATH="$PATH:$PHPENV_ROOT/bin"
#eval "$(phpenv init -)"

phpenvとphp-buildを入れていきます。

# source /etc/profile.d/phpenv.sh
# cd /root/src
# git clone https://github.com/CHH/phpenv.git
# cd phpenv/bin/
# sh phpenv-install.sh
# mkdir /opt/phpenv/plugins
# cd /opt/phpenv/plugins
# git clone https://github.com/php-build/php-build.git

phpenv.shのコメントを外し、phpenvを有効化します。

# vi /etc/profile.d/phpenv.sh

編集後は次のようになります。

export PHPENV_ROOT="/opt/phpenv"
export PATH="$PATH:$PHPENV_ROOT/bin"
eval "$(phpenv init -)"

phpのコンパイル

systemdで自動起動できるように--with-fpm-systemdオプションをつけてコンパイルします。

# cd /opt/phpenv/plugins/php-build/share/php-build
# vi default_configure_options

入力内容は末尾に「--with-fpm-systemd」です。

コンパイルします。

# phpenv install 7.0.0

コンパイルはかなり時間がかかります。気長に待ちましょう。

コンパイルが終わったら有効化します。

# phpenv global 7.0.0
# php -v

PHP7が入りました!

PHP 7.0.0 (cli) (built: Dec  5 2015 11:43:11) ( NTS )
Copyright (c) 1997-2015 The PHP Group
Zend Engine v3.0.0, Copyright (c) 1998-2015 Zend Technologies
    with Zend OPcache v7.0.6-dev, Copyright (c) 1999-2015, by Zend Technologies
    with Xdebug v2.4.0RC3-dev, Copyright (c) 2002-2015, by Derick Rethans

PHP-FPMの設定

設定ファイルを用意します。

# cd /opt/phpenv/versions/7.0.0/etc
# cp php-fpm.conf.default php-fpm.conf
# cp php-fpm.d/www.conf.default php-fpm.d/www.conf
# cp php.ini php.ini.orig

それぞれのファイルのdiff結果が次のようになるように書き換えました。

# diff php-fpm.conf.default php-fpm.conf
17c17
< ;pid = run/php-fpm.pid
---
> pid = /run/php-fpm.7.0.0.pid
24c24
< ;error_log = log/php-fpm.log
---
> error_log = /var/log/php-fpm.7.0.0.log
# diff php-fpm.d/www.conf.default php-fpm.d/www.conf
23,24c23,24
< user = nobody
< group = nobody
---
> user = phpfpm
> group = phpfpm
36c36
< listen = 127.0.0.1:9000
---
> listen = /run/php-fpm/www.7.0.0.sock
49c49
< ;listen.mode = 0660
---
> listen.mode = 0666
96c96
< pm = dynamic
---
> pm = static
107c107
< pm.max_children = 5
---
> pm.max_children = 16
133c133
< ;pm.max_requests = 500
---
> pm.max_requests = 500
# diff php.ini.orig php.ini
359c359
< expose_php = On
---
> expose_php = Off
568c568
< ;error_log = php_errors.log
---
> error_log = /var/log/php_errors.7.0.0.log
913c913
< ;date.timezone =
---
> date.timezone = Asia/Tokyo
1585c1585
< ;mbstring.language = Japanese
---
> mbstring.language = Japanese
1592c1592
< ;mbstring.internal_encoding =
---
> mbstring.internal_encoding = UTF-8
1623c1623
< ;mbstring.detect_order = auto
---
> mbstring.detect_order = UTF-8,SJIS,EUC-JP,JIS,ASCII

設定に合わせてログファイル、ディレクトリを作ります。

# touch /var/log/php_errors.7.0.0.log
# chmod 666 /var/log/php_errors.7.0.0.log
# mkdir /run/php-fpm

/runディレクトリはtmpfsになっているので、サーバ再起動で/run/php-fpmは消えてしまいます。なのでサーバ再起動時に/run/php-fpmディレクトリができるように仕掛けます。

# vi /etc/tmpfiles.d/php-fpm.conf

入力内容は次のものです。

d /run/php-fpm 755 root root

systemdのPHP-FPM管理設定

PHP-FPMの起動をsystemdで管理できるように設定ファイルを用意します。

# vi  /etc/systemd/system/php-fpm-7-0-0.service

入力内容は次のものです。

[Unit]
Description=The PHP7.0.0 FastCGI Process Manager
After=syslog.target network.target

[Service]
Type=notify
PIDFile=/run/php-fpm.7.0.0.pid
EnvironmentFile=/etc/sysconfig/php-fpm
ExecStart=/opt/phpenv/versions/7.0.0/sbin/php-fpm
ExecReload=/bin/kill -USR2 $MAINPID
PrivateTmp=true

[Install]
WantedBy=multi-user.target

設定内容に合わせてファイルを作ります。

# touch /etc/sysconfig/php-fpm

起動します。

# systemctl start php-fpm-7-0-0
# ps aux | grep php

自動起動設定をします。

# systemctl enable php-fpm-7-0-0

サーバ再起動して、PHP-FPMが起動していれば作業完了です。

参考サイト

http://qiita.com/highdrac/items/e6ccb0a1c315f1689b68

http://hirobanex.net/article/2013/09/1379231000

http://d.hatena.ne.jp/hnw/20130626

http://blog.remirepo.net/post/2013/06/06/PHP-FPM-and-systemd