codedge / laravel-selfupdater
为您的自托管Laravel应用程序提供自动更新功能。
Requires
- php: ^8.1
- ext-json: *
- ext-zip: *
- guzzlehttp/guzzle: ^7.5.0
- illuminate/support: ^10 || ^11.0
- league/uri: ~6.7 || ~6.8 || ^7.4
- 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.1 || ^9.0
- phpunit/phpunit: ^9.5.26 || ^10.5
- dev-master
- 3.9.0
- 3.8.2
- 3.8.1
- 3.8.0
- 3.7.0
- 3.6.2
- 3.6.1
- 3.6.0
- 3.5.0
- 3.4.1
- 3.4
- 3.3
- 3.2.3
- 3.2.2
- 3.2.1
- 3.2
- 3.1.1
- 3.1
- 3.0.3
- 3.0.2
- 3.0.1
- 3.0
- 2.6.1
- 2.6.0
- 2.5.2
- 2.5.1
- 2.5.0
- 2.4.1
- 2.4.0
- 2.3.0
- 2.2.0
- 2.1.3
- 2.1.2
- 2.1.1
- 2.1.0
- 2.0.0
- 1.5.0
- 1.4.3
- 1.4.2
- 1.4.1
- 1.4.0
- 1.3.0
- 1.2.2
- 1.2.1
- 1.2.0
- 1.1.1
- 1.1
- 1.0
- dev-dependabot/composer/phpunit/phpunit-tw-10.5.10
- dev-dependabot/github_actions/codecov/codecov-action-4
- dev-dependabot/composer/orchestra/testbench-tw-8.21
- dev-dependabot/github_actions/actions/cache-4
- dev-dependabot/github_actions/shivammathur/setup-php-2.29.0
- dev-dependabot/composer/guzzlehttp/guzzle-tw-7.8.1
- dev-dependabot/composer/league/uri-tw-7.4.0
- dev-dependabot/composer/phpstan/phpstan-phpunit-tw-1.3
- dev-dependabot/composer/dg/bypass-finals-tw-1.5
- dev-dependabot/composer/mockery/mockery-tw-1.6
- dev-dependabot/composer/phpstan/extension-installer-tw-1.3
- dev-repo-maintenance
- dev-L8-support
This package is auto-updated.
Last update: 2024-08-31 10:58:59 UTC
README
此包提供了一些基本方法来实现您的Laravel应用程序的自更新功能。
支持的更新提供者
- GitHub
- Gitlab
- Gitea
- 基于HTTP的存档
通常在分发需要一些更新机制但不使用Composer的自托管Laravel应用程序时需要此功能。
安装
使用Composer从master安装最新版本
composer require codedge/laravel-selfupdater
配置
安装包后,您需要通过以下方式发布配置文件:
php artisan vendor:publish --provider="Codedge\Updater\UpdaterServiceProvider"
注意:如果您想将Github作为更新源,请在您的config/self-updater.php
文件中正确输入供应商和存储库名称。
设置当前安装的版本
在开始更新之前,请确保正确设置了安装的版本。您负责在配置文件中设置当前安装的版本,或者最好是使用env变量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. ] ] ] ]
配置下载路径
有时您的Web托管服务不允许将文件保存到服务器的/tmp
文件夹中。您可以通过设置env变量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) { // 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
文件中设置了正确的存储库。
基于标签的更新
这是默认设置。更新将通过使用标记提交,即发布来获取。
带有资产/包文件的基于标签的更新
如果您有基于 标签 的预包装发布版本,您可以在您的 config/self-update.php
文件中使用 'repository_types.github.package_file_name'
键,或者更新 .env
文件中的 SELF_UPDATER_PACKAGE_FILE_NAME
变量来指定要下载的资产名称。
如果文件名前缀为 regex:
,则包将尝试找到匹配给定正则表达式的最新资产。请注意,只能使用正则表达式,而不是 PHP 正则表达式的 /
前缀和后缀。例如,一个可接受的价值是 regex:.releaseV*\.zip
。这将匹配所有以 releaseV
开头并以 .zip
结尾的资产。
一个无效的值是 regex:/releaseV*\.zip/
。请注意 /
前缀和后缀。
// ... 'repository_types' => [ 'github' => [ 'type' => 'github', 'repository_vendor' => env('SELF_UPDATER_REPO_VENDOR', ''), 'repository_name' => env('SELF_UPDATER_REPO_NAME', ''), // ... 'package_file_name' => 'release.zip', // Package file name to download 'package_file_name' => 'regex:releaseV.*\.zip', // REGEX Package file name to download ], // ... ];
基于分支的更新
通过配置中的 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)。有关更多信息,请参阅许可证文件。