javadle / updater
Updater allows your Laravel application to auto-update itself.
Requires
- php: ^8.1
- illuminate/support: ^10.0
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')
ТЕСТ: опубликуйте обновление и обновите страницу, чтобы показать оповещение.