Debian に PHP5.3 をインストール

iptables の設定も終わったので、次は予定通り PHP のインストールをしようと思う。
PHP も頻繁にアップデートがあるのでソースから入れようかと思っていたのだが、丁度似たような時期に似たようなことをしている人がいて、明らかに自分より詳しそうな人なのでホイホイ参考にさせてもらいながら php5-fpm を入れてみようと思う。

php5-fpm 自体は Dotdeb のリポジトリにあるらしいので、一つ前の記事も参考にさせてもらいながら /etc/apt/sources.list にリポジトリを追加などを行う(Dotdebのインストラクションはこちら)。

ただし、hkp鍵サーバとの通信のために tcp の 11371番ポートで外部へアクセスできないといけないので、iptables の設定を弄る必要があった(※前回の記事を既に編集済み)。
su
echo "deb http://php53.dotdeb.org stable all" >> /etc/apt/sources.list
echo "deb-src http://php53.dotdeb.org stable all" >> /etc/apt/sources.list
gpg --keyserver keys.gnupg.net --recv-key 89DF5277
gpg -a --export 89DF5277 | apt-key add -
apt-get update
apt-get install php5-fpm
invoke-rc.d php5-fpm start
あっさりと立ち上がるところまできてしまった。
あとは書いてあるように nginx.conf を編集すれば使えそうだ。
vim /usr/local/nginx/nginx.conf
        location ~ \.php$ {
            root           html;
            fastcgi_pass   127.0.0.1:9000;
            fastcgi_index  index.php;
            fastcgi_param  SCRIPT_FILENAME  /usr/local/nginx/html$fastcgi_script_name;
            include        fastcgi_params;
        }
コメントアウトを外して fastcgi_param をフルパスに変更しただけ。あとは nginx をリロードしたら準備完了。
テスト用の php スクリプトを書いて、wget で取りにいって動作テストをしてみる。
invoke-rc.d nginx reload
echo "<?php phpinfo();" >> /usr/local/nginx/html/_test.php
wget -O - http://localhost/_test.php
でかいテキストが返ってくれば成功。
phpinfo() の出力結果を晒しっぱなしにするのは危険なので速やかに削除する。
rm /usr/local/nginx/html/_test.php
ちなみにこれは少し後になってから気付いたことだけど、初期状態では date.timezone や mbstring.language、mbstring.internal_encoding が特に設定されておらず、実際にスクリプトを書き始めるタイミングで warning などに遭遇する。その辺の設定に関する話はこの辺に少し書いた。

これで PHP が使えるようになったので、DB を使っていないうちの Web サイトぐらいなら大体は動くようになった(メールフォームの類はメール周りの整備をしていないので使えないが、その辺は GMail の SMTP サーバへ PHP から接続に行くようにして自分のサーバではメールサーバを立てない方向で進めたいと思っている)。

ただ、ここにきて nginx のインストールには問題があり、nginx を実行しているユーザが nobody になっていることがわかった。php5-fpm を実行しているユーザは www-data になっていて、明らかにこのユーザが web サーバ用っぽいので次回はまた こちらを参考にさせてもらいながら nginx を入れなおして、以前書いた記事を修正しようと思う。
(今は取りあえず nginx.conf の上の方にある user no-body を user www-data に書き換えて invoke-rc.d nginx restart させたので問題ないはずだが、変更忘れを防ぐためにもインストール時に指定してしまうべきだと思う)