php-buildでphp-fpmを試してみた

phpenv + php-build を使って 5.3 と 5.4 を共存させつつ php-fpm を使うを参考に、php-buildでphp-fpmを生成するようにして試してみた。

$ cd .php-build/share/php-build/definitions/
$ cp 5.4.4 5.4.4-fpm
$ vi 5.4.4-fpm

中身はこんな感じで。configure_optionは--enable-fpm以外は適宜追加。

configure_option  "--enable-fpm"
install_package "http://www.php.net/distributions/php-5.4.4.tar.bz2"
install_pyrus
install_xdebug "2.2.0"

この設定を使ってbuild。

$ cd
$ php-build 5.4.4-fpm ~/.phpenv/versions/5.4.4-fpm

次に、php-fpmの設定ファイルを作成。php-fpm.conf.defaultを元に作成する。

$ cd .phpenv/versions/5.4.4-fpm/etc
$ cp php-fpm.conf.default php-fpm.conf
# ポート番号など設定を変更するなら修正
$ vi php-fpm.conf

設定ができたら、php-fpmを起動してみる。

$ cd
$ .phpenv/versions/5.4.4-fpm/sbin/php-fpm
[01-Jul-2012 00:28:32] WARNING: [pool www] 'user' directive is ignored when FPM is not running as root
[01-Jul-2012 00:28:32] WARNING: [pool www] 'group' directive is ignored when FPM is not running as root
[01-Jul-2012 00:28:32] NOTICE: fpm is running, pid 27385
[01-Jul-2012 00:28:32] NOTICE: ready to handle connections

なんか警告が出るけど気にしない。次に、nginxに設定を追加して再起動。

$ cd /etc/nginx/sites-available/
$ sudo vi phpsrv
$ cd ../sites-enabled/
$ sudo ln -s ../sites-available/phpsrv phpsrv
$ sudo /etc/init.d/nginx restart

ファイルの中身はこんな感じ。php-fpmのポートを9001に設定したので9001で。

upstream php54 {
    server 127.0.0.1:9001;
}

server {
  listen 80;
  server_name phpsrv;
  index index.php;
  root /home/masaki/projects/phpsrv;

  location / {
    if (!-e $request_filename) {
      rewrite ^(.*)$ /index.php$1 last;
    }
  }

  location ~ \.php.*$ {
    fastcgi_split_path_info ^(.+\.php)(.*)$;
    fastcgi_pass php54;
    fastcgi_index index.php;
    include /etc/nginx/fastcgi_params;
    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;
  }
}

これでrootに指定した場所に試しにindex.phpを設置してみると、無事動いた。apacheモジュールとして動作させる時と違って、これなら複数バージョンの共存なんかも無理なく出来そうで、素晴らしい。