aurakomputer / laraupdater
LaraUpdater 允许您的 Laravel 应用程序自动更新自己。
Requires
- php: >=7.0.0 || ^8.0
- illuminate/support: ^8.28 || ^9.0 || ^10.0
This package is auto-updated.
Last update: 2024-09-09 15:21:19 UTC
README
LaraUpdater [为您的 Laravel 应用程序提供自更新功能]
LaraUpdater 允许您的 Laravel 应用程序自动更新自己! ;)
当您发布应用程序时,最重要的是维护它;因此,可能有必要发布更新以修复错误以及实现新功能。
您将应用程序部署给多个用户
没有 LaraUpdate => 您想一个接一个地联系他们,并通过电子邮件或链接发送更新吗? ...mmm...非常糟糕,因为每个具有管理员角色的用户都必须手动覆盖他在部署中的所有文件;或者,您必须手动访问所有部署(例如使用 FTP)并为他们安装更新。
有 LaraUpdater => 让您的应用程序(独立)检测到有新更新可用,并将此信息通知管理员;此外,让您的应用程序安装它并处理所有相关步骤。
新版本变更日志
- 现在可以从 artisan 命令运行
- 现在支持 Laravel 8 和 9;
- 基于 Bootstrap 5 的新视图;
- 错误修复。
3-2023
- 支持 Laravel 10
- 支持 ^php 8.0
- break: 将 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 应用的主文件夹中。例如,创建一个只包含以下内容的 .txt 文件:
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", "url": "https:///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')
测试:发布一个更新并刷新页面以显示警报 :-)
许可证
此项目受 MIT 许可证的许可 - 有关详细信息,请参阅 LICENSE 文件。
(MIT 许可证 - 保证信息) 本软件按“原样”提供,不提供任何明示或暗示的保证,包括但不限于适销性、针对特定目的的适用性和非侵权性保证。在任何情况下,作者或版权所有者均不对任何索赔、损害或其他责任负责,无论是在合同、侵权或其他情况下,是否由于软件或其使用或其他交易而引起、产生或与之有关。