デプロイ
イントロダクション
Laravelアプリケーションを本番環境にデプロイする準備ができたら、アプリケーションができるだけ効率的に実行されるように、いくつか重要なことがあります。このドキュメントでは、Laravelアプリケーションが適切にデプロイされるようにするための素晴らしい出発点をいくつか説明します。
サーバ要件
Laravelフレームワークには、いくつかのシステム要件があります。Webサーバに以下の最低限のPHPバージョンと拡張機能があることを確認してください。
- PHP >= 8.2
- Ctype PHP拡張
- cURL PHP拡張
- DOM PHP拡張
- Fileinfo PHP拡張
- Filter PHP拡張
- Hash PHP拡張
- Mbstring PHP拡張
- OpenSSL PHP拡張
- PCRE PHP拡張
- PDO PHP拡張
- Session PHP拡張
- Tokenizer PHP拡張
- XML PHP拡張
サーバ設定
Nginx
Nginxを実行しているサーバにアプリケーションをデプロイする場合、Webサーバを設定するための出発点として、以下の設定ファイルを使用できます。このファイルは、サーバの設定に応じてカスタマイズする必要があるでしょう。サーバの管理について支援が必要な場合は、Laravel CloudのようなフルマネージドのLaravelプラットフォームの利用を検討してください。
下記の設定のように、Webサーバがすべてのリクエストをアプリケーションのpublic/index.phpファイルに送るようにしてください。プロジェクトのルートからアプリケーションを提供すると、多くの機密性の高い設定ファイルが公のインターネットに公開されてしまうため、index.phpファイルをプロジェクトのルートに移動しようとしてはなりません。
1server { 2 listen 80; 3 listen [::]:80; 4 server_name example.com; 5 root /srv/example.com/public; 6 7 add_header X-Frame-Options "SAMEORIGIN"; 8 add_header X-Content-Type-Options "nosniff"; 9 10 index index.php;11 12 charset utf-8;13 14 location / {15 try_files $uri $uri/ /index.php?$query_string;16 }17 18 location = /favicon.ico { access_log off; log_not_found off; }19 location = /robots.txt { access_log off; log_not_found off; }20 21 error_page 404 /index.php;22 23 location ~ ^/index\.php(/|$) {24 fastcgi_pass unix:/var/run/php/php8.2-fpm.sock;25 fastcgi_param SCRIPT_FILENAME $realpath_root$fastcgi_script_name;26 include fastcgi_params;27 fastcgi_hide_header X-Powered-By;28 }29 30 location ~ /\.(?!well-known).* {31 deny all;32 }33}
FrankenPHP
FrankenPHPを使用してLaravelアプリケーションを配信することもできます。FrankenPHPはGoで書かれたモダンなPHPアプリケーションサーバです。FrankenPHPを使用してLaravel PHPアプリケーションを配信するには、php-serverコマンドを呼び出すだけです。
1frankenphp php-server -r public/
Laravel Octaneとの統合、HTTP/3、最新の圧縮、Laravelアプリケーションをスタンドアロンのバイナリとしてパッケージ化する機能など、FrankenPHPがサポートするより強力な機能を利用するには、FrankenPHPのLaravelドキュメントを参照してください。
ディレクトリパーミッション
Laravelはbootstrap/cacheディレクトリとstorageディレクトリに書き込みを行う必要があるため、Webサーバプロセスの所有者がこれらのディレクトリへの書き込み権限を持っていることを確認する必要があります。
最適化
アプリケーションを本番環境にデプロイするときは、設定、イベント、ルート、ビューなど、さまざまなファイルをキャッシュする必要があります。Laravelは、これらすべてのファイルをキャッシュする、便利で単一のoptimize Artisanコマンドを提供しています。このコマンドは通常、アプリケーションのデプロイプロセスの一部として実行します。
1php artisan optimize
optimize:clearメソッドは、optimizeコマンドによって生成されたすべてのキャッシュファイルと、デフォルトのキャッシュドライバのすべてのキーを削除するために使用します。
1php artisan optimize:clear
以下のドキュメントでは、optimizeコマンドによって実行される個々の最適化コマンドについて説明します。
設定のキャッシュ
アプリケーションを本番環境にデプロイする際は、デプロイプロセス中にconfig:cache Artisanコマンドを確実に実行する必要があります。
1php artisan config:cache
このコマンドは、Laravelのすべての設定ファイルを1つのキャッシュファイルにまとめます。これにより、設定値をロードする際にフレームワークがファイルシステムにアクセスする回数を大幅に削減できます。
デプロイプロセス中にconfig:cacheコマンドを実行する場合は、設定ファイル内からのみenv関数を呼び出すようにしてください。設定がキャッシュされると、.envファイルはロードされなくなり、.env変数を取得するためのenv関数の呼び出しはすべてnullを返します。
イベントのキャッシュ
デプロイプロセス中に、アプリケーションの自動検出されたイベントとリスナのマッピングをキャッシュする必要があります。これは、デプロイ中にevent:cache Artisanコマンドを実行することで実現できます。
1php artisan event:cache
ルートのキャッシュ
多数のルートを持つ大規模なアプリケーションを構築している場合は、デプロイプロセス中にroute:cache Artisanコマンドを実行するようにしてください。
1php artisan route:cache
このコマンドは、すべてのルート登録をキャッシュファイル内の単一のメソッド呼び出しに集約し、何百ものルートを登録する際のルート登録のパフォーマンスを向上させます。
ビューのキャッシュ
アプリケーションを本番環境にデプロイする際は、デプロイプロセス中にview:cache Artisanコマンドを確実に実行してください。
1php artisan view:cache
このコマンドは、すべてのBladeビューをプリコンパイルするため、オンデマンドでコンパイルされなくなり、ビューを返す各リクエストのパフォーマンスが向上します。
デバッグモード
config/app.php設定ファイルのデバッグオプションは、エラーに関する情報が実際にユーザーにどれだけ表示されるかを決定します。デフォルトでは、このオプションはアプリケーションの.envファイルに保存されているAPP_DEBUG環境変数の値を尊重するように設定されています。
本番環境では、この値は常にfalseであるべきです。本番環境でAPP_DEBUG変数がtrueに設定されていると、機密性の高い設定値がアプリケーションのエンドユーザーに漏洩するリスクがあります。
ヘルスルート
Laravelには、アプリケーションの状態を監視するために使用できる組み込みのヘルスチェックルートが含まれています。本番環境では、このルートを使用して、稼働時間監視サービス、ロードバランサ、またはKubernetesなどのオーケストレーションシステムにアプリケーションの状態を報告できます。
デフォルトでは、ヘルスチェックルートは/upで提供され、アプリケーションが例外なく起動した場合は200 HTTPレスポンスを返します。それ以外の場合は、500 HTTPレスポンスが返されます。このルートのURIは、アプリケーションのbootstrap/appファイルで設定できます。
1->withRouting(2 web: __DIR__.'/../routes/web.php',3 commands: __DIR__.'/../routes/console.php',4 health: '/up', 5 health: '/status', 6)
このルートにHTTPリクエストが送られると、LaravelはIlluminate\Foundation\Events\DiagnosingHealthイベントもディスパッチし、アプリケーションに関連する追加のヘルスチェックを実行できるようにします。このイベントのリスナ内で、アプリケーションのデータベースやキャッシュの状態を確認できます。アプリケーションに問題を検出した場合は、リスナから例外を投げるだけです。
Laravel Cloud/Forgeによるデプロイ
Laravel Cloud
Laravel用に調整された、フルマネージドで自動スケーリングするデプロイプラットフォームが必要な場合は、Laravel Cloudをチェックしてください。Laravel Cloudは、マネージドコンピュート、データベース、キャッシュ、オブジェクトストレージを提供する、Laravelのための堅牢なデプロイプラットフォームです。
CloudでLaravelアプリケーションを起動し、スケーラブルなシンプルさに夢中になってください。Laravel Cloudは、Laravelの作成者によってフレームワークとシームレスに連携するように微調整されているため、普段どおりにLaravelアプリケーションを書き続けることができます。
Laravel Forge
自分のサーバを管理したいが、堅牢なLaravelアプリケーションを実行するために必要なさまざまなサービスをすべて設定することに不安がある場合は、Laravel ForgeがLaravelアプリケーション向けのVPSサーバ管理プラットフォームです。
Laravel Forgeは、DigitalOcean、Linode、AWSなど、さまざまなインフラストラクチャプロバイダ上にサーバを作成できます。さらに、Forgeは、Nginx、MySQL、Redis、Memcached、Beanstalkなど、堅牢なLaravelアプリケーションを構築するために必要なすべてのツールをインストールし、管理します。