こんにちは!
新しい Laravel を眺めてたら、謎の設定項目があるじゃないですか。知らない子!
APP_MAINTENANCE_DRIVER=file
# APP_MAINTENANCE_STORE=database
これが何か調べる記事です。
メンテナンスモード
Laravelには、標準でメンテナンスモードが搭載されています。
使い方は簡単。
$ php artisan down
$ php artisan up
これだけ。
勝手にステータスコードも 503
にしてくれるので、とても便利。
更新手順書やデプロイコマンドに仕込んでおきたいくらい。
メンテナンス中に接続する
でも、このままでは全ての通信を遮断してしまいます。
デプロイ担当者だけは見たいですよね。その時は --with-secret
。
$ php artisan down --with-secret
INFO You may bypass maintenance mode via [http://localhost/Ev1wpGy2nfj76JZM].
出てきたURLにアクセスすると、通行手形のクッキーが生成されて、リダイレクトします。
なので、そのブラウザだけはメンテナンスモード時でも通信が可能となるわけです。
当然、別のブラウザではNG。
最初のお話 APP_MAINTENANCE_DRIVER
今までのが前提で、最初の話題。
config ファイルを見ると、以下で使われている。
'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 あたりを使用すると良さそう
-
試しに以下の設定で運用してみる。
APP_MAINTENANCE_DRIVER=cache
APP_MAINTENANCE_STORE=database
CACHE_STORE=database
# cache 用のテーブルを生成する
$ php artisan cache:table
$ php artisan down
DB に以下のような内容が記録され、全てのLaravelでメンテナンス状態が共有される。
お~これから使ってこ。
まとめ
Laravel は神。
弊社は、以前はフロントとバックエンドを別々に作って nginx で振り分けたんですけど、Laravelに統一したほうが利点が大きいので、今はまとめちゃってます。
置くだけで良いのは偉大。そうすると、メンテナンスモードなど Laravel の恩恵を受けられるので、この一枚のアプリケーション層のメリットが大きすぎる。