javadle / updater
Updater 允许您的 Laravel 应用程序自动更新自己。
Requires
- php: ^8.1
- illuminate/support: ^10.0
README
Updater 允许您的 Laravel 应用程序自动更新!
当您发布应用程序时,非常重要的一点是要维护它;因此,可能需要发布更新以修复错误,以及实现新功能。
您将应用程序部署给多个用户
功能
> 自动更新
当检测到服务器上的新版本时,您将看到一个通知,显示系统可用的新更新。
> 维护模式
更新将在更新启动时激活维护模式(使用 Laravel 的自命令),直到更新成功完成。
> 安全性
您可以选择哪些用户(例如,仅管理员)可以执行应用程序的更新;此参数存储在 config/updater.php
中,因此每个应用程序都可以独立设置其用户。此外,Updater 与 Laravel-Auth 兼容。
> 可靠性
在更新过程中,Update 将创建所有可覆盖文件的备份,因此如果发生错误,将尝试自动恢复先前状态。如果恢复失败,您可以使用存储在系统根目录中的备份手动维护。
> 支持PHP脚本
Update 可以导入PHP脚本来执行用户自定义操作(例如,在更新后创建数据库中的新表);命令在更新的最后一步执行。
> 集成备份/恢复
> 多语言
> 通过Web界面或控制台访问
开始
以下说明将帮助您在服务器上启动项目副本以进行开发和测试。
先决条件
Updater 已与 Laravel 9/10 进行测试。建议的 Laravel 版本 >= 8
安装
此软件包可以通过 Composer 安装。
composer require javadle/updater
安装后,请执行以下操作
1) 在 config/app.php
中添加您的服务提供者以下内容
'providers' => [
// ...
pcinaglia\updater\UpdaterServiceProvider::class,
];
2) 发布包资产
此步骤将配置文件复制到您的 Laravel 应用程序配置文件夹。
php artisan vendor:publish --provider="javadle\updater\UpdaterServiceProvider"
发布后,您可以通过 config/updater.php
文件管理 Updater 的配置,它包含
/*
* Временная папка для хранения обновлений перед их установкой.
*/
'tmp_folder_name' => 'tmp',
/*
* Имя файла скрипта, вызываемого при обновлении.
*/
'script_filename' => 'upgrade.php',
/*
* URL-адрес, где хранятся ваши обновления (например, для папки с именем «обновления» по адресу https://site.com/yourapp).
*/
'update_baseurl' => 'https://:8888/update',
/*
* Установите промежуточное ПО для маршрута: updater.update
* НЕ работает только 'auth' (управление безопасностью с помощью конфигурации 'allow_users_id')
*/
'middleware' => ['web', 'auth'],
/*
* Установите, какие пользователи могут выполнять обновление;
* Этот параметр принимает: ARRAY(user_id) или FALSE => например: [1] OR [1,3,0] OR false
* Как правило, у ADMIN user_id=1; установите FALSE, чтобы отключить эту проверку (не рекомендуется)
*/
'allow_users_id' => [1],
/*
* Установите, какие пользователи будут видеть изменения при обновлении;
* Этот параметр принимает: ARRAY()
* Как правило, ADMIN имеет почту admin@admin.com;
*/
'show_change_log_for_users' => [
'admin@admin.az',
'admin@admin.ru',
'admin@admin.com'
],
/*
* Установите, будет ли добавлен jquery на страницу
* Если у вас уже подключена jquery то оставьте в режиме false
*/
'enable_jquery' => false,
/*
* Установите, будет ли добавлен sweetalert2 на страницу
* Если у вас уже подключена sweetalert2 то оставьте в режиме false
*/
'enable_sweet_alert2' => false
3) 创建 version.txt
为了保存您应用程序的当前版本,您需要创建一个名为 version.txt
的文本文件并将其复制到您的 Laravel 应用程序主目录。例如,创建一个只包含以下内容的 .txt 文件:
1.0
请确保只使用文件中的第一行。在发布更新时,这些文件将从 Updater 更新。
创建您的“更新仓库”
1) 创建存档
创建一个ZIP存档,包含您想要在更新期间替换的所有文件(使用与您的应用程序相同的结构来整理存档中的文件)。
1.1) 更新脚本(可选)
您可以为执行用户自定义操作(例如,在数据库中创建新表)创建一个名为 upgrade.php
的PHP文件。此文件应包含名为 beforeUpdate()
和 afterUpdate()
的函数,这些函数返回布尔值(以便将执行状态传递给 Updater),例如以下示例
<?php function beforeUpdate(): bool { Artisan::call('backup::db'); return true; } function afterUpdate(): bool { Artisan::call('migrate --force'); Artisan::call('db::seed'); Artisan::call('module::seed'); return true; } ?>
请注意,上述示例不处理任何异常,因此其执行状态始终返回 true(不推荐)。
2) 设置更新元数据
创建一个名为 updater.json 的文件,如下所示
{ "version": "1.0.1", "archive": "RELEASE-1.01.zip", "description": "Added Blogs" }
archive
包含存档的 .zip 名称(参见步骤 1)。
3) 上传您的更新
将 updater.json
和 .zip 文件夹上传到您的服务器上的同一文件夹(即将放置更新的文件夹)。
4) 配置您的应用程序
在 config/updater.php
中指定更新放置的服务器(参见安装)
例如,如果您将文件上传到
http://yoursites.com/updatesformyapp/RELEASE-1.02.zip
и http://yoursites.com/updatesformyapp/updater.json.
设置 'update_baseurl'
如下: 'update_baseurl' => 'http://yoursites.com/updatesformyapp',
使用方法
Updater 实现了三个主要方法,您可以通过 Web 路由或 artisan 命令调用这些方法
updater.check, updater:check
返回 ''(更新不存在)或 $version(例如,如果存在更新,则为 1.0.1)。
updater.currentVersion, updater:current-version
返回您的应用程序的当前版本(从 version.txt
中获取)。
updater.update, updater:update
它将下载并安装最新的更新。此 Web 路由受 config/updater.php
中的 'allow_users_id'
信息保护
我建议不要直接使用这些路由,但显示更新可用的通知;通知可以包含执行更新的按钮,请参阅下面的解决方案
使用 Bootstrap 5 和 JQuery(内置)的弹出窗口通知
(readme 文件夹/preview 1.png “带更新按钮的通知”)
将以下代码添加到 resources/view/layout/app.blade.php
中,以加载 Updater 中包含的视图(我建议在 @yield('content')
前面立即添加)
@include('vendor.updater.notification')
测试:发布更新并更新页面以显示通知。