2011年2月14日月曜日

CentOSでCakePHPを動かす

色々と訳合って、CakePHPをやることになりそう。LAMP環境は整っているので、あとはCakePHPを用意しておく。
http://cakephp.jp/
CakePHPのサイトから落として解凍して、DocumentRoot直下にcakephpというディレクトリ名で移動して準備完了。

CakePHPのマニュアルの3.2.2に
CakePHP は、幾つかの操作のために/app/tmpディレクトリを使用します。モデルのdescriptionや、ビューのキャッシュ、セッション情報などです。

なので、Cakeのインストール時には、/app/tmpディレクトリに書き込み権限があることを確認してください。
との記述を見つけたので、app/tmp以下に書き込み権限を追加しておく。
で、ブラウザからcakephpにアクセスしてみると、
Forbidden
You don't have permission to access /cakephp/ on this server.
また、毎回恒例となったハマるパターン。。。なかなか上手く行かないものだと思いつつ調べる。マニュアルの3.3.4 Apacheとmod_rewriteを見ると同じく苦労してるユーザもいるみたい。いくつか確認する事項があるので見てみる。
.htaccessのオーバーライドが許可されていることを確認しましょう。場所は、httpd.confの中の、サーバのディレクトリを定義している場所です。正しいドキュメントルートのAllowOverrideがAllになっていることを確かめてください。
これはOK
mod_rewriteを正しく読み込んでいることを確認してください。LoadModule rewrite_module libexec/httpd/mod_rewrite.so(Unix/Linux ユーザは AddModule mod_rewrite.c という場合もあります) が、httpd.conf の中にあることを確認してください。また、これらの行がコメントアウトされていない(行頭に「#」が付いていない)ことも確認してください。設定を有効にするには、 Apache を再起動します。
これもコメントアウトはされていないのでOK
CakePHP をユーザディレクトリ(http://example.com/~username/cakephp/)や、すでに mod_rewrite を利用しているその他の URL 構造の中にインストールする場合は、CakePHP が使用している .htaccess ファイル(/.htaccess, /app/.htaccess, /app/webroot/.htaccess)に、 RewriteBase ステートメントを追加してください。これらの変更の詳細については、セットアップの方法に依存します。より詳しい情報は、 Apache のオンライン文書を参照してください。
他ではmode_rewrite使っていないけど、RewriteBase調べて見る。mod_rewriteを見てみたが関係なさそう。一応設定して試してはみるが、案の上状況は変わらない。

そこから調査と試行錯誤を繰り返し1,2時間は経ったのか。。分かってみればなんてことはなくSELINUXが有効だったため。以下の作業でひとまずはアクセス可となった。
# vi /etc/selinux/config
SELINUX=disabled
# reboot
あとは、問題ある部分を教えてくれるのでそれに合わせて修正する。
・config/core.phpのSecurity.saltとSecurity.cipherSeedを適切に値を変える。
・config/database.php.defaultをconfig/database.phpにファイル名を変えて、ユーザやパスワードなどを適切に設定。
・database.phpに設定したユーザでmysqlにアクセスできるようにmysqlのユーザ作成。
・PCREがUnicodeをサポートしてなかったので、リビルド。
ちょっと面倒だったのは最後のPCREのUnicodeのやつ。俺のひとり言:PCRE has not been compiled with Unicode property support.を参考にさせて頂いた。基本コマンドは同じでバージョンと64bitであることの違いのみ。
No Unicode properties supportを確認
# pcretest -C
PCRE version 6.6 06-Feb-2006
Compiled with
  UTF-8 support
  No Unicode properties support
  Newline character is LF
  Internal link size = 2
  POSIX malloc threshold = 10
  Default match limit = 10000000
  Default recursion depth limit = 10000000
  Match recursion uses stack

リビルド
# wget ftp://ftp.redhat.com/pub/redhat/linux/enterprise/5Server/en/os/SRPMS/pcre-6.6-6.el5.src.rpm
# rpm -ivh pcre-6.6-6.el5.src.rpm
# vi /usr/src/redhat/SPECS/pcre.spec
%configure --enable-utf8 --enable-unicode-properties # 追記
# rpmbuild -ba /usr/src/redhat/SPECS/pcre.spec
# rpm -Uvh /usr/src/redhat/RPMS/x86_64/pcre-6.6-6.x86_64.rpm 

Unicode properties supportになったことを確認して、apacheリスタート
# pcretest -C
PCRE version 6.6 06-Feb-2006
Compiled with
  UTF-8 support
  Unicode properties support
  Newline character is LF
  Internal link size = 2
  POSIX malloc threshold = 10
  Default match limit = 10000000
  Default recursion depth limit = 10000000
  Match recursion uses stack
# /etc/init.d/httpd restart
以上、CakePHPの環境は構築完了。