チェ・ゲバムラの日記

脱犬の道を目指す男のブログ

【CakePHP2.x】公開環境設定とデプロイ ~CakePHP2実践入門「14章」~

動作環境の切り替え

テストと本番環境によってDB情報などが違うことはよくある。
その時に設定情報をできるだけ簡単に切り替える方法のイロハ。

ホスト名による切り替え

$_SERVER['SERVER_NAME'] の利用
※簡単だが、コンソール、シェルを使用した場合はホスト名が設定されないので利用できない。

環境変数による切り替え

動作環境ごとに異なる環境変数を設定する。
PHPから取得するためにはenv関数を利用。

※シェル上で環境変数を設定できるため、コンソール、シェル利用の場合でも簡単に対応可能。

Apache環境変数を設定

<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経由で出力したり、
独自ローテートするなどが必要。

参考
log4php
PHP用ロギング処理フレームワーク

Yalog
CakePHP用ログ出力処理プラグイン

バージョンアップ時のキャッシュ削除

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 の中間コードのキャッシュ・最適化を行うための、 フリーでオープンかつ堅牢なフレームワークを提供するということを目標としています。

faviconカスタマイズ

/app/webroot/ 直下にfavicon.icoという名前で配置。


デプロイ

サーバでアプリケーションを利用可能な状態に配置すること。
なるべく自動化することが望ましい。

シェル+rsyncを使用したデプロイ

シェルを書いて実行する。

Capistranoを使用したデプロイ

Rubyで作成されたデプロイツール。
実行したマシンから複数サーバに対してSSH利用してコマンド実行が可能。
Git連携も可能。
RubyRubyGemsがインストールされていることが必要。