qopiku / laravel-selfupdater
为您的自托管Laravel应用程序提供自动更新功能。
Requires
- php: ^8.1
- ext-json: *
- ext-zip: *
- guzzlehttp/guzzle: ^7.2
- illuminate/support: ^10.0
- league/uri: ^7.0
README
本包提供了一些基本方法,以实现Laravel应用程序的自动更新功能。
支持的更新提供者
- GitHub
- Gitlab
- Gitea
- 基于Http的存档
通常,当分发需要某些更新机制但不含Composer的自托管Laravel应用程序时,您需要此功能。
安装
使用Composer从master安装最新版本
$ composer require qopiku/laravel-selfupdater
配置
安装包后,您需要通过以下方式发布配置文件:
$ php artisan vendor:publish --provider="Qopiku\Updater\UpdaterServiceProvider"
注意:如果您想使用GitHub作为更新源,请确保在您的config/self-updater.php文件中输入正确的供应商和存储库名称。
设置当前安装版本
在开始更新之前,请确保正确设置安装版本。您负责在配置文件中设置当前版本,或者更好的方式是通过环境变量SELF_UPDATER_VERSION_INSTALLED。
tag基于更新
将安装版本设置为释放中设置的某个标签。
branch基于更新
将安装版本设置为最新提交的日期时间。
有效的版本可能是: 2020-04-19T22:35:48Z
运行Artisan命令
可以在更新过程前后运行Artisan命令,并在config/self-updater.php中进行配置。
示例
'artisan_commands' => [ 'pre_update' => [ 'updater:prepare' => [ 'class' => \App\Console\Commands\PreUpdateTasks::class, 'params' => [] ], ], 'post_update' => [ 'postupdate:cleanup' => [ 'class' => \App\Console\Commands\PostUpdateCleanup::class, 'params' => [ 'log' => 1, 'reset' => false, // etc. ] ] ] ]
配置下载路径
有时您的网络主机不允许将文件保存到服务器的/tmp文件夹中。您可以通过设置环境变量SELF_UPDATER_DOWNLOAD_PATH为不同的值来更改应用程序下载到的文件夹。只需记住,该文件夹不在您的应用程序所在的文件夹内,因为在更新过程中可能会被覆盖。
通过电子邮件发送通知
您需要指定一个接收电子邮件地址和接收者姓名,以接收更新可用的通知。您可以通过在.env文件中添加SELF_UPDATER_MAILTO_NAME和SELF_UPDATER_MAILTO_ADDRESS来指定这些值。
私有存储库
私有存储库可以通过(Bearer)令牌访问。配置文件中的每个存储库都应该有一个private_access_token字段,您可以在其中设置令牌。
ℹ 请不要在令牌前加上Bearer 前缀。这会自动完成。
用法
要开始更新过程,例如在控制器中,只需使用
Route::get('/', function (\Qopiku\Updater\UpdaterManager $updater) { // Check if new version is available if($updater->source()->isNewVersionAvailable()) { // Get the current installed version echo $updater->source()->getVersionInstalled(); // Get the new version available $versionAvailable = $updater->source()->getVersionAvailable(); // Create a release $release = $updater->source()->fetch($versionAvailable); // Run the update process $updater->source()->update($release); } else { echo "No new version available."; } });
目前,源检索是一个同步过程。它不会在后台运行。
使用GitHub
该包包含一个GitHub源存储库类型,用于从GitHub检索版本 - 实际上使用GitHub来拉取软件的最新版本。
只需确保在您的config/self-updater.php文件中设置了正确的存储库。
基于标签的更新
这是默认值。更新将通过使用标记提交(即版本)来检索。
基于分支的更新
通过配置中的use_branch设置选择应使用的分支。
// ... 'repository_types' => [ 'github' => [ 'type' => 'github', 'repository_vendor' => env('SELF_UPDATER_REPO_VENDOR', ''), 'repository_name' => env('SELF_UPDATER_REPO_NAME', ''), // ... 'use_branch' => 'v2', ], // ... ];
使用Gitlab
通过config/self-updater.php配置Gitlab或使用适当的环境变量。
// ... 'repository_types' => [ 'gitlab' => [ 'base_url' => '', 'type' => 'gitlab', 'repository_id' => env('SELF_UPDATER_REPO_URL', ''), 'download_path' => env('SELF_UPDATER_DOWNLOAD_PATH', '/tmp'), 'private_access_token' => env('SELF_UPDATER_GITLAB_PRIVATE_ACCESS_TOKEN', ''), ], // ... ];
ℹ 虽然环境变量的名称是SELF_UPDATER_REPO_URL,但只需指定您的存储库ID。
对于自托管的Gitlab实例,您可以设置base_url变量为实例所在域名,例如http://gitlab.acme.local。
使用HTTP存档
该软件包包含一个HTTP源代码库类型,用于从包含zip存档的HTTP目录列表中检索发行版。
要使用HTTP存档运行,请在您的.env文件中使用以下设置
存档URL应仅包含简单的目录列表和相应的zip存档。
SELF_UPDATER_PKG_FILENAME_FORMAT包含所有webapp更新包的文件名格式。即当存档URL上列出的更新包名称类似于webapp-v1.2.0.zip、webapp-v1.3.5.zip等时,格式应为webapp-v_VERSION_。其中_VERSION_部分用作语义版本化变量,用于MAJOR.MINOR.PATCH版本化。zip扩展名会自动添加。
目标存档文件必须是zip存档,并且应包含所有位于根级别的文件,而不是在以存档本身命名的额外文件夹中。
使用Gitea
使用Gitea,您可以使用自己的带有标签发行的Gitea实例。
要使用它,请在您的.env文件中使用以下设置
贡献
请参阅贡献指南。
许可证
MIT许可证(MIT)。请参阅许可证文件以获取更多信息。