Обновление Userside

Это не инструкция по обновлению обычной версии userside на мою версию. Это инструкция по обновлению моей предыдущей версии на мою более новую версию. Если вы ищите инструкцию по переносу userside с обычной версии на мою, то она здесь.

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

Не выполняйте обновление или какую-то часть из этих команд, если у вас нет доступа к реестру контейнеров!

Обновление в пределах версии

Для обновления в пределах версии, например, с 3.18.19 на 3.18.39, выполните следующие пункты.

  1. Перейти в каталог с набором контейнеров

    cd /opt/userside
    
  2. Остановить набор контейнеров

    docker compose stop
    
  3. Изменить версию образа для сервиса userside, указанною после двоеточия, в файле docker-compose.yaml. Например, с версии 3.18.19 на версию 3.18.39 и версию образа для сервиса poller на 3.18.22.

    services:
      userside:
        image: uscr.duckdns.org/userside/userside:3.18.39
    
      poller:
        image: erpuserside/usm_poller:3.18.22
    

    Актуальные номера версий всегда можно посмотреть в файле-примере docker-compose.yaml из архива с примерами.

  4. Обновить образы и запустить набор контейнеров (с обновлением устаревших образов)

    docker compose pull
    docker compose up -d
    
  5. Дождаться завершения миграций и других инсталляционных скриптов. Можно (не обязательно) наблюдать за выполнением:

    docker compose logs --no-log-prefix -f userside
    

    Выход Ctrl + C.

  6. Готово.

Обновление на новую версию

Для обновления между версиями, например, с 3.17.39 на 3.18.39, выполните следующие пункты.

Обновление с 3.17 на 3.18

  1. Перейти в каталог с набором контейнеров

    cd /opt/userside
    
  2. Обязательно сделать резервную копию базы данных

    docker compose exec userside backup
    

    Запомните имя файла резервной копии — оно будет отображено сразу после запуска команды. Это имя пригодится в п.10.

  3. Остановить и удалить текущий набор контейнеров

    docker compose down -v
    
  4. Сделать резервную копию файлов docker-compose.yml и .env. Если выполнялся тюнинг PostgreSQL, то скопировать также файл postgresql.conf (если параметры настраивались в нём) или файл postgresql.auto.conf (если тюнинг производился командами ALTER SYSTEM). Эти файлы понадобятся на всякий случай, если придется откатывать систему. После успешного обновления их можно будет удалить.

    sudo mkdir before_update
    sudo cp docker-compose.yaml before_update/
    sudo cp .env before_update/
    sudo cp ./data/database/postgresql.conf before_update/
    sudo cp ./data/database/postgresql.auto.conf before_update/
    
  5. Скачать архив с примерами конфигов, разархивировать его. Эти файлы являются образцами и могут быть полезны позже. Копировать файлы из config-examples не нужно. Используйте свои прежние файлы.

    sudo curl http://uscr.duckdns.org/config.tgz -o config.tgz
    sudo tar xzf config.tgz
    
  6. Отредактировать файл .env

    sudo nano .env
    

    Добавить в конец файла следующие две переменные. Пропишите пароль websocket (можно изменить также и имя, по желанию). Если вы их не помните — не страшно, придумайте новые:

    RABBITMQ_WEBSTOMP_USER=userside-stomp
    RABBITMQ_WEBSTOMP_PASS=укажите_пароль_websocket
    

    По набору переменных файл должен соответствовать примеру: config-examples/.env. Сравните их.

  7. Отредактировать файл docker-compose.yaml. Замените названия образов (image) для следующих четырех служб на указанные:

    services:
      userside:
        image: uscr.duckdns.org/userside/userside:3.18.39
    
      postgres:
        image: erpuserside/userside:3.18-postgres
    
      rabbitmq:
        image: erpuserside/userside:3.18-rabbitmq
    
      poller:
        image: erpuserside/usm_poller:3.18.22
    

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

    Формат YAML чувствителен к форматированию. Следите за отступами.

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

    Версия usm_poller должна быть совместима с версией userside. Документация userside.

    Если вы используете реверсивный прокси-сервер (на базе Nginx), то убедитесь, чтобы для сервиса rabbitmq были раскомментированны следующие строки:

    services:
      rabbitmq:
        ports:
          - 127.0.0.1:15674:15674
    

    Никаких других изменений делать не нужно. Вы можете сверяться с примером из config-examples/docker-compose.yaml.

  8. Пересоздать каталог с базой данных:

    sudo rm -rf ./data/database
    sudo mkdir -p ./data/database
    
  9. Запустить только сервис postgres:

    docker compose up -d postgres
    

    И дождаться его готовности (состояния healthy) периодически просматривая состояние командой:

    docker compose ps postgres
    
  10. Выполнить восстановление базы данных из резервной копии, сделанной в п.2:

    gunzip < ./data/backup/userside_3.17.39_....sql.gz \
      | docker compose exec -T postgres psql -U userside
    

    В ходе восстановления следить за выводом. Восстановление должно пройти без ошибок. Если есть ошибки — дальнейшие действия не выполняйте и напишите мне в телеграм.

  11. Если вы выполняли тюнинг PostgreSQL.

    Если вы изменяли переменные непосредственно в postgresql.conf, то перенесите их из файла before_update/postgresql.conf в новый файл data/database/postgresql.conf. Если для тюнинга вы использовали команды ALTER SYSTEM, то просто скопируйте файл before_update/postgresql.auto.conf в каталог data/database. Но, так как версии PostgreSQL отличаются, лучше будет произвести тюнинг заново.

    Чтобы выплонить настройки заново, обратитесь к статье по тюнингу PostgreSQL. Образ erpuserside/userside:3.18-postgres основан на 15 версии PostgreSQL.

    Так как на данном этапе активен только PostgreSQL (остальные контейнеры остановлены) то для внесения изменений в настройки системы путем выполнения команд ALTER SYSTEM вам нужно подключиться к базе данных используя утилиту psql контейнера postgres:

    docker compose exec postgres psql -U userside
    

    Выполните все необходимые команды ALTER SYSTEM и завериште работу утилиты введя \q (или нажав Ctrl + D).

    После выполнения настроек остановите контейнер с postgres:

    docker compose stop postgres
    
  12. Запустить набор контейнеров:

    docker compose up -d
    

    Наблюдать за ходом можно командой (выход Ctrl + C). Служба RabbitMQ может запускаться достаточно долго (около минуты) — это нормально:

    docker compose logs --no-log-prefix -f userside
    

    Журнал миграций записывается в файл data/var/log/migrations.log, так что можно следить за этим файлом:

    tail -f data/var/log/migrations.log
    
  13. Больше никаких действий не требуется. Только дождаться окончания запуска (или окончания миграций). После запуска проверьте работу всех разделов системы. Если обновление прошло успешно, можно удалить каталог before_update, созданный в п.4

    sudo rm -rf before_update