Обновление PromUC

Обновление установочных файлов

Обновление установочных файлов проводится посредством запуска скрипта upgrade.sh, который располагается в корневом каталоге дистрибутива, а также его можно скачать с адреса https://download.promuc.ru/upgrade.sh:

# cd /opt/promuc
# wget --no-check-certificate https://download.promuc.ru/upgrade.{sh,sh.sha256}
# shasum -c upgrade.sh.sha256
  upgrade.sh: OK

Краткую справку скрипта можно вызвать запустив с ключом -h:

# /opt/promuc/upgrade.sh -h
Скрипт обновления установки Promuc
Запуск: upgrade.sh -h | -d | [-r] -f <filename>

        -f <filename> - файл дистрибутива для обновления
        -d - скачать дистрибутив для обновления
        -r - восстановление из указанного файла
        -h - вызов этой справки

Для выполнения обновления скрипту необходимо передать путь и имя файла дистрибутива. Можно использовать как облегчённый вариант дистрибутива, так и полный. Например:

# ./upgrade.sh -f ../promuc-debian.tar.gz
или
# ./upgrade.sh -f /opt/promuc-full-debian.tar.gz

Если использовать опцию -d, то будет выполнено скачивание дистрибутива с сайта:

# ./upgrade.sh -d

  Внимание! данный скрипт заменит существующие установочные файлы в /opt/promuc и
  пересоздаст контейнеры PromUC.
  Будет создана резервная копия заменяемых файлов в /opt/promuc/install/.
  Для восстановления предыдущей версии используйте upgrade.sh -r -f <имя файла>.

  Скачиваем файл дистрибутива, без docker-образов (1) или полный (2): 1
  Файл дистрибутива будет сохранён в /opt/promuc-debian.tar.gz
  Обнаружен файл дистрибутива /opt/promuc-debian.tar.gz, будет переименован в
  /opt/promuc-debian.tar.gz.old

В ходе выполнения скрипта проводится сравнение версий установленного комплекса и дистрибутива, сравнение хэш-сумм установочных файлов. Если используется полный дистрибутив, то дополнительно будут сравнены файлы docker-образов сервисов. Перед заменой файлов будет произведено резервное копирование в файл ./install/upgrade_<Дата>.tar.gz:

Получаем дистрибутив c адреса https://download.promuc.ru/promuc-debian.tar.gz
######################################################################## 100.0%
Распаковываем дистрибутив в /tmp/upgrade
Исходный файл содержит версию v1.4, используемая версия v1.3.3

Будут заменены файлы:
upgrade.sh
version
doc/install.sh
framework/install.sh
gitea/install.sh
pgadmin/install.sh
portainer/install.sh
proxy/cert.sh
proxy/install.sh
rabbitmq/install.sh
ruleengine/install.sh
scada/docker-compose.yml
scada/install.sh
updater/install.sh

Резервные копии заменяемых файлов будут сохранены в
/opt/promuc/install/upgrade_221101122721.tar.gz
Для их восстановления используйте команду
/opt/promuc/upgrade.sh -r /opt/promuc/install/upgrade_221101122721.tar.gz

Внимание! Требуется пересоздание контейнеров сервисов, т.к. планируются изменения в
файлах сервисов или в docker-образах.
Продолжаем? (y/n):

Предупреждение

В случае необходимости обновления установочных файлов сервисов или их файлов docker-образов обязательно будет выполняться пересоздание контейнеров образов, это не затрагивает данные.

При обновлении docker-образов сервисов PromUC будет выполнено сравнение метки даты создания образа и в случае если загружаемый образ создан ранее используемого необходимо будет подтвердить замену. При отказе будет восстановлен ранее используемый образ:

Загружаем обновлённые docker-образы...

Обновляем docker-образ psm/promuc-scada
Уже имеется загруженный docker-образ psm/promuc-scada:latest c id a630502d9a86, проверяем даты создания...
The image psm/promuc-scada:latest already exists, renaming the old one with ID sha256:a630502d9a8634abbff2c200861cd071a102a1df34c0f5d77e7b576ebd5dd370 to empty string
Loaded image: psm/promuc-scada:latest
Внимание! В файле содержится образ psm/promuc-scada предыдущей версии.
Использовать его? (y/n): n
Образ a630502d9a86 восстановлен в psm/promuc-scada:latest
Файл docker-образа восстановлен в /opt/promuc/images/psm_promuc-scada.bz2

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

