VPS(Linux+PLESK)環境でCakePHPの設置

紆余曲折あってVPSレンタルすることになったのですが、まあWindowsよりはLinuxだろと思いつつも初めてのことなので、クソだうんこだと罵っていたPLESKを一応追加してやることにした。
そこまでは良かったんだけど、PLESK環境下ではopen_basedirの値がドメインフォルダのhttpdocs以下に限られてしまっていて、
CakePHPのappフォルダを一つ上の階層に置いても読み込んでくれなかった。
(むしろデフォルトではパーミッションの関係でFTPユーザーはhttpdocs以外にフォルダを作ることができなかったのでsshで入ってchmodするハメになった)
コマンドに慣れろということなのは重々承知しておりますがこっちは手一杯なんだよ!!
あと「自分以外にはわからない」みたいな状況がハイパーウルトラ困る。


そんなわけで、PLESKが入ってる(何もいじらずに標準インストールされてる)環境なら、似たようなところにつまずくはずで、同じような感じで解決できるはずです。

PHPディレクティブ、open_basedir。
"PHP から開くことのできるファイルを、指定したディレクトリツリーに限定します。 "

PLESKが無ければhttpd.confをいじれば変更可能な場所ですが、PLESKの場合は
/var/www/vhosts/ドメイン/conf/httpd.include
という場所に設定が書かれているようです。
「じゃあこれを書き換えればいいんだね!キラッ☆
って普通はそうなるんですが、このファイルはPLESKが変更する可能性があるとのことで、このファイルをいじるべきじゃないようです。



PHPのopen_basedirの設定 | Yo-shiの休憩所
http://matono.jp/yo-shi/2007/04/phpopen_basedir.html
Plesk で open_basedir とか safe_mode の変更する方法 | 呑ちゃんの備忘録
http://blog.livedoor.jp/don_chan_001/archives/51286124.html


上記サイトを参考に、
/var/www/vhosts/ドメイン/conf/
に、vhost.confという名前でファイルを作成。

<Directory /var/www/vhosts/(ドメイン)/httpdocs>
    <IfModule sapi_apache2.c>
        php_admin_flag engine on
        php_admin_flag safe_mode off
        php_admin_value open_basedir "/var/www/vhosts/(ドメイン):/tmp"
    </IfModule>
    <IfModule mod_php5.c>
        php_admin_flag engine on
        php_admin_flag safe_mode off
        php_admin_value open_basedir "/var/www/vhosts/(ドメイン):/tmp"
    </IfModule>
</Directory>

で保存したら

/usr/local/psa/admin/sbin/websrvmng --reconfigure-vhost --vhost-name=(ドメイン)

を実行して、apache再起動すれば変更が反映される。

phpinfoのopen_basedirのところを見れば、変更が適用されていることがわかる。


ここまで来れば、あとはいつも通り、設置するだけ。

/var/www/vhosts/ドメイン/
に、適当にcakeとか名前をつけたフォルダを作り、その下にプロジェクトを突っ込む。(webrootを除いたappとかcakeなど。)


/var/www/vhosts/ドメイン/httpdocs
の中にapp/webrootの中身を突っ込んで、index.phpのROOT定義を書き換える。
上の例なら、

<?php
	if (!defined('ROOT')) {
		define('ROOT', dirname(dirname(__FILE__)).DS.'cake');
	}
	if (!defined('APP_DIR')) {
		define('APP_DIR', 'app');
	}
?>

のようにすれば良い。


あとはcake/app/tmp以下のパーミッションを777に変更。
tmp/logs/のerror.logとdebug.logはアップロード時のデフォルトだとダメみたいなので、666に変更で。

これで問題無く動作する。
以上。