pcinaglia / laraupdater
LaraUpdater 允许您的 Laravel 应用程序自动更新自身。
Requires
- php: >=7.0.0
README
LaraUpdater 允许您的 Laravel 应用程序自动更新自身 ! ;)
当您发布一个应用程序时,最重要的是维护它;因此,可能需要发布更新以修复错误以及实现新功能。
您将应用程序部署给多个用户
没有 LaraUpdate => 您想一个接一个地联系他们并使用电子邮件或链接发送更新吗? ...mmm...非常糟糕,因为每个用户(具有管理员角色)都必须手动覆盖其部署中的所有文件;或者,您必须手动访问所有部署(例如使用 FTP)并为它们安装更新。
使用 LaraUpdater => 让您的应用程序(独自)检测到新更新并通知管理员;此外,让您的应用程序安装它并处理所有相关步骤。
新版本变更日志
- 现在可以从 artisan 命令运行
- 现在支持 Laravel 8 和 9;
- 基于 Bootstrap 5 的新视图;
- 错误修复。
3-2023
- 支持 Laravel 10
- 支持 ^php 8.0
- 中断:将 main() 函数移动到 upgrade.php 中,并使用 beforeUpdate() 和 afterUpdate() 函数
功能
> 自更新
LaraUpdater 允许您的 Laravel 应用程序进行自更新 :) 让您的应用程序(独自)检测到新更新并通知管理员;此外,让您的应用程序安装它并处理所有相关步骤。
> 维护模式
LaraUpdate 从更新开始直到成功完成,使用 Laravel 原生命令激活维护模式。
> 安全性
您可以设置哪些用户(例如,只有管理员)可以执行应用程序的更新;此参数存储在 config/laraupdater.php
中,因此每个应用程序都可以独立设置其用户。此外,LaraUpdater 与 Laravel-Auth 兼容。
> 容错
在更新过程中,LaraUpdate 会备份所有被覆盖的文件,如果在发生错误时可以尝试自动恢复到先前状态。如果恢复失败,您可以使用存储在系统根目录中的备份进行手动维护。
> 支持 PHP 脚本
LaraUpdate 可以导入 PHP 脚本以执行自定义操作(例如,在更新后创建数据库中的表);这些命令在更新的最后一步执行。
> 集成备份/恢复
> 多语言
> 通过 Web 界面或控制台访问
入门
以下说明将在您的服务器上运行项目的副本,以便进行开发和测试。
先决条件
LaraUpdater 已使用 Laravel 8/9 推荐的 Laravel 版本 >= 8 进行测试
安装
此软件包可以通过 Composer 安装
composer require pcinaglia/laraupdater
安装后,您必须执行以下步骤
1) 在 config/app.php
文件中添加服务提供者
'providers' => [
// ...
pcinaglia\laraupdater\LaraUpdaterServiceProvider::class,
];
2) 在您的应用程序中发布 LaraUpdater
此步骤将复制配置文件到您的 Laravel 应用程序的配置文件夹中。
php artisan vendor:publish --provider="pcinaglia\laraupdater\LaraUpdaterServiceProvider"
发布后,您可以通过 config/laraupdater.php
文件管理 LaraUpdater 的配置,它包含
/*
* Temporary folder to store update before to install it.
*/
'tmp_folder_name' => 'tmp',
/*
* Script's filename called during the update.
*/
'script_filename' => 'upgrade.php',
/*
* URL where your updates are stored ( e.g. for a folder named 'updates', under http://site.com/yourapp ).
*/
'update_baseurl' => 'https://:8888/update',
/*
* Set a middleware for the route: updater.update
* Only 'auth' NOT works (manage security using 'allow_users_id' configuration)
*/
'middleware' => ['web', 'auth'],
/*
* Set which users can perform an update;
* This parameter accepts: ARRAY(user_id) ,or FALSE => for example: [1] OR [1,3,0] OR false
* Generally, ADMIN have user_id=1; set FALSE to disable this check (not recommended)
*/
'allow_users_id' => [1]
3) 创建 version.txt
为了存储应用程序的当前版本,您必须创建一个名为 version.txt
的文本文件并将其复制到 Laravel 应用程序的主文件夹中。例如,创建一个只包含
1.0
仅使用 .txt 文件的第 1 行。当发布更新时,此文件将由 LaraUpdate 更新。
创建您的更新“仓库”
1) 创建存档
创建一个.zip存档,包含您希望在更新期间替换的所有文件(使用您应用程序的相同结构来组织存档中的文件)。
1.1) 升级脚本(可选)
您可以创建一个名为upgrade.php
的PHP文件来执行自定义操作(例如,在数据库中创建新表)。此文件必须包含名为beforeUpdate()
和afterUpdate()
的函数,并返回布尔值(以便将执行状态传递给LaraUpdater),请参阅此示例
<?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) 设置更新元数据
创建一个名为laraupdater.json
的文件,如下所示
{ "version": "1.0.2", "archive": "RELEASE-1.02.zip", "description": "Minor bugs fix" }
archive
包含.zip存档的名称(参见步骤-1)。
3) 上传您的更新
将laraupdater.json
和.zip存档上传到您的服务器同一文件夹中(将托管更新的文件夹)。
4) 配置您的应用程序
在config/laraupdater.php
中设置将托管更新的服务器(参见安装)
例如,如果您上传的文件在
http://yoursites.com/updatesformyapp/RELEASE-1.02.zip
and http://yoursites.com/updatesformyapp/laraupdater.json
将'update_baseurl'
设置为以下内容:'update_baseurl' => 'http://yoursites.com/updatesformyapp',
用法
LaraUpdater实现了三个主要方法,您可以通过Web路由或Artisan命令调用这些方法
updater.check, laraupdater:check
返回''(不存在更新)或$version(例如,如果存在更新,则为1.0.2)。
updater.currentVersion, laraupdater:current-version
返回您的应用程序的当前版本(从version.txt
中获取)。
updater.update, laraupdater:update
它下载并安装最新更新。此Web路由使用config/laraupdater.php
中的'allow_users_id'
下的信息进行保护
建议不要直接使用这些路由,而是当有更新可用时显示一个警告;警告可以包含一个按钮来执行更新,请参阅以下解决方案
使用Bootstrap 5和JQuery(包含)的弹出通知
将以下代码添加到resources/view/layout/app.blade.php
中,以加载LaraUpdater中包含的视图(建议在@yield('content')
之前立即添加)
@include('vendor.laraupdater.notification')
测试:发布一个更新并刷新页面以显示警告 :-)
作者
贡献者
- Aura Komputer - 使用GitHub联系
许可
本项目采用MIT许可证 - 请参阅LICENSE文件以获取详细信息。
(MIT许可证 - 保证信息) 本软件按“原样”提供,不提供任何明示或暗示的保证,包括但不限于适销性、适用于特定目的和不侵犯版权的保证。在任何情况下,作者或版权所有者均不对任何索赔、损害或其他责任负责,无论此类责任基于合同、侵权或其他法律行为,无论此类责任源自、因之产生或与软件或其使用或其他交易有关。