デプロイメント
はじめに
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 ForgeなどのLaravelのファーストパーティサーバー管理およびデプロイサービスの使用を検討してください。
以下の設定のように、Webサーバーがすべてのリクエストをアプリケーションのpublic/index.php
ファイルにリダイレクトするようにしてください。プロジェクトルートにindex.php
ファイルを移動しようとしないでください。アプリケーションをプロジェクトルートから提供すると、多くの機密設定ファイルがパブリックインターネットに公開される可能性があります。
server { listen 80; listen [::]:80; server_name example.com; root /srv/example.com/public; add_header X-Frame-Options "SAMEORIGIN"; add_header X-Content-Type-Options "nosniff"; index index.php; charset utf-8; location / { try_files $uri $uri/ /index.php?$query_string; } location = /favicon.ico { access_log off; log_not_found off; } location = /robots.txt { access_log off; log_not_found off; } error_page 404 /index.php; location ~ ^/index\.php(/|$) { fastcgi_pass unix:/var/run/php/php8.2-fpm.sock; fastcgi_param SCRIPT_FILENAME $realpath_root$fastcgi_script_name; include fastcgi_params; fastcgi_hide_header X-Powered-By; } location ~ /\.(?!well-known).* { deny all; }}
FrankenPHP
FrankenPHPを使用してLaravelアプリケーションを提供することもできます。FrankenPHPはGoで記述された最新のPHPアプリケーションサーバーです。FrankenPHPを使用してLaravel PHPアプリケーションを提供するには、単にそのphp-server
コマンドを呼び出すだけです。
frankenphp php-server -r public/
FrankenPHPのLaravel Octane統合、HTTP/3、最新の圧縮、またはLaravelアプリケーションをスタンドアロンバイナリとしてパッケージ化する機能など、FrankenPHPがサポートするより強力な機能を活用するには、FrankenPHPのLaravelドキュメントを参照してください。
ディレクトリ権限
Laravelはbootstrap/cache
およびstorage
ディレクトリに書き込む必要があるため、Webサーバーのプロセスオーナーがこれらのディレクトリに書き込む権限を持っていることを確認する必要があります。
最適化
アプリケーションを本番環境にデプロイする際には、設定、イベント、ルート、ビューなど、さまざまなファイルをキャッシュする必要があります。Laravelは、これらのすべてのファイルをキャッシュする便利な単一のoptimize
Artisanコマンドを提供します。このコマンドは、通常、アプリケーションのデプロイメントプロセスの一部として呼び出されます。
php artisan optimize
optimize:clear
メソッドを使用して、optimize
コマンドによって生成されたすべてのキャッシュファイルと、デフォルトのキャッシュドライバ内のすべてのキーを削除できます。
php artisan optimize:clear
以降のドキュメントでは、optimize
コマンドによって実行される個々の最適化コマンドについて説明します。
キャッシュ設定
アプリケーションを本番環境にデプロイする際には、デプロイメントプロセス中にconfig:cache
Artisanコマンドを実行する必要があります。
php artisan config:cache
このコマンドは、Laravelのすべての設定ファイルを1つのキャッシュファイルに結合するため、設定値を読み込む際にフレームワークがファイルシステムにアクセスする回数が大幅に削減されます。
デプロイメントプロセス中にconfig:cache
コマンドを実行する場合は、設定ファイル内からenv
関数を呼び出す場合にのみ、そのようにしてください。設定がキャッシュされると、.env
ファイルは読み込まれなくなり、.env
変数のenv
関数へのすべての呼び出しはnull
を返します。
イベントのキャッシュ
デプロイメントプロセス中に、アプリケーションで自動検出されたイベントとリスナーのマッピングをキャッシュする必要があります。これは、デプロイメント中にevent:cache
Artisanコマンドを呼び出すことで実現できます。
php artisan event:cache
ルートのキャッシュ
多くのルートを持つ大規模なアプリケーションを構築する場合は、デプロイメントプロセス中にroute:cache
Artisanコマンドを実行していることを確認する必要があります。
php artisan route:cache
このコマンドは、すべてのルート登録をキャッシュファイル内の単一メソッド呼び出しに削減するため、数百のルートを登録する場合のルート登録のパフォーマンスが向上します。
ビューのキャッシュ
アプリケーションを本番環境にデプロイする際には、デプロイメントプロセス中にview:cache
Artisanコマンドを実行する必要があります。
php artisan view:cache
このコマンドはすべてのBladeビューを事前にコンパイルするため、オンデマンドでコンパイルする必要がなくなり、ビューを返す各リクエストのパフォーマンスが向上します。
デバッグモード
config/app.php
設定ファイルのデバッグオプションは、実際にユーザーに表示されるエラーに関する情報の量を決定します。デフォルトでは、このオプションはアプリケーションの.env
ファイルに格納されているAPP_DEBUG
環境変数の値を尊重するように設定されています。
本番環境では、この値は常にfalse
である必要があります。本番環境でAPP_DEBUG
変数がtrue
に設定されていると、アプリケーションのエンドユーザーに機密設定値が公開されるリスクがあります。
ヘルスルート
Laravelには、アプリケーションのステータスを監視するために使用できる組み込みのヘルスチェックルートが含まれています。本番環境では、このルートを使用して、アプリケーションのステータスをアップタイムモニター、ロードバランサー、またはKubernetesなどのオーケストレーションシステムに報告できます。
デフォルトでは、ヘルスチェックルートは/up
で提供され、アプリケーションが例外なしで起動した場合に200 HTTPレスポンスを返します。それ以外の場合は、500 HTTPレスポンスが返されます。アプリケーションのbootstrap/app
ファイルでこのルートのURIを設定できます。
->withRouting( web: __DIR__.'/../routes/web.php', commands: __DIR__.'/../routes/console.php', health: '/up', health: '/status', )
このルートにHTTPリクエストが行われると、LaravelはIlluminate\Foundation\Events\DiagnosingHealth
イベントもディスパッチするため、アプリケーションに関連する追加のヘルスチェックを実行できます。このイベントのリスナー内で、アプリケーションのデータベースまたはキャッシュの状態を確認できます。アプリケーションに問題を検出した場合は、リスナーから例外をスローするだけです。
Forge/Vaporを使用した簡単なデプロイ
Laravel Forge
独自のサーバー設定を管理する準備ができていない場合、または堅牢なLaravelアプリケーションを実行するために必要なさまざまなサービスを設定することに慣れていない場合は、Laravel Forgeが優れた代替手段となります。
Laravel Forgeは、DigitalOcean、Linode、AWSなど、さまざまなインフラストラクチャプロバイダーでサーバーを作成できます。さらに、ForgeはNginx、MySQL、Redis、Memcached、Beanstalkなど、堅牢なLaravelアプリケーションを構築するために必要なすべてのツールをインストールして管理します。
Laravel Forgeを使用したデプロイメントの完全なガイドが必要ですか?Laravel Bootcampと、Laracastsで利用可能なForgeのビデオシリーズをご覧ください。
Laravel Vapor
完全にサーバーレスで自動スケーリングされる、Laravel用に調整されたデプロイメントプラットフォームが必要な場合は、Laravel Vaporをご覧ください。Laravel Vaporは、AWSを基盤としたLaravel用のサーバーレスデプロイメントプラットフォームです。VaporでLaravelインフラストラクチャを起動し、サーバーレスのスケーラブルなシンプルさに魅了されてください。Laravel VaporはLaravelの開発者によって微調整されているため、フレームワークとシームレスに連携し、これまでと同じようにLaravelアプリケーションを記述し続けることができます。