イントロダクション
Laravelアプリケーションをプロダクションとしてデプロイする準備ができたら、アプリケーションをできるだけ確実かつ、効率的な実行を行うには、いくつか重要な手順を行う必要があります。このドキュメントでは、アプリケーションを確実にデプロイするため、重要なポイントを説明します。
サーバ要件
Laravelフレームワークにはいくつかのシステム要件があります。Webサーバへ確実に以下の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を実行しているサーバにアプリケーションをデプロイする場合は、以下の設定ファイルを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.1-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
Note: オートローダを最適化することに加え、プロジェクトのソースコントロールリポジトリへ、
composer.lock
ファイルをいつも確実に含めましょう。composer.lock
ファイルが存在すると、プロジェクトの依存パッケージのインストールが、より早くなります。
設定のキャッシュ
アプリケーションをプロダクションへデプロイする場合、デプロイプロセスの中で、確実に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設定ファイルのデバッグオプションは、エラーに関する情報が実際にユーザーに表示される程度を決定します。デフォルトでは、このオプションは、.env
ファイルに保存されているAPP_DEBUG
環境変数の値を尊重するように設定しています。
実稼働環境下では、この値は常にfalse
である必要があります。本番環境でAPP_DEBUG
変数がtrue
に設定されていると、機密性の高い設定値がアプリケーションのエンドユーザーに公開されるリスクがあります。
Forge/Vaporを利用する簡単なデプロイ
Laravel Forge
自分のサーバ設定管理に準備不足であったり、堅牢なLaravelアプリケーション実行に必要な数多くのサービスすべての設定について慣れていなければ、Laravel Forgeは素晴らしい代替案です。
Laravel ForgeはDigitalOcean、Linode、AWSなど数多くのインフラプロバイダ上に、サーバを作成できます。それに加え、ForgeはNginx、MySQL、Redis、Memcached、Beanstalkなどのような、堅牢なLaravelアプリケーションを構築するために必要なツールを全部インストールし、管理します。
Note: Laravel Forgeでデプロイするための完全なガイドが必要ですか?Laravel BootcampとLaracastsで視聴できるForgeのビデオシリーズをご覧ください。
Laravel Vapor
Laravel向け完全サーバレスのオートスケーリング開発プラットフォームが必要な場合は、Laravel Vaporをチェックしてください。Laravel Vaporは、AWSで動作するLaravelのサーバレス開発プラットフォームです。Vapor上でLaravelインフラを起動し、サーバレスのスケーラブルなシンプルさに魅了されてください。Laravel Vaporは、Laravelの作成者によりフレームワークとシームレスに連携するように調整されているため、普段通りにLaravelアプリケーションを書き続けられます。