despark/laravel-distributed-maintenance-mode

为Laravel应用提供将维护模式信息存储在Redis或S3的能力

v1.2.0 2024-04-11 11:18 UTC

This package is auto-updated.

Last update: 2024-09-11 09:25:08 UTC


README

Total Downloads Latest Stable Version License

关于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文件,将维护模式驱动程序更改为你喜欢的(rediss3)。

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) 现在,你已经准备好了。你可以使用默认的updown artisan命令,从单个服务器上开启/关闭应用程序的维护模式。

许可协议

Laravel分布式维护模式是开源软件,遵循MIT许可证