CentOS6でCakePHP2アプリを動かしてみましょう。動かすにはPHP, MySQLが必要です。用意していない場合は、「CentOS6へPHP, WordPressをインストール | hiro345を参考に、WordPressを動かすものと同じパッケージを用意しておけばいいでしょう。
「CakePHP: the rapid development php framework. Pages」から 2.4.1 Stable (cakephp-cakephp-2.4.1-0-g085636e.zip) をダウンロードし、/var/www/cakephp2_apps/cakephp-2.4.1/user_app へ展開します。下記のような user_app_install.sh を作りましょう。試用や開発向けの環境構築のためのスクリプトになっています。
#!/bin/sh
BASE_DIR=/var/www/cakephp2_apps/cakephp-2.4.1_apps
CAKEPHP_ARC=cakephp-cakephp-2.4.1-0-g085636e
CAKEPHP_ORG=cakephp-cakephp-899152f
APP=${BASE_DIR}/user_app
mkdir -p ${BASE_DIR}
unzip ${CAKEPHP_ARC}.zip -d ${BASE_DIR}/
mv ${BASE_DIR}/${CAKEPHP_ORG} ${APP}
for f in ${APP}/.htaccess ${APP}/app/.htaccess ${APP}/app/webroot/.htaccess
do
echo "${f} replace"
sed -i 's%RewriteEngine on%RewriteEngine On%' ${f}
sed -i 's%RewriteEngine On%RewriteEngine On\n\tRewriteBase /cakephp2_apps/user_app%' ${f}
done
chmod -R a+w ${APP}
chcon -R unconfined_u:object_r:httpd_sys_content_t:s0 ${APP}
salt=`php -r '$num = "";for($i=0;$i<10;++$i){$num .= rand(100,999);} echo sha1($num);'`
cipherSeed=`php -r '$num = "";for($i=0;$i<10;++$i){$num .= rand(100,999);} echo $num;'`
echo "Configure::write('Security.salt', '${salt}');" >> ${APP}/app/Config/bootstrap.php
echo "Configure::write('Security.cipherSeed', '${cipherSeed}');" >> ${APP}/app/Config/bootstrap.php
CakePHP2の設定ファイルも変更しています。ディレクトリは誰でも書き込み可能としているので、共用サーバなどへインストールしている場合は変更してください。
次に、/cakephp2_apps/user_app のAliasを指定します。ここでは、/etc/httpd/conf.d/cakephp.conf を作成しています。/etc/httpd/httpd.confに記載するといった方法でも構いません。
Alias /cakephp2_apps/user_app /var/www/cakephp2_apps/cakephp-2.4.1_apps/user_app/app/webroot
<Directory /var/www/cakephp2_apps/cakephp-2.4.1_apps/user_app/app/webroot>
AllowOverride All
</Directory>
<Location /cakephp2_apps/user_app>
Options Indexes FollowSymLinks
Order allow,deny
Allow from all
</Location>
app/webrootを指定している点に注意してください。このように指定するとPHPプログラムのディレクトリが公開されないので安心です。開発環境の場合はPHPプログラムのディレクトリについてそういった心配はしなくてもいいので、「/var/www/cakephp2_apps/cakephp-2.4.1_apps/user_app/app/webroot」ではなく「/var/www/cakephp2_apps/cakephp-2.4.1_apps/user_app」を指定してもいいかもしれません。
用意ができたら、user_app_install.shをsudo権限で実行し、httpdサーバを再起動します。
$ sudo sh user_app_install.sh $ sudo service httpd restart
スクリプトでエラーが出る場合は修正します。
問題なければ、Webブラウザで、http://localhost/cakephp2_apps/user_app/ へアクセスしてみましょう。CakePHPのホーム画面が表示されるはずです。いくつか警告がでていますが、DBを使わないなら無視をしても良いはずです。
今回はDBにユーザ情報を保存するアプリを用意して対応することにします。次のようなsetup_user_app.shスクリプトを用意しましょう。MySQLのrootアカウントにパスワードを指定していないなら、「-p」オプションは消してください。また、user_appという名前のデータベースを削除してから追加するようにしています。すでにuser_appという名前のデータベースを用意している場合は、そのあたりは修正をして使ってください。
#!/bin/sh
BASE_DIR=/var/www/cakephp2_apps/cakephp-2.4.1_apps
CAKEPHP_ARC=cakephp-cakephp-2.4.1-0-g085636e
CAKEPHP_ORG=cakephp-cakephp-899152f
APP=${BASE_DIR}/user_app
mysql -u root -p << EOF
DROP DATABASE IF EXISTS user_app;
CREATE DATABASE IF NOT EXISTS user_app DEFAULT CHARACTER SET utf8;
GRANT ALL PRIVILEGES ON user_app.* TO user_app@localhost IDENTIFIED BY 'user_app_pass';
use user_app;
CREATE TABLE IF NOT EXISTS users (
id int(11) NOT NULL AUTO_INCREMENT,
username tinytext COLLATE utf8_unicode_ci NOT NULL,
password tinytext COLLATE utf8_unicode_ci NOT NULL,
PRIMARY KEY (id)
) ENGINE=InnoDB DEFAULT CHARSET=utf8 COLLATE=utf8_unicode_ci;
EOF
cat ${APP}/app/Config/database.php.default \
| sed -e "s%'login' => 'user'%'login' => 'user_app'%" - \
| sed -e "s%'password' => 'password'%'password' => 'user_app_pass'%" - \
| sed -e "s%'database' => 'database_name'%'database' => 'user_app'%" - \
| sed -e "s%//'encoding'%'encoding'%" - \
> ${APP}/app/Config/database.php
cd ${APP}/app
./Console/cake bake all User
CakePHP2ではDBのテーブルがあれば、そこからCRUDのWebアプリを簡単に生成してくれますから、そこまで一気に処理するスクリプトになっています。
用意ができたらsetup_user_app.shを実行します。こちらはsudo権限は必要ありません。ただし、user_appのディレクトリに書き込み権限が必要です。インストール時に誰でも書き込めるようにしましたが、その処置をしていない場合は、書き込みができるユーザで実行してください。実行したら、httpdも再起動しておきます。
$ sh setup_user_app.sh $ sudo service httpd restart
これで、http://localhost/cakephp2_apps/user_app/users/ へアクセスすると、ユーザ情報の一覧を表示する画面になります。
スクリプトが用意できれば10分も必要ないでしょう。
PHP, CakePHPについては下記が参考になるでしょう。
- パーフェクトPHP
- Webサイト制作者のための PHP入門講座
- PHP 逆引きレシピ
- PHPによるWordPressカスタマイズブック―3.x対応
- CakePHP2 実践入門 (WEB+DB PRESS plus)
- 詳解CakePHP辞典―2.0/2.1/2.2/2.3対応