vikilaboy/laravel-distributed-maintenance-mode

为Laravel应用程序提供将维护模式信息存储在Redis或S3上的功能。从despark/laravel-distributed-maintenance-mode分支而来

dev-main 2024-03-14 00:13 UTC

This package is auto-updated.

Last update: 2024-09-14 01:17:33 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
  1. 发布配置文件
php artisan vendor:publish --tag="laravel-distributed-maintenance-mode.config"

使用说明

  1. 打开 config/app.php 文件,将维护模式驱动器更改为 custom
'maintenance' => [
    'driver' => 'custom',   
],
  1. 打开 config/laravel-distributed-maintenance-mode.php 文件,将维护模式驱动器更改为你首选的一个(rediss3)。

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

许可协议

Laravel分布式维护模式是开源软件,遵循 MIT 协议