コンテンツへスキップ

デプロイメント

はじめに

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つのキャッシュファイルに結合するため、設定値を読み込む際にフレームワークがファイルシステムにアクセスする回数が大幅に削減されます。

exclamation

デプロイメントプロセス中に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環境変数の値を尊重するように設定されています。

exclamation

本番環境では、この値は常に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アプリケーションを構築するために必要なすべてのツールをインストールして管理します。

lightbulb

Laravel Forgeを使用したデプロイメントの完全なガイドが必要ですか?Laravel Bootcampと、Laracastsで利用可能なForgeのビデオシリーズをご覧ください。

Laravel Vapor

完全にサーバーレスで自動スケーリングされる、Laravel用に調整されたデプロイメントプラットフォームが必要な場合は、Laravel Vaporをご覧ください。Laravel Vaporは、AWSを基盤としたLaravel用のサーバーレスデプロイメントプラットフォームです。VaporでLaravelインフラストラクチャを起動し、サーバーレスのスケーラブルなシンプルさに魅了されてください。Laravel VaporはLaravelの開発者によって微調整されているため、フレームワークとシームレスに連携し、これまでと同じようにLaravelアプリケーションを記述し続けることができます。