デプロイ¶
はじめに¶
Laravelアプリケーションを本番環境にデプロイする準備ができたら、アプリケーションを可能な限り効率的に実行させるために、いくつかの重要な手順を踏むことができます。このドキュメントでは、Laravelアプリケーションが適切にデプロイされるようにするためのいくつかの優れた出発点を紹介します。
サーバー要件¶
Laravelフレームワークにはいくつかのシステム要件があります。Webサーバーに以下の最小限のPHPバージョンと拡張機能が導入されていることを確認する必要があります。
- PHP >= 8.2
- Ctype PHP Extension
- cURL PHP Extension
- DOM PHP Extension
- Fileinfo PHP Extension
- Filter PHP Extension
- Hash PHP Extension
- Mbstring PHP Extension
- OpenSSL PHP Extension
- PCRE PHP Extension
- PDO PHP Extension
- Session PHP Extension
- Tokenizer PHP Extension
- XML PHP Extension
サーバー設定¶
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 ~ \.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のより高度な機能(例:Laravel Octaneとの統合、HTTP/3、最新の圧縮技術、Laravelアプリケーションをスタンドアロンバイナリとしてパッケージ化する機能など)を利用するには、FrankenPHPのLaravelドキュメントを参照してください。
ディレクトリ権限¶
LaravelはWebサーバープロセスがbootstrap/cache
とstorage
ディレクトリに書き込む必要があるため、Webサーバープロセスの所有者がこれらのディレクトリへの書き込み権限を持っていることを確認してください。
最適化¶
アプリケーションを本番環境にデプロイする際、設定、イベント、ルート、ビューなど、様々なファイルをキャッシュすることが推奨されます。Laravelは、これらすべてのファイルをキャッシュするための単一の便利なoptimize
Artisanコマンドを提供します。このコマンドは通常、アプリケーションのデプロイプロセスの一部として呼び出されるべきです。
optimize:clear
メソッドを使用して、optimize
コマンドによって生成されたすべてのキャッシュファイルと、デフォルトのキャッシュドライバー内のすべてのキーを削除できます。
以下のドキュメントでは、optimize
コマンドによって実行される各粒度の最適化コマンドについて説明します。
設定のキャッシュ¶
アプリケーションを本番環境にデプロイする際、デプロイプロセス中にconfig:cache
Artisanコマンドを実行する必要があります。
このコマンドは、Laravelのすべての設定ファイルを単一のキャッシュファイルに結合し、フレームワークが設定値を読み込む際のファイルシステムへのアクセス回数を大幅に減少させます。
Warning
デプロイプロセス中にconfig:cache
コマンドを実行する場合、設定ファイル内でのみenv
関数を呼び出すようにしてください。設定がキャッシュされると、.env
ファイルは読み込まれず、.env
変数に対するenv
関数の呼び出しはすべてnull
を返します。
イベントのキャッシュ¶
デプロイプロセス中に、アプリケーションの自動検出されたイベントからリスナーへのマッピングをキャッシュする必要があります。これは、デプロイ中にevent:cache
Artisanコマンドを呼び出すことで実現できます。
ルートのキャッシュ¶
多数のルートを持つ大規模なアプリケーションを構築している場合、デプロイプロセス中にroute:cache
Artisanコマンドを実行することが推奨されます。
このコマンドは、すべてのルート登録をキャッシュファイル内の単一のメソッド呼び出しに集約し、数百のルートを登録する際のパフォーマンスを向上させます。
ビューのキャッシュ¶
アプリケーションを本番環境にデプロイする際、デプロイプロセス中にview:cache
Artisanコマンドを実行する必要があります。
このコマンドは、すべてのBladeビューを事前にコンパイルし、ビューが返される度にオンデマンドでコンパイルされるのを防ぎます。これにより、各リクエストのパフォーマンスが向上します。
デバッグモード¶
config/app.php
設定ファイルのdebugオプションは、エラーに関するどの程度の情報がユーザーに表示されるかを決定します。デフォルトでは、このオプションはアプリケーションの.env
ファイルに保存されているAPP_DEBUG
環境変数の値を尊重するように設定されています。
本番環境では、この値を常にfalse
に設定する必要があります。本番環境でAPP_DEBUG
変数がtrue
に設定されていると、アプリケーションのエンドユーザーに機密設定値が露出するリスクがあります。
ヘルスルート¶
Laravelには、アプリケーションのステータスを監視するために使用できる組み込みのヘルスチェックルートが含まれています。本番環境では、このルートを使用して、アプリケーションのステータスをアップタイムモニター、ロードバランサー、またはKubernetesなどのオーケストレーションシステムに報告できます。
デフォルトでは、ヘルスチェックルートは/up
で提供され、アプリケーションが例外なく起動した場合には200 HTTPレスポンスを返します。それ以外の場合は500 HTTPレスポンスが返されます。このルートのURIは、アプリケーションのbootstrap/app
ファイルで設定できます。
->withRouting(
web: __DIR__.'/../routes/web.php',
commands: __DIR__.'/../routes/console.php',
health: '/up', // [tl! remove]
health: '/status', // [tl! add]
)
このルートに対して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アプリケーションを構築するために必要なすべてのツールをインストールおよび管理します。
Note
Laravel Forgeでのデプロイに関する完全なガイドが欲しいですか?Laravel BootcampとForgeのLaracastsで利用可能なビデオシリーズをチェックしてください。
Laravel Vapor¶
Laravelのためのフルマネージドのサーバーレスでオートスケーリングが可能なデプロイメントプラットフォームをお探しの場合は、Laravel Vaporをご検討ください。Laravel Vaporは、AWSによって動力を与えられたLaravelのためのサーバーレスデプロイメントプラットフォームです。VaporでLaravelのインフラを構築し、サーバーレスで拡張性に優れたシンプルさを体験してください。Laravel Vaporは、Laravelのクリエイターによってフレームワークとシームレスに連携するように微調整されているため、今まで通りにLaravelアプリケーションを書き続けることができます。