Skip to content

デプロイ

はじめに

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 php-server -r public/

FrankenPHPのより高度な機能(例:Laravel Octaneとの統合、HTTP/3、最新の圧縮技術、Laravelアプリケーションをスタンドアロンバイナリとしてパッケージ化する機能など)を利用するには、FrankenPHPのLaravelドキュメントを参照してください。

ディレクトリ権限

LaravelはWebサーバープロセスがbootstrap/cachestorageディレクトリに書き込む必要があるため、Webサーバープロセスの所有者がこれらのディレクトリへの書き込み権限を持っていることを確認してください。

最適化

アプリケーションを本番環境にデプロイする際、設定、イベント、ルート、ビューなど、様々なファイルをキャッシュすることが推奨されます。Laravelは、これらすべてのファイルをキャッシュするための単一の便利なoptimize Artisanコマンドを提供します。このコマンドは通常、アプリケーションのデプロイプロセスの一部として呼び出されるべきです。

php artisan optimize

optimize:clearメソッドを使用して、optimizeコマンドによって生成されたすべてのキャッシュファイルと、デフォルトのキャッシュドライバー内のすべてのキーを削除できます。

php artisan optimize:clear

以下のドキュメントでは、optimizeコマンドによって実行される各粒度の最適化コマンドについて説明します。

設定のキャッシュ

アプリケーションを本番環境にデプロイする際、デプロイプロセス中にconfig:cache Artisanコマンドを実行する必要があります。

php artisan config:cache

このコマンドは、Laravelのすべての設定ファイルを単一のキャッシュファイルに結合し、フレームワークが設定値を読み込む際のファイルシステムへのアクセス回数を大幅に減少させます。

Warning

デプロイプロセス中に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設定ファイルの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アプリケーションを書き続けることができます。

ユーザーノート