pcinaglia / laraupdater

LaraUpdater 允许您的 Laravel 应用程序自动更新自身。

1.0.3.4 2023-02-04 13:18 UTC

This package is auto-updated.

Last update: 2024-09-07 11:56:42 UTC


README

LaraUpdater 允许您的 Laravel 应用程序自动更新自身 ! ;)

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

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

没有 LaraUpdate => 您想一个接一个地联系他们并使用电子邮件或链接发送更新吗? ...mmm...非常糟糕,因为每个用户(具有管理员角色)都必须手动覆盖其部署中的所有文件;或者,您必须手动访问所有部署(例如使用 FTP)并为它们安装更新。

使用 LaraUpdater => 让您的应用程序(独自)检测到新更新并通知管理员;此外,让您的应用程序安装它并处理所有相关步骤。

新版本变更日志

  • 现在可以从 artisan 命令运行
  • 现在支持 Laravel 8 和 9;
  • 基于 Bootstrap 5 的新视图;
  • 错误修复。

3-2023

  • 支持 Laravel 10
  • 支持 ^php 8.0
  • 中断:将 main() 函数移动到 upgrade.php 中,并使用 beforeUpdate() 和 afterUpdate() 函数

功能

> 自更新

LaraUpdater 允许您的 Laravel 应用程序进行自更新 :) 让您的应用程序(独自)检测到新更新并通知管理员;此外,让您的应用程序安装它并处理所有相关步骤。

> 维护模式

LaraUpdate 从更新开始直到成功完成,使用 Laravel 原生命令激活维护模式。

> 安全性

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

> 容错

在更新过程中,LaraUpdate 会备份所有被覆盖的文件,如果在发生错误时可以尝试自动恢复到先前状态。如果恢复失败,您可以使用存储在系统根目录中的备份进行手动维护。

> 支持 PHP 脚本

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

> 集成备份/恢复

> 多语言

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

入门

以下说明将在您的服务器上运行项目的副本,以便进行开发和测试。

先决条件

LaraUpdater 已使用 Laravel 8/9 推荐的 Laravel 版本 >= 8 进行测试

安装

此软件包可以通过 Composer 安装

composer require pcinaglia/laraupdater

安装后,您必须执行以下步骤

1) 在 config/app.php 文件中添加服务提供者

'providers' => [
    // ...
    pcinaglia\laraupdater\LaraUpdaterServiceProvider::class,
];

2) 在您的应用程序中发布 LaraUpdater

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

php artisan vendor:publish --provider="pcinaglia\laraupdater\LaraUpdaterServiceProvider"

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

    /*
    * Temporary folder to store update before to install it.
    */
    'tmp_folder_name' => 'tmp',

    /*
    * Script's filename called during the update.
    */
    'script_filename' => 'upgrade.php',

    /*
    * URL where your updates are stored ( e.g. for a folder named 'updates', under http://site.com/yourapp ).
    */
    'update_baseurl' => 'https://:8888/update',

    /*
    * Set a middleware for the route: updater.update
    * Only 'auth' NOT works (manage security using 'allow_users_id' configuration)
    */
    'middleware' => ['web', 'auth'],

    /*
    * Set which users can perform an update;
    * This parameter accepts: ARRAY(user_id) ,or FALSE => for example: [1]  OR  [1,3,0]  OR  false
    * Generally, ADMIN have user_id=1; set FALSE to disable this check (not recommended)
    */
    'allow_users_id' => [1]

3) 创建 version.txt

为了存储应用程序的当前版本,您必须创建一个名为 version.txt 的文本文件并将其复制到 Laravel 应用程序的主文件夹中。例如,创建一个只包含

1.0

仅使用 .txt 文件的第 1 行。当发布更新时,此文件将由 LaraUpdate 更新。

创建您的更新“仓库”

1) 创建存档

创建一个.zip存档,包含您希望在更新期间替换的所有文件(使用您应用程序的相同结构来组织存档中的文件)。

1.1) 升级脚本(可选)

您可以创建一个名为upgrade.php的PHP文件来执行自定义操作(例如,在数据库中创建新表)。此文件必须包含名为beforeUpdate()afterUpdate()的函数,并返回布尔值(以便将执行状态传递给LaraUpdater),请参阅此示例

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

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

{
  "version": "1.0.2",
  "archive": "RELEASE-1.02.zip",
  "description": "Minor bugs fix"
}

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

3) 上传您的更新

laraupdater.json和.zip存档上传到您的服务器同一文件夹中(将托管更新的文件夹)。

4) 配置您的应用程序

config/laraupdater.php中设置将托管更新的服务器(参见安装)

例如,如果您上传的文件在

http://yoursites.com/updatesformyapp/RELEASE-1.02.zip
and http://yoursites.com/updatesformyapp/laraupdater.json

'update_baseurl'设置为以下内容:'update_baseurl' => 'http://yoursites.com/updatesformyapp',

用法

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

updater.check, laraupdater:check

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

updater.currentVersion, laraupdater:current-version

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

updater.update, laraupdater:update

它下载并安装最新更新。此Web路由使用config/laraupdater.php中的'allow_users_id'下的信息进行保护

建议不要直接使用这些路由,而是当有更新可用时显示一个警告;警告可以包含一个按钮来执行更新,请参阅以下解决方案

使用Bootstrap 5和JQuery(包含)的弹出通知

alt text

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

@include('vendor.laraupdater.notification')

测试:发布一个更新并刷新页面以显示警告 :-)

作者

贡献者

  • Aura Komputer - 使用GitHub联系

许可

本项目采用MIT许可证 - 请参阅LICENSE文件以获取详细信息。

(MIT许可证 - 保证信息) 本软件按“原样”提供,不提供任何明示或暗示的保证,包括但不限于适销性、适用于特定目的和不侵犯版权的保证。在任何情况下,作者或版权所有者均不对任何索赔、损害或其他责任负责,无论此类责任基于合同、侵权或其他法律行为,无论此类责任源自、因之产生或与软件或其使用或其他交易有关。