Восстановление установочных файлов

Для отката изменений, восстановления установочных файлов необходимо запустить скрипт upgrade.sh с ключами -r -f <filename>:

# ./upgrade.sh -f /opt/promuc/install/upgrade_221101123321.tar.gz -r
Будет выполнено восстановление файлов из резервной копии
/opt/promuc/install/upgrade_221101130531.tar.gz в /opt/promuc.

Контейнеры сервисов будут пересозданы.
Продолжаем? (y/n): y
Проверяем целостность архива...
Будут восстановлены файлы:
doc/install.sh
framework/install.sh
scada/install.sh
version
Будут восстановлены docker-образы:
images/psm_ruleengine-transport.bz2
images/psm_promuc-doc.bz2
Продолжаем? (y/n):

Примечание

При восстановлении резервное копирование не выполняется.

Обновление сервисов

Обновление сервисов проводится посредством запуска скрипта update.sh с указанием конкретного сервиса (папка сервиса). Например:

# ./update.sh framework
Получаем файл с psm/promuc_framework:latest
Получаем psm/promuc_framework:latest с сайта https://download.protei-sm.ru
########################################################################################## 100.0%
Импортируем образ psm/promuc_framework:latest в docker...
Loaded image: psm/promuc_framework:latest
Рестартуем сервис framework
Выполнение docker compose  up -d  для framework...OK

Скрипт получает docker-образ с сайта https://download.protei-sm.ru посредством скрипта getimages.sh, сохраняет в папку images и пересоздаёт контейнер сервиса с новым образом.

Примечание

Если полученный с сайта образ соответствует уже загруженному в docker, то контейнер не пересоздаётся.

Обновление docker-образов

В случае необходимости проведения самостоятельного или поэтапного обновления возможно получение отдельного обновлённого docker-образа сервиса с сайта https://download.protei-sm.ru или иного указанного в переменной PROMUC_DOWNLOAD_URL в корневом файле .env. В этом случае полученный файл docker-образа сохраняется с заменой существующего файла в папке images и подгружается в docker, контейнер сервиса при этой операции не пересоздаётся.

Версия docker-образа сервиса указывается посредством переменной _TAG в файле .env каталога сервиса.

Для получения образа необходимо запустить скрипт getimages.sh с указанием наименования docker-образа, нескольких образов (разделяя пробелом) или без указания для получения образов всех сервисов. Например:

root@vpn1:/opt/services# ./getimage.sh -p psm/promuc_framework:latest

Получаем образ psm/promuc-framework:latest
  % Total    % Received % Xferd  Average Speed   Time    Time     Time  Current
                                Dload  Upload   Total   Spent    Left  Speed
100 39.4M  100 39.4M    0     0  88.9M      0 --:--:-- --:--:-- --:--:-- 88.7M
Loaded image: psm/promuc-framework:latest

Примечание

Флаг -p включает принудительную загрузку файла docker-образа с сайта независимо от наличия в папке images.

Используемые docker-образы

Сервис

Файл docker-образа

proxy

traefik:v2.11.13

postgres

timescale/timescaledb-ha:pg14.10-ts2.12.2-all

redis

redis:7.2

rabbitmq

rabbitmq:3.13-management

framework

psm/promuc_framework:latest

gitea

psm/gitea:latest

ruleengine

psm/promuc_flow:latest, psm/ruleengine:latest, psm/ruleengine-transport:latest

updater

psm/updater:latest

Порядок проверки состояния сервисов

Чтобы проверить состояние сервисов можно воспользоваться стандартными командами docker или скриптом do.sh:

# ./do.sh framework ps
Выполнение docker compose  ps  для framework...
NAME        IMAGE                         COMMAND                  SERVICE     CREATED          STATUS          PORTS
framework   psm/promuc_framework:latest   "/usr/sbin/lighttpd …"   framework   56 minutes ago   Up 56 minutes   80/tcp, 9595-9599/tcp