デプロイ

アプリケーションが一度完成したら、または、完成する前でさえも、デプロイしたいと 思うでしょう。CakePHP アプリケーションをデプロイするにあたり、いくつかのことを しなければなりません。

ファイルの移動

git commit とあなたのサーバ上で commit やリポジトリの pull や clone を作成し、 composer install を実行することを奨励されます。git に関する幾つかの知識や gitcomposer のインストールの知識が必要とされますが、このプロセスは、 ライブラリの依存関係やファイルやフォルダのパーミッションについて扱います。

FTP 経由でデプロイするとき、少なくともファイルやフォルダのパーミッションを 修正しなければならないことを理解してください。

ステージングやデモサーバ (試作品) をセットアップし、あなたの開発環境と同期を保つための デプロイ技術を使用することもできます。

config/app.php の調整

app.php、特に debug の値を調整することは非常に重要なことです。debug を false に変更することにより、開発に関連する部分で、決して広くインターネットに 晒されるべきでない部分を無効にすることができます。debug を無効とすることにより、 以下の種類のことが変更されます。

  • pr() 、 debug() 及び dd() により 生成されたデバッグメッセージが、無効化されます。
  • CakePHP コアのキャッシュが、開発時の 10 秒ごとの代わりに毎年 (約365日ごとに) 破棄されるようになります。
  • エラービューの情報量は少なくなり、一般的なエラーメッセージしか表示されなくなります。
  • PHP エラーは表示されなくなります。
  • 例外のスタックトレースは無効化されます。

上記に加え、多くのプラグインとアプリケーションの拡張機能は、自らの振る舞いを 修正するために、 debug を使用します。

環境間でデバッグレベルを動的にセットするため、環境変数に対してチェックを かけることができます。このことにより、アプリケーションをデバッグ true の状態で デプロイすることを避けることができるだけでなく、毎回本番環境にデプロイする度に デバッグレベルを変更せずに済むこととなります。

例えば、Apache の設定にて、環境変数をセットすることができます。

SetEnv CAKEPHP_DEBUG 1

それから、app.php にてデバッグレベルを動的にセットすることができます。

$debug = (bool)getenv('CAKEPHP_DEBUG');

return [
    'debug' => $debug,
    .....
];

セキュリティのチェック

もしあなたがウェブ上の荒野にアプリケーションを解き放とうとするなら、 何か抜け穴がないかを確認しておくことをお勧めします。

  • クロスサイトリクエストフォージェリ コンポーネントを使用していることを確認して 下さい。
  • セキュリティ コンポーネントを有効化しておいた方が いいかもしれません。フォームの改ざんや一括代入 (mass-assignment) 脆弱性に関する 問題の発生可能性を削減することができます。
  • 各モデルにおいて、正しい バリデーション ルールが 有効化されているかどうかを確認して下さい。
  • webroot ディレクトリのみが公開されており、その他の秘密の部分(ソルト値や セキュリティキー等)は非公開でかつユニークな状態となっていることを確認して下さい。

ドキュメントルートの指定

アプリケーションでドキュメントルートを正しく指定することはコードをセキュアに、 またアプリケーションを安全に保つために重要なステップの内の一つです。 CakePHP のアプリケーションは、アプリケーションの webroot に ドキュメントルートを指定する必要があります。これによってアプリケーション、 設定のファイルが URL を通してアクセスすることができなくなります。 ドキュメントルートの指定の仕方はウェブサーバごとに異なります。 ウェブサーバ特有の情報については URL Rewriting ドキュメントを見てください。

どの場合においても webroot/ をバーチャルホスト(バーチャルドメイン)の ドキュメントルートに設定すべきでしょう。これは webroot ディレクトリの外側のファイルを 実行される可能性を取り除きます。

更新のデプロイ

更新をデプロイした後、 ORM キャッシュシェル シェルの一部、 bin/cake orm_cache clear を実行したい場合もあるかもしれません。