本文へ移動
Laravel Tips

本番へ公開する(デプロイ)

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 を、プロジェクトの一番上のフォルダへ動かしてはいけません。そこから動かすと、見せてはいけない設定ファイルの多くが、インターネットから見えてしまいます。

nginx
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 のアプリを動かせます。

bash
frankenphp php-server -r public/

FrankenPHP には、もっと強い機能もあります。Laravel Octane(Laravel を速く動かすためのパッケージ)との連携、HTTP/3、新しい圧縮の方式、アプリを1つの実行ファイルにまとめる機能などです。使いたいときは、FrankenPHP の Laravel 向けのドキュメントを見てください。

フォルダの書きこみの権限#

Laravel は、bootstrap/cache と storage のフォルダに書きこみます。Web サーバーを動かしているユーザー(サーバーの中のアカウント)が、この2つのフォルダに書きこめるようにしておきます。

最適化#

本番に公開するときは、設定・イベント・ルート・ビューなど、キャッシュしておきたいファイルがたくさんあります。Laravel には、これらをまとめてキャッシュする optimize という Artisan コマンドがあります。ふつうは、公開の手順の中で動かします。

bash
php artisan optimize

optimize:clear は、optimize で作ったキャッシュのファイルをすべて消し、既定のキャッシュのドライバー(保存の方式)に入っているキーも、すべて消します。

bash
php artisan optimize:clear

optimize が動かすコマンドを1つずつ見ていきます。

コマンド 何をキャッシュするか
config:cache 設定ファイル
event:cache 自動で見つけたイベントとリスナーの対応
route:cache ルート
view:cache Blade のビュー

設定のキャッシュ#

公開の手順の中で、config:cache を動かします。

bash
php artisan config:cache

Laravel の設定ファイルが、1つのキャッシュのファイルにまとまります。設定値を読むときに、ファイルを読みに行く回数が大きく減ります。

注意

公開の手順で config:cache を動かすなら、env 関数は、設定ファイルの中でだけ呼ぶようにします。キャッシュしたあとは .env が読まれないので、.env の変数を読む env 関数の呼び出しは、すべて null を返します。

イベントのキャッシュ#

Laravel が自動で見つけたイベントとリスナーの組み合わせも、公開の手順の中でキャッシュしておきます。event:cache を動かします。

bash
php artisan event:cache

ルートのキャッシュ#

ルートがたくさんある大きなアプリなら、公開の手順の中で、route:cache を動かします。

bash
php artisan route:cache

すべてのルートの登録が、キャッシュのファイルの中で、1回のメソッドの呼び出しにまとまります。ルートが何百もあるとき、登録が速くなります。

ビューのキャッシュ#

公開の手順の中で、view:cache を動かします。

bash
php artisan view:cache

すべての Blade のビューが、前もって変換されます。表示のたびに変換しなくて済むので、ビューを返すリクエストが速くなります。

サービスの再読み込み#

補足

Laravel Cloud に公開するときは、reload コマンドは要りません。すべてのサービスを、無理に止めずに読みなおす作業を、自動でしてくれます。

新しい版を公開したあと、ずっと動き続けているサービスは、読みなおし(再起動)が必要です。そうしないと、新しいコードが使われません。キューのワーカー(順番待ちの仕事を取り出して動かすプログラム)、Laravel Reverb(リアルタイムに知らせを届けるサーバー)、Laravel Octane などです。Laravel には、これらのサービスを終わらせる reload という Artisan コマンドがあります。

bash
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 の行を次のようにします。

php
->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日時点の内容をもとに、日本語でまとめています。

ページの一覧