Skip to content
このドキュメントは、CakePHP 2.x の PHP 8 対応フォーク pieceofcake2/cakephp のものです。 フォークについて

デプロイ ​

アプリケーションが完成したら、またはその前に、それをデプロイしたいと思うことでしょう。 CakePHP アプリケーションをデプロイする際には、いくつかやっておかなければならないことがあります。

セキュリティの確認 ​

もしあなたが荒野にアプリケーションを解き放とうとするなら、何か抜け穴がないかを確認しておくことを お勧めします。 CSRF 攻撃や、フォームの改ざんなどを防ぐために セキュリティ をチェックしてください。 データバリデーション を行うこと、そして データのサニタイズ は、 XSS 攻撃からデータベースを保護する素晴らしいアイデアです。 webroot ディレクトリだけが 公開され、あなたの秘密 (アプリケーションの salt とセキュリティキーなど) は プライベートでユニークなことを確認してください!

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

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

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

本番用の依存パッケージのインストール ​

Bake や DebugKit、PHPUnit などの開発用の依存パッケージを除き、最適化したオートローダーで Composer のパッケージをインストールします。

bash
composer install --no-dev --optimize-autoloader

config/bootstrap.php で開発用のプラグインを読み込んでいる場合は、インストールされているときだけ読み込むようにします。

php
// config/bootstrap.php
if (is_dir(ROOT . DS . 'plugins' . DS . 'DebugKit')) {
    CakePlugin::load('DebugKit');
}

core.php の更新 ​

config/core.php (従来の構成では app/Config/core.php) の更新、とりわけ debug 値は非常に重要です。 debug = 0 にすることで、 広くインターネットに晒されることがあってはならない多くの開発用の機能を無効にできます。 debug の無効化は以下の種々のものごとに変更を与えます。

  • pr() と debug() で生成されるデバッグメッセージが無効化されます。
  • CakePHP コアのキャッシュが、開発時の 10 秒ごとの代わりに 999 日ごとに破棄されるようになります。
  • Error ビューが吐く情報が少なくなり、代わりに共通のエラーメッセージが与えられます。
  • エラーが表示されなくなります。
  • 例外のスタックトレースが無効になります。

上記に加えて、プラグインやアプリケーションの拡張が debug を用いてその挙動を変えます。

デバッグレベルを環境変数から読み込むようにすると、環境ごとにデバッグレベルを設定できます。 これにより、debug > 0 のままアプリケーションを本番環境へデプロイしてしまうことを防げ、 デプロイのたびにデバッグレベルを変更する手間も省けます。

pieceofcake2/app スケルトンから作成したアプリケーションは、デバッグレベルを環境変数 DEBUG から読み込み、セットされていない場合はデバッグレベル 2 を使います。本番サーバーでは、 たとえば Apache の設定で 0 にセットします。

apache
SetEnv DEBUG 0

ほかのアプリケーションでは、config/core.php で環境変数を読み込みます。

// config/core.php
Configure::write('debug', (int)env('DEBUG'));

セキュリティ用のソルトやデータベースの認証情報など、スケルトンが環境変数から読み込むほかの設定は 環境変数 に一覧があります。本番環境では、 .env ファイルではなく実際の環境変数としてセットしてください。実際の環境変数は、スケルトンが 開発時に読み込む .env ファイルより常に優先されます。

アプリケーションのパフォーマンスの向上 ​

プラグインの画像や JavaScript、CSS ファイルなどの静的なアセットを扱う場合、 ディスパッチャを通すことはかなりの非効率です。 本番環境においては、次のようにシンボリックリンクを張ることを強くお勧めします。

bash
ln -s ../../plugins/YourPlugin/webroot/css/yourplugin.css webroot/css/yourplugin.css

従来の構成では、プラグインは app/Plugin/ または plugins/ に、webroot は app/webroot/ にあります。

AWS Lambda へのデプロイ ​

CakePHP 2 アプリケーションは、Bref と Docker コンテナイメージを使って、サーバーを管理せずに AWS Lambda で動かすこともできます。アプリケーションに必要な変更、セッション、キャッシュ、メール、 ファイルに使う AWS のサービス、GitHub Actions からのデプロイについては AWS Lambda へのデプロイ を参照してください。

Based on the CakePHP Cookbook. Content licensed under CC BY-NC-SA 4.0. Not affiliated with the Cake Software Foundation.