javadle/updater

Updater allows your Laravel application to auto-update itself.

1.0.4 2023-08-21 20:23 UTC

This package is auto-updated.

Last update: 2024-04-21 21:41:48 UTC


README

Updater позволяет вашему приложению Laravel автоматически обновляться!

Когда вы выпускаете приложение, очень важно поддерживать его; поэтому может быть необходимо опубликовать обновление для исправления ошибок, а также для реализации новых функций.

Вы развертываете свое приложение для нескольких пользователей:

Функции:

> Самостоятельное обновление

При замечании новой версии с сервера вам показывается уведомление с доступным новым обновлением для системы

> Режим обслуживания

Update активирует режим обслуживания (используя собственную команду Laravel) с момента запуска обновления до его успешного завершения.

> Безопасность

Вы можете указать, какие пользователи (например, только администратор) могут выполнять обновление для приложения; этот параметр хранится в config/updater.php, поэтому каждое приложение может устанавливать своих пользователей независимо. Кроме того, Updater совместим с Laravel-Auth.

> Отказоустойчивый

Во время обновления Update СОЗДАЕТ РЕЗЕРВНЫЕ КОПИИ всех перезаписываемых файлов, поэтому в случае ошибки может попытаться автоматически восстановить предыдущее состояние. Если восстановление не удалось, вы можете использовать резервную копию, хранящуюся в корне вашей системы, для ручного обслуживания.

> Поддерживает скрипт PHP

Update может импортировать скрипт PHP для выполнения пользовательских действий (например, создать таблицу в базе данных после обновления); команды выполняются на последнем шаге обновления.

> Интегрированное резервное копирование/восстановление

> Многоязычный

> Доступ из веб-интерфейса или консоли

Начиная

Эти инструкции помогут вам запустить копию проекта на вашем сервере для целей разработки и тестирования.

Prerequisites

Updater был протестирован с использованием Laravel 9/10 Рекомендуемая версия Laravel >= 8

Installing

Этот пакет можно установить через Composer:

composer require javadle/updater

После установки необходимо выполнить следующие действия:

1) Добавьте в свой сервис провайдер в config/app.php следующее:

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

2) Публикация активов пакета

Этот шаг скопирует файл конфигурации в папку конфигурации вашего приложения Laravel.

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

Когда он будет опубликован, вы сможете управлять конфигурацией Updater через файл в config/updater.php, он содержит:

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

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

    /*
    * URL-адрес, где хранятся ваши обновления (например, для папки с именем «обновления» по адресу https://site.com/yourapp).
    */
    'update_baseurl' => 'http://localhost: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

Используйте только 1 строку, первую, в файле .txt. При выпуске обновления эти файлы обновляются из Updater.

Создайте свой «репозиторий» обновлений

1) Создать архив

Создайте ZIP-архив со всеми файлами, которые вы хотите заменить во время обновления (используйте ту же структуру вашего приложения, чтобы упорядочить файлы в архиве).

1.1) Сценарий обновления (необязательно)

Вы можете создать файл PHP с именем upgrade.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 реализует три основных метода, которые вы можете вызвать с помощью веб-маршрутов или команды artisan:

updater.check, updater:check

Возвращает '' (обновление не существует) ИЛИ $version (например, 1.0.1, если обновление существует).

updater.currentVersion, updater:current-version

Возвращает текущую версию вашего приложения (из version.txt).

updater.update, updater:update

Он загружает и устанавливает последнее доступное обновление. Этот веб-маршрут защищен с помощью информации из 'allow_users_id' в config/updater.php

Я предлагаю не использовать эти маршруты напрямую, НО показывать оповещение, когда доступно обновление; Предупреждение может содержать кнопку для выполнения обновления, см. решение ниже:

Всплывающее окно с уведомлением с использованием Bootstrap 5 и JQuery (в комплекте)

(readme files/preview 1.png «Предупреждение с кнопкой обновления»)

Добавьте в resources/view/layout/app.blade.php этот код, чтобы загрузить представление, включенное в Updater (я предлагаю сразу перед @yield('content')):

@include('vendor.updater.notification')

ТЕСТ: опубликуйте обновление и обновите страницу, чтобы показать оповещение.