javadle/updater

Updater 允许您的 Laravel 应用程序自动更新自己。

1.0.4 2023-08-21 20:23 UTC

This package is auto-updated.

Last update: 2024-09-21 22:35:23 UTC


README

Updater 允许您的 Laravel 应用程序自动更新!

当您发布应用程序时,非常重要的一点是要维护它;因此,可能需要发布更新以修复错误,以及实现新功能。

您将应用程序部署给多个用户

功能

> 自动更新

当检测到服务器上的新版本时,您将看到一个通知,显示系统可用的新更新。

> 维护模式

更新将在更新启动时激活维护模式(使用 Laravel 的自命令),直到更新成功完成。

> 安全性

您可以选择哪些用户(例如,仅管理员)可以执行应用程序的更新;此参数存储在 config/updater.php 中,因此每个应用程序都可以独立设置其用户。此外,Updater 与 Laravel-Auth 兼容。

> 可靠性

在更新过程中,Update 将创建所有可覆盖文件的备份,因此如果发生错误,将尝试自动恢复先前状态。如果恢复失败,您可以使用存储在系统根目录中的备份手动维护。

> 支持PHP脚本

Update 可以导入PHP脚本来执行用户自定义操作(例如,在更新后创建数据库中的新表);命令在更新的最后一步执行。

> 集成备份/恢复

> 多语言

> 通过Web界面或控制台访问

开始

以下说明将帮助您在服务器上启动项目副本以进行开发和测试。

先决条件

Updater 已与 Laravel 9/10 进行测试。建议的 Laravel 版本 >= 8

安装

此软件包可以通过 Composer 安装。

composer require javadle/updater

安装后,请执行以下操作

1) 在 config/app.php 中添加您的服务提供者以下内容

'providers' => [
    // ...
    pcinaglia\updater\UpdaterServiceProvider::class,
];

2) 发布包资产

此步骤将配置文件复制到您的 Laravel 应用程序配置文件夹。

php artisan vendor:publish --provider="javadle\updater\UpdaterServiceProvider"

发布后,您可以通过 config/updater.php 文件管理 Updater 的配置,它包含

    /*
    * Временная папка для хранения обновлений перед их установкой.
    */
    'tmp_folder_name' => 'tmp',

    /*
    * Имя файла скрипта, вызываемого при обновлении.
    */
    'script_filename' => 'upgrade.php',

    /*
    * URL-адрес, где хранятся ваши обновления (например, для папки с именем «обновления» по адресу https://site.com/yourapp).
    */
    'update_baseurl' => 'https://:8888/update',

    /*
     * Установите промежуточное ПО для маршрута: updater.update
     * НЕ работает только 'auth' (управление безопасностью с помощью конфигурации 'allow_users_id')
     */
    'middleware' => ['web', 'auth'],

    /*
     * Установите, какие пользователи могут выполнять обновление;
     * Этот параметр принимает: ARRAY(user_id) или FALSE => например: [1] OR [1,3,0] OR false
     * Как правило, у ADMIN user_id=1; установите FALSE, чтобы отключить эту проверку (не рекомендуется)
     */
    'allow_users_id' => [1],
    
    /*
    * Установите, какие пользователи будут видеть изменения при обновлении;
    * Этот параметр принимает: ARRAY()
    * Как правило, ADMIN имеет почту admin@admin.com;
    */
    'show_change_log_for_users' => [
        'admin@admin.az',
        'admin@admin.ru',
        'admin@admin.com'
    ],
    
    /*
    * Установите, будет ли добавлен jquery на страницу
    * Если у вас уже подключена jquery то оставьте в режиме false
    */
    'enable_jquery' => false,

    /*
    * Установите, будет ли добавлен sweetalert2 на страницу
    * Если у вас уже подключена sweetalert2 то оставьте в режиме false
    */
    'enable_sweet_alert2' => false

3) 创建 version.txt

为了保存您应用程序的当前版本,您需要创建一个名为 version.txt 的文本文件并将其复制到您的 Laravel 应用程序主目录。例如,创建一个只包含以下内容的 .txt 文件:

1.0

请确保只使用文件中的第一行。在发布更新时,这些文件将从 Updater 更新。

创建您的“更新仓库”

1) 创建存档

创建一个ZIP存档,包含您想要在更新期间替换的所有文件(使用与您的应用程序相同的结构来整理存档中的文件)。

1.1) 更新脚本(可选)

您可以为执行用户自定义操作(例如,在数据库中创建新表)创建一个名为 upgrade.php 的PHP文件。此文件应包含名为 beforeUpdate()afterUpdate() 的函数,这些函数返回布尔值(以便将执行状态传递给 Updater),例如以下示例

<?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) 设置更新元数据

创建一个名为 updater.json 的文件,如下所示

{
  "version": "1.0.1",
  "archive": "RELEASE-1.01.zip",
  "description": "Added Blogs"
}

archive 包含存档的 .zip 名称(参见步骤 1)。

3) 上传您的更新

updater.json 和 .zip 文件夹上传到您的服务器上的同一文件夹(即将放置更新的文件夹)。

4) 配置您的应用程序

config/updater.php 中指定更新放置的服务器(参见安装)

例如,如果您将文件上传到

 http://yoursites.com/updatesformyapp/RELEASE-1.02.zip
 и http://yoursites.com/updatesformyapp/updater.json.

设置 'update_baseurl' 如下: 'update_baseurl' => 'http://yoursites.com/updatesformyapp',

使用方法

Updater 实现了三个主要方法,您可以通过 Web 路由或 artisan 命令调用这些方法

updater.check, updater:check

返回 ''(更新不存在)或 $version(例如,如果存在更新,则为 1.0.1)。

updater.currentVersion, updater:current-version

返回您的应用程序的当前版本(从 version.txt 中获取)。

updater.update, updater:update

它将下载并安装最新的更新。此 Web 路由受 config/updater.php 中的 'allow_users_id' 信息保护

我建议不要直接使用这些路由,但显示更新可用的通知;通知可以包含执行更新的按钮,请参阅下面的解决方案

使用 Bootstrap 5 和 JQuery(内置)的弹出窗口通知

(readme 文件夹/preview 1.png “带更新按钮的通知”)

将以下代码添加到 resources/view/layout/app.blade.php 中,以加载 Updater 中包含的视图(我建议在 @yield('content') 前面立即添加)

@include('vendor.updater.notification')

测试:发布更新并更新页面以显示通知。