本番へ公開する(デプロイ)
Laravel のアプリを本番のサーバーで公開するときに必要な PHP の条件、Nginx などの設定、キャッシュで速くする optimize、ヘルスチェックの URL を説明します。
デプロイとは、作ったアプリを本番のサーバーに置いて公開することです。公開するときには、アプリを速く、安全に動かすためにしておきたいことがあります。このページでは、その出発点になることをまとめます。
サーバーに必要なもの#
Laravel を動かすサーバーには、最低限、次の PHP のバージョンと拡張機能(PHP に足す機能)が必要です。
| 必要なもの | 説明 |
|---|---|
| PHP 8.3 以上 | PHP の本体のバージョン |
| Ctype | 文字の種類を調べる拡張機能 |
| cURL | 外のサービスと通信する拡張機能 |
| DOM | HTML や XML を扱う拡張機能 |
| Fileinfo | ファイルの種類を調べる拡張機能 |
| Filter | 値を検査・整える拡張機能 |
| Hash | ハッシュ(元に戻せない形に変えること)の拡張機能 |
| Mbstring | 日本語などの長い文字を扱う拡張機能 |
| OpenSSL | 暗号化の拡張機能 |
| PCRE | 正規表現(文字の並びを探す決まり)の拡張機能 |
| PDO | データベースにつなぐ拡張機能 |
| Session | セッションの拡張機能 |
| Tokenizer | PHP のコードを分ける拡張機能 |
| XML | XML を扱う拡張機能 |
サーバーの設定#
Nginx#
Nginx(Web サーバーの1つ)が動くサーバーに公開するなら、次の設定ファイルを出発点にできます。サーバーの設定に合わせて、たいてい直す必要があります。サーバーの管理を任せたいなら、Laravel Cloud のように、管理をまるごと任せられる 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 ~ ^/index\.php(/|$) {
fastcgi_pass unix:/var/run/php/php8.3-fpm.sock;
fastcgi_param SCRIPT_FILENAME $realpath_root$fastcgi_script_name;
include fastcgi_params;
fastcgi_buffer_size 32k;
fastcgi_buffers 8 32k;
fastcgi_busy_buffers_size 64k;
fastcgi_hide_header X-Powered-By;
}
location ~ /\.(?!well-known).* {
deny all;
}
}
FrankenPHP#
FrankenPHP でも、Laravel のアプリを動かせます。FrankenPHP は、Go 言語で作られた、新しい PHP のアプリのサーバーです。php-server コマンドを動かすだけで、Laravel のアプリを動かせます。
frankenphp php-server -r public/
FrankenPHP には、もっと強い機能もあります。Laravel Octane(Laravel を速く動かすためのパッケージ)との連携、HTTP/3、新しい圧縮の方式、アプリを1つの実行ファイルにまとめる機能などです。使いたいときは、FrankenPHP の Laravel 向けのドキュメントを見てください。
フォルダの書きこみの権限#
Laravel は、bootstrap/cache と storage のフォルダに書きこみます。Web サーバーを動かしているユーザー(サーバーの中のアカウント)が、この2つのフォルダに書きこめるようにしておきます。
最適化#
本番に公開するときは、設定・イベント・ルート・ビューなど、キャッシュしておきたいファイルがたくさんあります。Laravel には、これらをまとめてキャッシュする optimize という Artisan コマンドがあります。ふつうは、公開の手順の中で動かします。
php artisan optimize
optimize:clear は、optimize で作ったキャッシュのファイルをすべて消し、既定のキャッシュのドライバー(保存の方式)に入っているキーも、すべて消します。
php artisan optimize:clear
optimize が動かすコマンドを1つずつ見ていきます。
| コマンド | 何をキャッシュするか |
|---|---|
config:cache |
設定ファイル |
event:cache |
自動で見つけたイベントとリスナーの対応 |
route:cache |
ルート |
view:cache |
Blade のビュー |
設定のキャッシュ#
公開の手順の中で、config:cache を動かします。
php artisan config:cache
Laravel の設定ファイルが、1つのキャッシュのファイルにまとまります。設定値を読むときに、ファイルを読みに行く回数が大きく減ります。
注意
公開の手順で config:cache を動かすなら、env 関数は、設定ファイルの中でだけ呼ぶようにします。キャッシュしたあとは .env が読まれないので、.env の変数を読む env 関数の呼び出しは、すべて null を返します。
イベントのキャッシュ#
Laravel が自動で見つけたイベントとリスナーの組み合わせも、公開の手順の中でキャッシュしておきます。event:cache を動かします。
php artisan event:cache
ルートのキャッシュ#
ルートがたくさんある大きなアプリなら、公開の手順の中で、route:cache を動かします。
php artisan route:cache
すべてのルートの登録が、キャッシュのファイルの中で、1回のメソッドの呼び出しにまとまります。ルートが何百もあるとき、登録が速くなります。
ビューのキャッシュ#
公開の手順の中で、view:cache を動かします。
php artisan view:cache
すべての Blade のビューが、前もって変換されます。表示のたびに変換しなくて済むので、ビューを返すリクエストが速くなります。
サービスの再読み込み#
補足
Laravel Cloud に公開するときは、reload コマンドは要りません。すべてのサービスを、無理に止めずに読みなおす作業を、自動でしてくれます。
新しい版を公開したあと、ずっと動き続けているサービスは、読みなおし(再起動)が必要です。そうしないと、新しいコードが使われません。キューのワーカー(順番待ちの仕事を取り出して動かすプログラム)、Laravel Reverb(リアルタイムに知らせを届けるサーバー)、Laravel Octane などです。Laravel には、これらのサービスを終わらせる reload という Artisan コマンドがあります。
php artisan reload
Laravel Cloud を使わないなら、プロセス(動いているプログラム)を見張る道具を自分で設定します。終わったプロセスを見つけて、自動で起動しなおしてくれる道具です。
デバッグモード#
config/app.php の debug は、エラーのときに、利用者へどれだけの情報を見せるかを決めます。既定では、.env の APP_DEBUG に従います。
注意
本番では、この値をかならず false にします。 本番で APP_DEBUG が true だと、秘密の設定値が、利用者に見えてしまうおそれがあります。
ヘルスチェックのルート#
Laravel には、アプリが元気かを確かめるための、ヘルスチェックのルートが入っています。本番では、アプリの状態を、監視のサービス(動いているかを見張るもの)・ロードバランサー(アクセスを複数のサーバーに分ける装置)・Kubernetes のような運用の道具に知らせるために使えます。
既定では、/up で開けます。アプリがエラー(例外)を出さずに起動できていれば、HTTP の 200(成功)を返します。そうでなければ、HTTP の 500(サーバーのエラー)を返します。このルートの URI(URL のパスの部分)は、bootstrap/app で変えられます。たとえば、/up を /status に変えるには、health の行を次のようにします。
->withRouting(
web: __DIR__.'/../routes/web.php',
commands: __DIR__.'/../routes/console.php',
health: '/status',
)
このルートにリクエストが来ると、Laravel は Illuminate\Foundation\Events\DiagnosingHealth というイベントも出します。これを使うと、アプリに合わせた確認を足せます。このイベントのリスナー(知らせを受けて動く処理)の中で、データベースやキャッシュの状態を確かめられます。問題が見つかったら、リスナーから例外を投げるだけです。
Laravel Cloud や Forge で公開する#
Laravel Cloud#
Laravel に合わせて作られた、公開のためのサービスです。管理をまるごと任せられ、使われる量に合わせて自動で大きさが変わります。管理つきのサーバー・データベース・キャッシュ・ファイルの置き場(オブジェクトストレージ)を用意しています。
Laravel Forge#
Laravel のアプリのための、VPS(借りるサーバー)の管理サービスです。自分でサーバーを管理したいけれど、丈夫なアプリに必要なさまざまなサービスの設定には自信がない、という人に向いています。
Forge は、DigitalOcean・Linode・AWS などの会社のサーバーを作れます。また、Nginx・MySQL・Redis・Memcached・Beanstalk など、丈夫なアプリに必要な道具を、入れて管理してくれます。
関連するページ#
公式ドキュメント(英語)
2026年10月5日時点の内容をもとに、日本語でまとめています。