今回はCentOS7にphp7をインストールします。
php-fpm使うのは初めてなので、気をつけて入れていきます。
目次
なぜphp-fpmを使うのか
今回apacheのmpmをeventでインストールしています。
普段はpreforkで使っているので、mod_phpを使えば良いのですが、mod_phpはスレッドセーフでは無い為、eventでは利用できません。
(スレッドセーフなんて言ってますがよく分かっていません。とりあえずeventの方がメモリ節約出来るって聞いたので導入してみたいだけです)
詳しいことは以下の記事を日本語翻訳して読むと分かるかもしれません。
http://z-issue.com/wp/apache-2-4-the-event-mpm-php-via-mod_proxy_fcgi-and-php-fpm-with-vhosts/
物は試しです。なんでもやってみて、駄目だったら違う方法を模索します。
phpのインストール
とりあえず最新版をダウンロードして解凍します。
# wget http://jp2.php.net/get/php-7.1.11.tar.gz/from/this/mirror # tar xvfz mirror # cd php-7.1.11/
mysqlをソースインストールしたのでオプションで明示的に指定します。後はphp-fpmを有効にするオプションを設定します。
# ./configure --prefix=/usr/local/php-7.1.11 --with-pdo-mysql=/usr/local/mysql --with-mysqli=/usr/local/mysql/bin/mysql_config --enable-mbstring --enable-fpm configure: error: xml2-config not found. Please check your libxml2 installation.
パッケージを入れます。
# yum install libxml2-devel # ./configure --prefix=/usr/local/php-7.1.11 --with-pdo-mysql=/usr/local/mysql --with-mysqli=/usr/local/mysql/bin/mysql_config --enable-mbstring --enable-fpm --with-gd --enable-gd-native-ttf --enable-gd-jis-conv --enable-intl --with-openssl --with-zlib Thank you for using PHP. config.status: creating php7.spec config.status: creating main/build-defs.h config.status: creating scripts/phpize config.status: creating scripts/man1/phpize.1 config.status: creating scripts/php-config config.status: creating scripts/man1/php-config.1 config.status: creating sapi/cli/php.1 config.status: creating sapi/fpm/php-fpm.conf config.status: creating sapi/fpm/www.conf config.status: creating sapi/fpm/init.d.php-fpm config.status: creating sapi/fpm/php-fpm.service config.status: creating sapi/fpm/php-fpm.8 config.status: creating sapi/fpm/status.html config.status: creating sapi/cgi/php-cgi.1 config.status: creating ext/phar/phar.1 config.status: creating ext/phar/phar.phar.1 config.status: creating main/php_config.h config.status: executing default commands # make # make install # ln -s /usr/local/php-7.1.11 php
なんかあんま苦労せずに入りました。
phpの設定
まずはphp.iniを用意して編集します。変更点はdiffを参照下さい。
# cp -p /usr/local/src/php-7.1.11/php.ini-production /usr/local/php/lib/php.ini # diff -u /usr/local/src/php-7.1.11/php.ini-production /usr/local/php/lib/php.ini --- /usr/local/src/php-7.1.11/php.ini-production 2017-10-25 16:04:42.000000000 +0900 +++ /usr/local/php/lib/php.ini 2017-11-18 21:37:23.064866164 +0900 @@ -371,7 +371,7 @@ ; threat in any way, but it makes it possible to determine whether you use PHP ; on your server or not. ; http://php.net/expose-php -expose_php = On +expose_php = Off ;;;;;;;;;;;;;;;;;;; ; Resource Limits ; @@ -936,7 +936,7 @@ [Date] ; Defines the default timezone used by the date functions ; http://php.net/date.timezone -;date.timezone = +date.timezone = Asia/Tokyo ; http://php.net/date.default-latitude ;date.default_latitude = 31.7667
php-fpm用のconfigファイルが作成されているので、こちらも編集します。
# cd /usr/local/php/ # cp -p etc/php-fpm.d/www.conf.default etc/php-fpm.d/www.conf # diff -u etc/php-fpm.d/www.conf.default etc/php-fpm.d/www.conf --- etc/php-fpm.d/www.conf.default 2017-11-18 21:20:30.526581685 +0900 +++ etc/php-fpm.d/www.conf 2017-11-18 21:57:53.275716288 +0900 @@ -20,8 +20,8 @@ ; Unix user/group of processes ; Note: The user is mandatory. If the group is not set, the default user's group ; will be used. -user = nobody -group = nobody +user = apache +group = apache ; The address on which to accept FastCGI requests. ; Valid syntaxes are: # cp -p etc/php-fpm.conf.default etc/php-fpm.conf # diff -u etc/php-fpm.conf.default etc/php-fpm.conf --- etc/php-fpm.conf.default 2017-11-18 21:20:30.476580426 +0900 +++ etc/php-fpm.conf 2017-11-18 21:57:14.667750225 +0900 @@ -14,7 +14,7 @@ ; Pid file ; Note: the default prefix is /usr/local/php-7.1.11/var ; Default Value: none -;pid = run/php-fpm.pid +pid = run/php-fpm.pid ; Error log file ; If it's set to "syslog", log is sent to syslogd instead of being written @@ -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
php-fpmの場合、apacheとは別にphp-fpmを起動する必要があります。
# vim /etc/systemd/system/php-fpm.service [Unit] Description=The PHP 7 FastCGI Process Manager After=network.target [Service] Type=simple PIDFile=/usr/local/php/var/run/php-fpm.pid ExecStart=/usr/local/php/sbin/php-fpm --nodaemonize --fpm-config /usr/local/php/etc/php-fpm.conf ExecReload=/bin/kill -USR2 $MAINPID [Install] WantedBy=multi-user.target
これでphp-fpmが起動すればオッケーです。
# systemctl start php-fpm.service # ps aux |grep php root 7882 0.0 0.7 161596 7428 ? Ss 11月18 0:01 php-fpm: master process (/usr/local/php/etc/php-fpm.conf) apache 7883 0.0 0.5 163744 6080 ? S 11月18 0:00 php-fpm: pool www apache 7884 0.0 0.5 163744 6080 ? S 11月18 0:00 php-fpm: pool www
apacheの設定
このままだとphp-fpmとapacheが別々に起動しているだけなので、phpの処理をphp-fpmに投げるようにapache側の設定を変更します。
# cd /usr/local/apache2/conf/ # vim httpd.conf LoadModule proxy_fcgi_module modules/mod_proxy_fcgi.so ←コメントアウト外します # vim extra/httpd-vhosts.conf <FilesMatch \.php$> SetHandler "proxy:fcgi://127.0.0.1:9000/" </FilesMatch> # systemd restart httpd
apacheを再起動した後に、phpinfo辺りが表示されるようになれば設定完了だと思います。