xcremant / laravel-selfupdater
为您的自托管 Laravel 应用程序提供自动更新功能。
Requires
- php: ^8
- ext-json: *
- ext-zip: *
- guzzlehttp/guzzle: ^7.5.0
- illuminate/support: ^9
- league/uri: ~6.7 || ~6.8
- phpstan/extension-installer: ^1.2
- phpstan/phpstan-phpunit: ^1.2
Requires (Dev)
- dg/bypass-finals: ^1.4
- mikey179/vfsstream: ^1.6
- mockery/mockery: ^1.5
- orchestra/testbench: ^8.0
- phpunit/phpunit: ^9.5.26
This package is auto-updated.
Last update: 2024-09-26 20:46:40 UTC
README
本包为您的 Laravel 应用程序提供了一些实现自更新功能的基本方法。
支持的更新提供者
- GitHub
- Gitlab
- Gitea
- 本地存储
- 基于 Http 的存档
通常您需要在分发需要一些更新机制但不使用 Composer 的自托管 Laravel 应用程序时使用此功能。
安装
使用 Composer 从 master 分支安装最新版本
$ composer require xcremant/laravel-selfupdater
配置
安装包后,您需要通过以下方式发布配置文件:
$ php artisan vendor:publish --provider="Codedge\Updater\UpdaterServiceProvider"
注意:如果您想使用 Github 作为更新源,请在您的 config/self-updater.php
文件中正确输入 vendor 和 repository 名称。
设置当前安装版本
在开始更新之前,请确保正确设置已安装的版本。您负责在配置文件中设置当前版本,或者更好的是通过环境变量 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. ] ] ] ]
升级脚本(可选)
您可以创建一个名为 upgrade.php
的 PHP 文件来执行自定义操作(例如,在数据库中创建新表或从目标应用程序中删除目录/文件)。此文件必须包含一个名为 before()
和 after()
的函数,它们返回布尔值(以将执行状态传递给 LaraUpdater),请参阅此示例
配置下载路径
有时您的网络主机不允许将文件保存到服务器的 /tmp
目录。您可以通过将环境变量 SELF_UPDATER_DOWNLOAD_PATH
设置为不同的值来更改应用程序下载到的文件夹。只需记住,该文件夹不在您的应用程序所在的文件夹内,因为它可能在更新期间被覆盖。
通过电子邮件发送通知
您需要指定一个收件人电子邮件地址和一个收件人姓名,以接收更新可用通知。您可以通过将 SELF_UPDATER_MAILTO_NAME
和 SELF_UPDATER_MAILTO_ADDRESS
添加到您的 .env
文件中来指定这些值。
私有仓库
私有仓库可以通过(Bearer)令牌访问。配置文件中的每个仓库都应该有一个 private_access_token
字段,您可以在此处设置令牌。
ℹ 不要在令牌前添加 Bearer
前缀。这会自动完成。
使用方法
要开始更新过程,例如在一个控制器中,只需使用
Route::get('/', function (\Codedge\Updater\UpdaterManager $updater) { $updater->source()->preUpdateArtisanCommands(); // 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); // Set new version in .env $updater->source()->setNewVersion($versionAvailable); } else { echo "No new version available."; } $updater->source()->postUpdateArtisanCommands(); });
或
Route::get('/', function (\Codedge\Updater\UpdaterManager $updater) { dispatch(new UpdateJob()); });
使用 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' => [ '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。
使用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存档,并且应包含所有位于根级别的文件,而不是在名为存档本身的额外文件夹中。
使用LOCAL存档
要使用LOCAL存档运行,请在您的.env
文件中使用以下设置
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,您可以使用带有tag-releases的自定义Gitea实例。
要使用它,请在您的.env
文件中使用以下设置
贡献
请参阅贡献指南。
许可协议
MIT许可协议(MIT)。有关更多信息,请参阅许可文件。