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で立ち上げる
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
最近のコメント