#はじめに
Laravel アプリケーションを本番環境にデプロイする準備ができたら、アプリケーションをできるだけ効率的に動作させるために重要なポイントがあります。このドキュメントでは、Laravel アプリケーションを適切にデプロイするための基本的な手順を紹介します。
#サーバー要件
Laravel フレームワークにはいくつかのシステム要件があります。ウェブサーバーが以下の最低限の PHP バージョンと拡張機能を備えていることを確認してください。
- PHP >= 8.1
- 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 ファイルをプロジェクトのルートに移動しようとしないでください。プロジェクトルートからアプリケーションを提供すると、多くの機密設定ファイルがインターネット上に公開されてしまいます。
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;
}
location ~ /\.(?!well-known).* {
deny all;
}
}
#最適化
#オートローダーの最適化
本番環境にデプロイする際は、Composer のクラスオートローダーマップを最適化して、Composer がクラスに対応するファイルを素早く見つけられるようにしてください。
composer install --optimize-autoloader --no-dev
オートローダーの最適化に加えて、必ず composer.lock ファイルをプロジェクトのソース管理リポジトリに含めてください。composer.lock ファイルがあると、依存関係のインストールが大幅に高速化されます。
#設定のキャッシュ
本番環境にアプリケーションをデプロイする際は、デプロイプロセス中に config:cache Artisan コマンドを実行してください。
php artisan config:cache
このコマンドは Laravel のすべての設定ファイルを単一のキャッシュファイルにまとめるため、設定値を読み込む際のファイルシステムへのアクセス回数を大幅に減らせます。
デプロイ時に 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 に設定されていると、機密設定値がエンドユーザーに漏れるリスクがあります。
#Forge / Vapor を使った簡単デプロイ
#Laravel Forge
サーバー設定を自分で管理する準備ができていなかったり、堅牢な Laravel アプリケーションを動かすために必要な各種サービスの設定に自信がない場合は、Laravel Forge が素晴らしい選択肢です。
Laravel Forge は DigitalOcean、Linode、AWS などのさまざまなインフラプロバイダー上にサーバーを作成できます。さらに、Nginx、MySQL、Redis、Memcached、Beanstalk など、堅牢な Laravel アプリケーション構築に必要なツールのインストールと管理も行います。
Laravel Forge を使ったデプロイの完全ガイドが欲しい場合は、Laravel Bootcamp と Laracasts の Forge ビデオシリーズをチェックしてください。
#Laravel Vapor
完全なサーバーレスで自動スケーリング対応の Laravel 向けデプロイプラットフォームをお探しなら、Laravel Vapor をご覧ください。Laravel Vapor は AWS を基盤としたサーバーレスのデプロイプラットフォームです。Vapor 上に Laravel インフラを立ち上げ、サーバーレスのスケーラブルでシンプルな環境を体験してください。Laravel Vapor は Laravel の開発者によって最適化されており、これまで通りの書き方で Laravel アプリケーションを開発し続けられます。