Hatena::ブログ(Diary)

hnwの日記 このページをアンテナに追加 RSSフィード

[プロフィール]
 | 

2013年6月26日(水) php-buildで複数バージョンのPHP-FPMを用意する このエントリーを含むブックマーク このエントリーのブックマークコメント

ついにPHP 5.5.0がリリースされましたね!これに関連して、php-buildを使ってPHP 5.3/5.4/5.5の3バージョンのPHP-FPM環境を用意する方法を紹介します。


この記事は「phpenv + php-build を使って 5.3 と 5.4 を共存させつつ php-fpm を使う - 肉とご飯と甘いもの @ sotarok」のアップデートのような内容になっています。ありがとうsotarok!


PHP-FPMとは

PHP-FPMPHPSAPI実装の一つで、単体で動作するアプリケーションサーバです。Apacheなしで動くので、気軽に扱えたりします。あまりうまく説明できないので、詳しくはPHP-FPM本家サイトあたりを見てください。


phpenv+php-buildのセットアップ

僕はphp-buildをphpenvプラグインとして使っていますので、この環境を作りましょう。まずphpenvをインストールします。


curl -L https://raw.github.com/CHH/phpenv/master/bin/phpenv-install.sh | bash

上記コマンドの終了時のメッセージに従い、.bashrcまたは.zshrcの末尾に次の2行を追加してシェル再起動します。


PATH=$HOME/.phpenv/bin:$PATH # Add phpenv to PATH for scripting
eval "$(phpenv init -)"

次に、php-buildをphpenvのプラグインとしてインストールします。


mkdir $HOME/.phpenv/plugins
cd $HOME/.phpenv/plugins
git clone git://github.com/php-build/php-build.git

これでphpenvの機能が増え、「phpenv install [バージョン番号]」でPHPインストールができるようになります。


詳しくは「phpenv+php-build環境の構築と運用」を参考にしてください。


php-buildでPHP-FPMインストール

sotarok が記事を書いた頃と違い、php-buildは標準でPHP-FPMビルドするようになりました。ですので、インストールは下記のようにタイプするだけです。


$ phpenv install 5.3.26
$ phpenv install 5.4.16
$ phpenv install 5.5.0

これで「$HOME/.phpenv/versions/[バージョン番号]/sbin/」に各バージョンのphp-fpmが作られます。


PHPの設定

この環境で使われるphp.iniは「$HOME/.phpenv/versions/[バージョン番号]/etc/php.ini」になります。毎度おなじみの下記設定を全部に追記しましょう。


date.timezone =Asia/Tokyo

PHP-FPMの設定

PHP-FPMの設定は「$HOME/.phpenv/versions/[バージョン番号]/etc/php-fpm.conf」で行います。


僕は次のように設定しました。これ以外の値はデフォルトを利用しています。


listen = 127.0.0.1:53000
listen.allowed_clients = 127.0.0.1
pm = ondemand
pm.max_children = 5

ポート番号はそれぞれ5.3を53000番、5.4を54000番、5.5を55000番にしました。また、同一ホストで起動するnginxからアクセスする前提ですので、localhostからの接続のみ許可しています。


ちなみに「pm=ondemand」はPHP-FPMの面白い機能で、普段はプロセス数を絞っておいて、忙しいときだけ子プロセスを増やしてくれるものです。商用環境で有用かどうかは疑問ですが、手元で起動するときはメモリを節約したいことが多いでしょうから、便利な機能だと言えそうです。


nginxのインストール・設定

PHP-FPMFastCGIプロトコルしか受け付けてくれないので、ブラウザから利用するにはHTTPからFastCGIに変換してくれるサーバが必要です。このような場合、最近ではnginxを選ぶのが普通かと思います。


僕はHomebrewでnginxをインストールしました。


brew install nginx

Homebrewインストールすると、設定ファイルの位置は /usr/local/etc/nginx/nginx.conf になります。下記のように、今回のphp-fpm用のバーチャルサーバ設定を追加します。


    server {
        listen 8080;
        server_name ~^php(?<phpver>\d\d).localhost$;
        set $port "${phpver}000";
        root /Users/hnw/Sites;
        location ~ \.php.*$ {
            fastcgi_split_path_info ^(.+\.php)(.*)$;
            fastcgi_pass 127.0.0.1:$port;
            fastcgi_index index.php;
            fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
            fastcgi_param PATH_INFO $fastcgi_path_info;
            fastcgi_param PATH_TRANSLATED $document_root$fastcgi_path_info;
            include fastcgi_params;
            fastcgi_param SERVER_NAME $host;
        }
    }

ドキュメントルートの位置は適宜修正してください。


さらに、下記ホストが127.0.0.1を指すように/etc/hostsに登録します。



これで設定完了。nginxとPHP-FPMを手で起動すれば動作確認できます。


$HOME/.phpenv/versions/5.3.26/sbin/php-fpm --nodaemonize
$HOME/.phpenv/versions/5.4.16/sbin/php-fpm --nodaemonize
$HOME/.phpenv/versions/5.5.0/sbin/php-fpm --nodaemonize
/usr/local/opt/nginx/sbin/nginx -g "daemon off;"

毎回手動で起動するのはダルいので、次回は自動起動の設定を紹介します。

 | 
ページビュー
1816249