despark / laravel-distributed-maintenance-mode
为Laravel应用提供将维护模式信息存储在Redis或S3的能力
Requires
- php: ^8.1
- ext-redis: *
- illuminate/support: ^10 || ^11
- league/flysystem-aws-s3-v3: ^3.0
- predis/predis: >=2.0.3
Requires (Dev)
- laravel/framework: ^10.0 || ^11.0
README
关于Laravel维护模式
Laravel的维护模式允许开发者在进行网站维护或更新时,将网站下线(使用php artisan down
),同时允许选定的用户,如管理员,访问网站。当启用维护模式时,所有未经授权的用户将看到一个可定制的维护页面,而不是网站内容。一旦维护完成,开发者可以禁用维护模式(使用php artisan up
),网站将恢复正常运行。这个功能可以用来防止用户在更新或更改时访问网站,并且允许开发者在不干扰用户体验的情况下对在线网站进行维护。
功能说明
然而,维护模式默认的工作方式对于大多数主要应用设置来说非常有限。默认配置是在磁盘上存储一个文件,这假设你有一个单独的服务器来托管你的应用,或者你愿意通过SSH登录到所有服务器来运行命令。另一个默认选项是将维护信息存储在你的默认缓存配置中。这同样有一个主要限制,因为大多数应用在服务器部署后会清除其默认缓存,这将清除维护模式。
这时,Laravel分布式维护模式出现了,它允许你从Redis或S3中选择一个驱动。之后,你必须选择你喜欢的Redis数据库或S3存储桶来存储维护信息。
通过这样做,你只需要在你的服务器之一上运行默认的php artisan down
命令。维护模式将被所有服务器拾取,并且在你通过php artisan up
将其取消之前,也会被新部署的服务器持久化。
安装
1) 使用composer
安装
composer require despark/laravel-distributed-maintenance-mode
2) 发布配置文件
php artisan vendor:publish --tag="laravel-distributed-maintenance-mode.config"
使用说明
1) 打开config/app.php
文件,将维护模式驱动程序更改为custom
'maintenance' => [
'driver' => 'custom',
],
2) 打开config/laravel-distributed-maintenance-mode.php
文件,将维护模式驱动程序更改为你喜欢的(redis
或s3
)。
3) 如果你选择了redis
作为驱动程序,设置你想要存储信息的首选Redis数据库。它必须在config/database.php
中的redis
配置下已经设置好。
'redis' => [
'client' => env('REDIS_CLIENT', 'predis'),
'options' => [
'cluster' => env('REDIS_CLUSTER', 'predis'),
'prefix' => env('REDIS_PREFIX', \Illuminate\Support\Str::slug(env('APP_NAME', 'laravel'), '_').'_database_'),
],
'default' => [
'url' => env('REDIS_URL'),
'host' => env('REDIS_HOST', '127.0.0.1'),
'username' => env('REDIS_USERNAME'),
'password' => env('REDIS_PASSWORD'),
'port' => env('REDIS_PORT', '6379'),
'database' => env('REDIS_DB', '0'),
],
'cache' => [
'url' => env('REDIS_URL'),
'host' => env('REDIS_HOST', '127.0.0.1'),
'username' => env('REDIS_USERNAME'),
'password' => env('REDIS_PASSWORD'),
'port' => env('REDIS_PORT', '6379'),
'database' => env('REDIS_CACHE_DB', '1'),
],
'maintenance_mode' => [
'url' => env('REDIS_URL'),
'host' => env('REDIS_HOST', '127.0.0.1'),
'username' => env('REDIS_USERNAME'),
'password' => env('REDIS_PASSWORD'),
'port' => env('REDIS_PORT', '6379'),
'database' => env('REDIS_MAINTENANCE_MODE_DB', '2'),
],
],
4) 如果你选择了s3
作为驱动程序,设置你想要存储信息的首选S3磁盘。它必须在config/filesystems.php
中的disks
配置下已经设置好。
'disks' => [
'local' => [
'driver' => 'local',
'root' => storage_path('app'),
'throw' => false,
],
'public' => [
'driver' => 'local',
'root' => storage_path('app/public'),
'url' => env('APP_URL').'/storage',
'visibility' => 'public',
'throw' => false,
],
's3' => [
'driver' => 's3',
'key' => env('AWS_ACCESS_KEY_ID'),
'secret' => env('AWS_SECRET_ACCESS_KEY'),
'region' => env('AWS_DEFAULT_REGION'),
'bucket' => env('AWS_BUCKET'),
'url' => env('AWS_URL'),
'endpoint' => env('AWS_ENDPOINT'),
'use_path_style_endpoint' => env('AWS_USE_PATH_STYLE_ENDPOINT', false),
'throw' => false,
],
'maintenance_mode_s3' => [
'driver' => 's3',
'key' => env('AWS_ACCESS_KEY_ID'),
'secret' => env('AWS_SECRET_ACCESS_KEY'),
'region' => env('AWS_DEFAULT_REGION'),
'bucket' => env('AWS_BUCKET_MAINTENANCE_MODE'),
'url' => env('AWS_URL_MAINTENANCE_MODE'),
'endpoint' => env('AWS_ENDPOINT_MAINTENANCE_MODE'),
'use_path_style_endpoint' => env('AWS_USE_PATH_STYLE_ENDPOINT', false),
'throw' => false,
],
],
5) 现在,你已经准备好了。你可以使用默认的up
和down
artisan命令,从单个服务器上开启/关闭应用程序的维护模式。
许可协议
Laravel分布式维护模式是开源软件,遵循MIT许可证。