メインコンテンツまでスキップ

デプロイ

はじめに

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 ~ \.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のLaravelドキュメントを参照してください。

最適化

アプリケーションを本番環境にデプロイする際には、構成、イベント、ルート、ビューなど、キャッシュする必要があるファイルがさまざまあります。 Laravelには、これらのファイルをすべてキャッシュする便利なoptimize Artisanコマンドが用意されています。 このコマンドは通常、アプリケーションのデプロイプロセスの一部として呼び出されるべきです:

php artisan optimize

optimizeコマンドによって生成されたすべてのキャッシュファイルを削除するには、optimize:clearメソッドを使用できます:

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 構成ファイル内のデバッグオプションは、エラーに関する情報がユーザーに実際に表示される量を決定します。デフォルトでは、このオプションは、APP_DEBUG 環境変数の値を尊重するように設定されており、この環境変数はアプリケーションの .env ファイルに格納されています。

警告

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

注記

Laravel Forgeでのデプロイに関する完全なガイドをお探しですか?Laravel BootcampとLaracastsで利用可能なForgeのビデオシリーズをチェックしてください。

Laravel Vapor

Laravel向けにチューニングされた完全にサーバーレスでオートスケーリングのデプロイメントプラットフォームをお探しの場合は、Laravel Vaporをチェックしてください。Laravel Vaporは、AWSで動作するLaravel向けのサーバーレスデプロイメントプラットフォームです。VaporでLaravelのインフラストラクチャを立ち上げ、サーバーレスのスケーラブルなシンプリシティに魅了されてください。Laravel Vaporは、フレームワークとシームレスに連携するようにLaravelのクリエイターによって微調整されているため、従来通りにLaravelアプリケーションを書き続けることができます。