はじめに

Laravel アプリケーションを本番環境にデプロイする準備ができたら、アプリケーションができるだけ効率的に動作するようにするために重要なことがいくつかあります。この文書では、Laravel アプリケーションが適切にデプロイされることを確認するための素晴らしい出発点をいくつか紹介します。

サーバー要件

Laravel フレームワークにはいくつかのシステム要件があります。ウェブサーバーが以下の最小 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 を実行しているサーバーにデプロイする場合、ウェブサーバーの構成の出発点として以下の構成ファイルを使用できます。おそらく、このファイルはサーバーの構成に応じてカスタマイズする必要があります。サーバーの管理に関して支援が必要な場合は、Laravel Forge のようなファーストパーティの Laravel サーバー管理およびデプロイメントサービスの使用を検討してください。

以下の構成のように、ウェブサーバーがすべてのリクエストをアプリケーションの public/index.php ファイルに向けることを確認してください。index.php ファイルをプロジェクトのルートに移動しようとしないでください。プロジェクトのルートからアプリケーションを提供すると、多くの機密構成ファイルが公のインターネットに露出してしまいます:

  1. server {
  2. listen 80;
  3. listen [::]:80;
  4. server_name example.com;
  5. root /srv/example.com/public;
  6. add_header X-Frame-Options "SAMEORIGIN";
  7. add_header X-Content-Type-Options "nosniff";
  8. index index.php;
  9. charset utf-8;
  10. location / {
  11. try_files $uri $uri/ /index.php?$query_string;
  12. }
  13. location = /favicon.ico { access_log off; log_not_found off; }
  14. location = /robots.txt { access_log off; log_not_found off; }
  15. error_page 404 /index.php;
  16. location ~ \.php$ {
  17. fastcgi_pass unix:/var/run/php/php8.2-fpm.sock;
  18. fastcgi_param SCRIPT_FILENAME $realpath_root$fastcgi_script_name;
  19. include fastcgi_params;
  20. fastcgi_hide_header X-Powered-By;
  21. }
  22. location ~ /\.(?!well-known).* {
  23. deny all;
  24. }
  25. }

FrankenPHP

FrankenPHP を使用して Laravel アプリケーションを提供することもできます。FrankenPHP は Go で書かれたモダンな PHP アプリケーションサーバーです。FrankenPHP を使用して Laravel PHP アプリケーションを提供するには、php-server コマンドを単に呼び出すだけです:

  1. frankenphp php-server -r public/

FrankenPHP がサポートするより強力な機能、例えば Laravel Octane の統合、HTTP/3、モダンな圧縮、または Laravel アプリケーションをスタンドアロンのバイナリとしてパッケージ化する機能を活用するには、FrankenPHP の Laravel ドキュメント を参照してください。

ディレクトリの権限

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

最適化

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

  1. php artisan optimize

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

  1. php artisan optimize:clear

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

キャッシュ構成

アプリケーションを本番環境にデプロイする際には、デプロイメントプロセス中に config:cache Artisan コマンドを実行することを確認してください:

  1. php artisan config:cache

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

デプロイメントプロセス中に config:cache コマンドを実行する場合は、構成ファイル内からのみ env 関数を呼び出していることを確認してください。構成がキャッシュされると、.env ファイルは読み込まれず、.env 変数の env 関数へのすべての呼び出しは null を返します。

イベントのキャッシュ

デプロイメントプロセス中にアプリケーションの自動検出されたイベントからリスナーへのマッピングをキャッシュする必要があります。これは、デプロイメント中に event:cache Artisan コマンドを呼び出すことで実現できます:

  1. php artisan event:cache

ルートのキャッシュ

多くのルートを持つ大規模なアプリケーションを構築している場合、デプロイメントプロセス中に route:cache Artisan コマンドを実行していることを確認してください:

  1. php artisan route:cache

このコマンドは、すべてのルート登録をキャッシュファイル内の単一のメソッド呼び出しにまとめ、数百のルートを登録する際のルート登録のパフォーマンスを向上させます。

ビューのキャッシュ

アプリケーションを本番環境にデプロイする際には、デプロイメントプロセス中に view:cache Artisan コマンドを実行していることを確認してください:

  1. 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 ファイルで構成できます:

  1. ->withRouting(
  2. web: __DIR__.'/../routes/web.php',
  3. commands: __DIR__.'/../routes/console.php',
  4. health: '/up',
  5. health: '/status',
  6. )

このルートに対して 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 と Forge の Laracasts で利用可能なビデオシリーズ をチェックしてください。

Laravel Vapor

完全にサーバーレスで、自動スケーリングのデプロイメントプラットフォームを Laravel 用に調整したい場合は、Laravel Vapor をチェックしてください。Laravel Vapor は、AWS によって提供される Laravel 用のサーバーレスデプロイメントプラットフォームです。Vapor で Laravel インフラストラクチャを立ち上げ、サーバーレスのスケーラブルなシンプルさに恋をしましょう。Laravel Vapor は、Laravel のクリエイターによってフレームワークとシームレスに動作するように微調整されているため、従来通りに Laravel アプリケーションを記述し続けることができます。