【CakePHP2.x】公開環境設定とデプロイ ~CakePHP2実践入門「14章」~
動作環境の切り替え
テストと本番環境によってDB情報などが違うことはよくある。
その時に設定情報をできるだけ簡単に切り替える方法のイロハ。
ホスト名による切り替え
$_SERVER['SERVER_NAME'] の利用
※簡単だが、コンソール、シェルを使用した場合はホスト名が設定されないので利用できない。
環境変数による切り替え
動作環境ごとに異なる環境変数を設定する。
PHPから取得するためにはenv関数を利用。
※シェル上で環境変数を設定できるため、コンソール、シェル利用の場合でも簡単に対応可能。
<Directory "/path_to_webroot"> #本番環境の設定 SetEnv WEB_APP_ENV "production" </Directory>
環境変数を利用して動作環境を切り替える
<?php $env = env('WEB_APP_ENV"); if($env === 'production'){ //本番環境設定を記載 }else if($env === 'staging'){ //ステージング環境設定を記載 }else{ //開発環境設定を記載 }
データベースの切り替え
AppModelによる切り替え
database.phpに環境ごとの設定を記載しておき、
モデル内でuseDbConfigに設定した名前を指定すると切り替え可能。
database.phpによる切り替え
基本は上記と同じくdatabase.phpに環境ごとの設定を記載しておき、
同ファイル内にて切り替えを行う。
ex.
database.php
<?php class DATABASE_CONFIG{ public $production = array( 'datasource' => 'Database/Mysql', //設定を記載、、、、 省略 public function __construct(){ $env = env('WEB_APP_ENV'); switch($env){ case 'production': $this->default = $this->production; break; default: $this->default = $this->development; break; } } }
公開環境構築時の注意点
デバッグレベル設定
core.php 35行目
if( env('WEB_APP_ENV') === 'production'){
Configure::write('debug',0);
}else{
Configure::write('debug',2);
}
test.php無効化
ブラウザからユニットテスト実行できる便利機能だが、本番デプロイ時は除外するか、
Apache設定でtest.phpへのアクセス制限する
order deny,allow
deny from all
allow from 許可するIPアドレス
デバッグレベル一覧
0 公開用のためメッセージ非表示
1 エラー、ワーニングメッセージ表示
2 1に加えて、デバッグメッセージと実行されたSQLクエリが出力
アプリケーションログの運用
エラーやデバッグなどログはストレージ容量を圧迫する。
32bit Linuxは2GB制限のため動作にも影響する。
ライブラリやプラグイン利用してsyslog経由で出力したり、
独自ローテートするなどが必要。
バージョンアップ時のキャッシュ削除
CakePHPは性能向上のためにキャッシュを行なっている。
デバッグレベル0の場合、通常キャッシュ有効期限は999日になっている。(core.php 248行目に記載)
APCが有効な場合、データ領域にキャッシュ保存するため注意。
キャッシュはApache再起動で初期化されるが、通常しないので、独自にキャッシュクリアする必要があり、
APC関数を呼び出す。
<?php apc_clear_cache('user');
※APCとは
http://php.net/manual/ja/book.apc.php
PHP の実行コードをキャッシュする仕組みで、 フリーかつオープンに使用できます。PHP の中間コードのキャッシュ・最適化を行うための、 フリーでオープンかつ堅牢なフレームワークを提供するということを目標としています。