1
0

【Laravel11】あのメンテナンスモードが進化していた

Last updated at Posted at 2024-07-26

こんにちは!
新しい Laravel を眺めてたら、謎の設定項目があるじゃないですか。知らない子!

.env
APP_MAINTENANCE_DRIVER=file
# APP_MAINTENANCE_STORE=database

これが何か調べる記事です。

メンテナンスモード

Laravelには、標準でメンテナンスモードが搭載されています。
使い方は簡単。

$ php artisan down

image.png

$ php artisan up

image.png

これだけ。
勝手にステータスコードも 503 にしてくれるので、とても便利。
更新手順書やデプロイコマンドに仕込んでおきたいくらい。

メンテナンス中に接続する

でも、このままでは全ての通信を遮断してしまいます。
デプロイ担当者だけは見たいですよね。その時は --with-secret

$ php artisan down --with-secret
   INFO  You may bypass maintenance mode via [http://localhost/Ev1wpGy2nfj76JZM]. 

出てきたURLにアクセスすると、通行手形のクッキーが生成されて、リダイレクトします。
なので、そのブラウザだけはメンテナンスモード時でも通信が可能となるわけです。

image.png

当然、別のブラウザではNG。

image.png

最初のお話 APP_MAINTENANCE_DRIVER

今までのが前提で、最初の話題。
config ファイルを見ると、以下で使われている。

config/app.php
'maintenance' => [
    'driver' => env('APP_MAINTENANCE_DRIVER', 'file'),
    'store' => env('APP_MAINTENANCE_STORE', 'database'),
],

どうやらこれは複数台のサーバーを運用する時に、メンテナンスモードを連動させる仕組みのよう。
最近は AWS を使ってそういった運用も多いので、とても助かる。

  • driver: file, cache
  • store: cache を選択した際に、config/cache.php で定義されているストア名
    • array, database, file, memcached, redis, dynamodb, octane
    • 複数台のサーバーを運用するのであれば、共通のDB、redis あたりを使用すると良さそう

試しに以下の設定で運用してみる。

.env
APP_MAINTENANCE_DRIVER=cache
APP_MAINTENANCE_STORE=database

CACHE_STORE=database
# cache 用のテーブルを生成する
$ php artisan cache:table

$ php artisan down

DB に以下のような内容が記録され、全てのLaravelでメンテナンス状態が共有される。
お~これから使ってこ。

image.png

まとめ

Laravel は神。

弊社は、以前はフロントとバックエンドを別々に作って nginx で振り分けたんですけど、Laravelに統一したほうが利点が大きいので、今はまとめちゃってます。
置くだけで良いのは偉大。

そうすると、メンテナンスモードなど Laravel の恩恵を受けられるので、この一枚のアプリケーション層のメリットが大きすぎる。

1
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
1
0