codedge/laravel-selfupdater

为您的自托管Laravel应用程序提供自动更新功能。

3.9.0 2024-06-28 13:29 UTC

README

Latest Stable Version Total Downloads StyleCI Codacy Badge codecov

此包提供了一些基本方法来实现您的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_NAMESELF_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.zipwebapp-v1.3.5.zip 时,格式应该是 webapp-v_VERSION_。其中 _VERSION_ 部分用于语义版本控制变量 MAJOR.MINOR.PATCH。zip 扩展名会自动添加。

目标归档文件必须是 zip 归档,并且应包含所有根目录文件,而不是包含在以归档本身命名的额外文件夹中。

使用 Gitea

使用 Gitea,您可以使用带有标签发布的自己的 Gitea 实例。

要使用它,请在您的 .env 文件中使用以下设置

贡献

请参阅贡献指南

许可证

MIT 许可证 (MIT)。有关更多信息,请参阅许可证文件