virtualbox(centos)でphp-buildでコンパイルしたphp-fpmをnginxで使う為の設定メモ(v
環境 centos6.3(ゲストOS)macosx10.8(ホストOS)
nginxを以前入れたのだが肝心のphpの設定をまだ指定なかったので設定のメモ。
ついでに普段複数のサイトを開発する場合に必要なvirtualhostの設定まで
注意事項
- nginxがインストール済みの状態であること。インストールをしていない場合はvirtualbox(centos)でnginxインストールメモを参照してください。
- php-build+phpenvでPHPをインストール済みであること。インストールしていない場合はvirtualbox(centos)でphpenv+php-buildインストールメモ(5.3,5.4変更確認まで)を参照してください。
- ここから先は全てroo(権限)ユーザーで実行しています
- 開発環境構築の話です。本番環境などはもっと詳しいブログをみつけてください。
参考にしたサイト
- nginx+php-fpmでPHPを動かす。その3
- [CentOS NginxとPHPの連携)](http://www.happytrap.jp/blogs/2012/02/25/8299/](http://d.hatena.ne.jp/yoshi-ken/20120205)
- nginxバーチャルホスト設定(http、server、locationブロック)
- CentOS NginxとPHPの連携
ゲストOS(centos)側のIPの確認
今回はvirtualhostを設定するのでゲストOS側のIPを調べる
$ifconfig
#下記の項目(inet)がどこかにあるのでメモしておく(デフォルトだと192.168.xx.xxx)なはず
inet addr:192.168.56.101
ホストOS側(MAC)の設定
virtualhostの追加
hostsにnginx側のバーチャルホストの設定を追加しましょう
sudo vim /etc/hosts
#追加(ifconfigのinetの値)
192.168.56.101 lo.test.org
192.168.56.101 lo.sample.org
※windows8のhostsファイルの設定などはhostsファイルを編集を参考にしてください。
PATHが通っているか確認する
virtualbox(centos)でnginxインストールメモからの設定だとphp-fpmにPATHが通っていないので確認しましょう
#修正前
export PATH="/root/.phpenv/bin:$PATH"
#修正後
export PATH="/root/.phpenv/bin:/root/.phpenv/versions/5.4.11/sbin:$PATH"
nginxの設定
nginxにPHPの設定を追加しましょう
vim /etc/nginx/conf.d/default.conf
server {
listen 80;
server_name lo.test.org;
location ~ \.php$ {
fastcgi_pass 127.0.0.1:9000;
fastcgi_index index.php;
fastcgi_param SCRIPT_FILENAME /home/web/lo.test.org/www$fastcgi_script_name;
include fastcgi_params;
}
}
server {
listen 80;
server_name lo.sample.org;
root /home/web/lo.sample.org/www;
index index.php index.html index.htm;
location ~ \.php$ {
fastcgi_pass 127.0.0.1:9000;
fastcgi_index index.php;
fastcgi_param SCRIPT_FILENAME /home/web/lo.sample.org/www$fastcgi_script_name;
include fastcgi_params;
}
}
serverディレクティブにそれぞれ server_nameを追加してserverディレクティブのlocationの項目にroot(apacheで言うドキュメントルート)を追加する。
fastcgi_paramにはドキュメントルート+$fastcgi_script_nameを追加する
今回の場合はlo.test.orgとlo.sample.orgというバーチャルホストを切っている
nginxの起動
apacheと一緒
/etc/init.d/nginx restart
httpd を停止中: [ OK ]
nginx を起動中: [ OK ]
php-fpmの確認
バージョン確認
php-fpm -v
PHP 5.4.12 (fpm-fcgi) (built: Feb 20 2013 14:06:12)
Copyright (c) 1997-2013 The PHP Group
Zend Engine v2.4.0, Copyright (c) 1998-2013 Zend Technologies
動いている
php-fpm.confの確認
以前の記事virtualbox(centos)でphpenv+php-buildインストールメモ(5.3,5.4変更確認まで)でやった場合、/root/.phpenv/versions/5.4.11/etc/php-fpm.conf.defaultというのがあるのでそれをコピーしてphp-fpmの設定ファイルを作成する
cp /root/.phpenv/versions/5.4.11/etc/php-fpm.conf.default /root/.phpenv/versions/5.4.11/etc/php-fpm.conf
設定を編集する
デフォルトのままで動かいたい場合はpidの項目だけ編集すればとりあえず動きます。
(というか自分はどれが何のことだがよくわからなかった。。。。)
vim /root/.phpenv/versions/5.4.11/etc/php-fpm.conf
#修正前
;pid = run/php-fpm.pid
#修正後
pid = run/php-fpm.pid
#コメントアウト外す
PHPのtimezoneの設定について
自分の環境だとphp-fpmで起動した場合にphp.iniのtimezoneを設定したのにかかわらずエラーになっていました。
そこでphp-fpmの設定ファイル郡/root/.phpenv/versions/5.4.11/etc/conf.d/にdate.iniというのを作って対応しました。
vim /root/.phpenv/versions/5.4.11/etc/conf.d/date.ini
[Date]
date.timezone = Asia/Tokyo
これでtimezoneのエラーが消えました。
phpinfo()とかでtimezoneのエラーになっている場合は試してみてください。
php-fpmの起動
ちなみにこういうエラーが出た場合は一旦php-fpmのプロセスを切りましょう。
php-fpm
[25-Feb-2013 11:12:41] ERROR: unable to bind listening socket for address '127.0.0.1:9000': Address already in use (98)
[25-Feb-2013 11:12:41] ERROR: FPM initialization failed
php-fpmのプロセスが既に起動していて起動できないよ!!ってエラーです。(他に9000番のポートを使った場合は別ですが)
ps aux | grep php
root 4485 0.0 0.6 291632 6584 ? Ss 13:48 0:01 php-fpm: master process (/root/.phpenv/versions/5.4.11/etc/php-fpm.conf)
nobody 4486 0.0 0.9 291796 9288 ? S 13:48 0:00 php-fpm: pool www
nobody 4487 0.0 0.9 291792 9312 ? S 13:48 0:00 php-fpm: pool www
root 4815 0.0 0.0 107460 916 pts/1 S+ 18:37 0:00 grep php
#masterプロセスを一旦落とす
kill 4485
起動
php-fpm
#何も出てこないがエラーが無ければ起動している
ps aux | grep php
root 4817 0.0 0.6 291636 6584 ? Ss 18:39 0:00 php-fpm: master process (/root/.phpenv/versions/5.4.11/etc/php-fpm.conf)
nobody 4818 0.0 0.9 291792 9280 ? S 18:39 0:00 php-fpm: pool www
nobody 4819 0.0 0.7 291636 7184 ? S 18:39 0:00 php-fpm: pool www
root 4823 0.0 0.0 107460 920 pts/1 S+ 18:40 0:00 grep php
起動スクリプトの作成
面倒なんで起動した状態でphp-fpmが起動している状態にしちゃいましょう。
下記のサイトを参照して作成しました。
CentOS NginxとPHPの連携
#! /bin/sh
#
# php-fpm - this script starts and stops the php-fpm daemon
#
# chkconfig: - 85 15
# description: PHP-FPM (FastCGI Process Manager) is an alternative PHP FastCGI implementation
# with some additional features useful for sites of any size, especially busier sites.
# processname: php-fpm
PROG="/root/.phpenv/versions/5.4.11/sbin/php-fpm"
CONF="/root/.phpenv/versions/5.4.11/etc/php-fpm.conf"
LOCKFILE="/var/log/php-fpm/lock"
[ -f $CONF ] || exit 1
# Source function library.
. /etc/init.d/functions
RETVAL=0
start() {
echo -n $"Starting $PROG:"
daemon $PROG -c $CONF
RETVAL=$?
echo
[ $RETVAL = 0 ] && touch $LOCKFILE
return $RETVAL
}
stop() {
echo -n $"Stopping $PROG:"
killproc $PROG
RETVAL=$?
echo
[ $RETVAL = 0 ] && rm -f $LOCKFILE
return $RETVAL
}
case "$1" in
start)
start
;;
stop)
stop
;;
restart)
stop
start
;;
condrestart)
if [ -f $LOCKFILE ]; then
stop
start
fi
;;
reload)
action $"Reloading $PROG:" killall -HUP $PROG
;;
*)
echo $"Usage: $0 {start|stop|restart|reload|condrestart|status}"
exit 1
esac
exit $RETVAL
PROG="/root/.phpenv/versions/5.4.11/sbin/php-fpm"
CONF="/root/.phpenv/versions/5.4.11/etc/php-fpm.conf"
LOCKFILE="/var/log/php-fpm/lock"
上記の項目はそれぞれ各自の環境で変更してください。
自分はphpenvでいれたので上記になります。
phpenvについてはvirtualbox(centos)でphpenv+php-buildインストールメモ(5.3,5.4変更確認まで)を参照してください。
起動スクリプトのパーミッションを変更
755で
chmod 755 /etc/init.d/php-fpm
起動スクリプトの動作確認
起動する場合
/etc/init.d/php-fpm start
/root/.phpenv/versions/5.4.11/sbin/php-fpm を起動中: [ OK ]
停止する場合
/etc/init.d/php-fpm stop
/root/.phpenv/versions/5.4.11/sbin/php-fpm を停止中: [ OK ]
自動起動を追加
これもいつもどおり
chkconfig --add php-fpm
chkconfig php-fpm on
これでいちいちプロセス探してkillとかしてなくて良くなりました。
動作確認用のphpファイルを設置
いつもどおりで
<?php
phpinfo();
上記の設定の場合は
/home/web/lo.sample.org/www/phpinfo.php
/home/web/lo.test.org/www/phpinfo.php
の2つに設定してください。
動作確認
上記の設定の場合は
でphpinfoの中身が見えればOK!!ちょっとはじめどこにphp-fpmがあるかわからず混乱しましたが落ち着いて考えれば以外とすんなり出来ました。
これでphp-fpm+phpenvのタッグが組めると思います。
Discussion