Обновление Test IT в Docker Compose

Внимание!

Перед обновлением Test IT до версии 4.3 и выше убедитесь, что дата и время в установках сервера синхронизированы с датой и временем в установках внешней базы данных! Несовпадение даты и времени может привести к нарушениям работы лицензии.

Если в .env и .yml файлах используются пользовательские значения переменных, перенесите их в файлы .env и .yml новой версии Test IT. Все значения в файлах .env и .yml новых версий Test IT заменяются на значения по умолчанию при обновлении.

Подготовка к обновлению до версии 4.2

Перед началом работы

Важно

Обновление до версии 4.2 осуществляется с версии 4.0.1 и выше.

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

  • Создайте резервную копию установленной системы (рекомендуется). Файлы docker-compose.yml и backup.sh находятся в одной директории. Чтобы перенести информацию из вольюмов со старой версии на новую, имена проектов в обеих версиях должны совпадать. В наших примерах проект называется prod.
  • Убедитесь, что на компьютере с установленным продуктом достаточно места для создания файла дампа БД Postgres.
  • Убедитесь, что у вас есть возможность исполнять команды от лица пользователя root.
  • Если вы используете внешнее объектное хранилище MiniO и/или внешнюю СУБД Postgres, а не сервисы из поставляемого docker-compose.yml, пропустите соответствующие разделы настоящей инструкции.

Миграция бакетов MiniO

Начиная с версии 4.2 MiniO Gateway не поддерживается. Поэтому перед обновлением необходимо выполнить миграцию бакетов MiniO и их метаданных.

  1. Из архива поставки Test IT версии 4.2 скопируйте файлы docker-compose.minio-migrate.yml, minio-migrate.sh, move-minio-migrated-volumes.sh из папки scripts в папку с установочными файлами, с помощью которых была развернута текущая версия Test IT. Файлы должны находиться в той же директории, что и файл docker-compose.yml.

Важно

Если вы работаете в режиме оффлайн, в папке с файлами поставки 4.2 также выполните команду для загрузки образов MiniO, необходимых для миграции: docker load -i images.tar.gz.

  1. Перейдите в директорию с установочными файлами, с помощью которых была развернута текущая версия Test IT и остановите контейнеры продукта. Используйте команду:
    docker compose -f docker-compose.yml -p {{project_name}} stop
    
    Здесь и далее {{project_name}} — имя проекта, с которым вы запускали Test IT (префикс всех контейнеров), например prod.
  2. Добавьте разрешение на исполнение скриптов:
    chmod +x ./move-minio-migrated-volumes.sh ./minio-migrate.sh
    
  3. Запустите контейнеры MiniO текущей версии продукта и контейнеры MiniO для миграции:
    docker compose -f docker-compose.yml -f docker-compose.minio-migrate.yml -p {{project_name}} up -d minio avatars.minio new-minio new-avatars-minio mc-minio
    
    В контейнере {{project_name}}_minio-mc_1 будет запущен миграционный скрипт.
  4. Задайте команду чтения логов контейнера:
    docker logs -f {{project_name}}-mc-minio_1
    

    Важно

    • В зависимости от объема данных в бакетах, процесс может занять некоторое время.
    Убедитесь, что миграция прошла успешно. При успешной миграции по окончании работы скрипта отобразится строка:
    Done!
    
    В случае ошибки миграции отобразится строка:
    <bucket_name> bucket migration failed!
    
    В случае ошибки миграции устраните проблему самостоятельно или свяжитесь с технической поддержкой (support@yoonion.ru). Пример логов с успешным выполнением миграции:
    <...>
    1/1 buckets were imported successfully.
    mc: IAM info successfully downloaded as SOURCE-iam-info.zip
    mc: IAM info imported to TARGET from SOURCE-iam-info.zip
    avatars/ bucket migrated successfully!
    Source files count: 4
    Transferred files count: 4
    Done!
    
  5. После успешной миграции, завершите процесс вывода логов, остановите контейнеры продукта и MiniO:
    docker compose -f docker-compose.yml -f docker-compose.minio-migrate.yml -p {{project_name}} down
    
  6. Перенесите вольюмы с мигрированными бакетами в оригинальные вольюмы. Используйте команду (для успешного выполнения команды требуются права root):
    sudo -s
    ./move-minio-migrated-volumes.sh {{project_name}}
    exit
    
    По окончании миграции вы можете перейти к процессу миграции баз СУБД Postgres.

Миграция СУБД Postgres

Начиная с версии 4.2 в качестве основной системы управления базами данных (СУБД) используется Postgres 14. В процессе обновления необходимо выполнить дамп ваших баз данных (БД) с предыдущей версии Test IT и их восстановление в новой версии. В течение дампа и восстановления баз данных продукт будет недоступен.

Важно

БД backgrounddb появляется в версии 4.1. Если вы обновляете систему с версии ниже, чем 4.1, действия с базой и сервисом backgrounddb, приведенные в настоящей инструкции, выполнять не нужно.

  1. Перейдите в директорию с установочными файлами, с помощью которых была развернута текущая версия Test IT.
  2. Остановите контейнеры продукта, используя .yml файл, из которого он был запущен. Используйте команду:
    docker compose -f docker-compose.yml -p {{project_name}} down
    
    Здесь и далее {{project_name}} — имя проекта, с которым вы запускали Test IT (префикс всех контейнеров), например prod.
  3. Запустите сервисы Postgres (db, authdb, avatars.db, backgrounddb):
    docker compose -f docker-compose.yml -p {{project_name}} up -d db authdb avatars.db backgrounddb
    
  4. Если в .env-файле для баз установлены кастомные пользователи и пароли, укажите соответствующие значения в командах ниже, а также укажите директорию для сохранения файлов дампа . Выполните команды, чтобы осуществить дамп БД каждого сервиса:
    docker exec -i {{project_name}}-db-1 /bin/sh -c "PGPASSWORD=F1rstL0g0N! pg_dump -Fc -v --clean --if-exists -h localhost -U postgres testitdb" > {{dump_path}}/dump_db
    docker exec -i {{project_name}}-authdb-1 /bin/sh -c "PGPASSWORD=F1rstL0g0N! pg_dump -Fc -v --clean --if-exists -h localhost -U postgres authdb" > {{dump_path}}/dump_authdb
    docker exec -i {{project_name}}-avatars.db-1 /bin/sh -c "PGPASSWORD=F1rstL0g0N! pg_dump -Fc -v --clean --if-exists -h localhost -U postgres avatarsdb" > {{dump_path}}/dump_avatars.db
    docker exec -i {{project_name}}-backgrounddb-1 /bin/sh -c "PGPASSWORD=F1rstL0g0N! pg_dump -Fc -v --clean --if-exists -h localhost -U postgres backgrounddb" > {{dump_path}}/dump_backgrounddb
    

    Важно

    В ряде случаев, процессы дампа и восстановления БД могут быть значительно ускорены. Для этого запустите команды дампа и восстановления в многопоточном режиме с помощью опции -j и указанием количества потоков. Корректное использование опции зависит от конфигурации ваших ЦПУ и диска. Дополнительную информацию по этой и другим опциям команд pg_dump и pg_restore вы можете найти на странице официального руководства Postgres (англ.):

  5. Остановите контейнеры:
    docker compose -f docker-compose.yml -p {{project_name}} down
    
  6. Удалите вольюмы сервисов Postgres:
    docker volume rm {{project_name}}_db-volume
    docker volume rm {{project_name}}_authdb-volume
    docker volume rm {{project_name}}_avatars.db-volume
    docker volume rm {{project_name}}_backgrounddb-volume
    
  7. Если в .env и .yml файлах старой версии используются пользовательские значения переменных, перенесите их в соответствующие файлы новой версии.
  8. Перейдите в директорию с новой версией поставки Test IT и запустите сервисы Postgres:
    docker compose -f docker-compose.yml -p {{project_name}} up -d db authdb avatars.db backgrounddb
    
  9. Выполните восстановление БД каждого сервиса, используя имя пользователя и пароли из .env-файла:
    docker exec -i {{project_name}}-db-1 /bin/sh -c "PGPASSWORD=F1rstL0g0N! pg_restore -Fc -v --clean --if-exists -h localhost -U postgres -d testitdb" < {{dump_path}}/dump_db
    docker exec -i {{project_name}}-authdb-1 /bin/sh -c "PGPASSWORD=F1rstL0g0N! pg_restore -Fc -v --clean --if-exists -h localhost -U postgres -d authdb" < {{dump_path}}/dump_authdb
    docker exec -i {{project_name}}-avatars.db-1 /bin/sh -c "PGPASSWORD=F1rstL0g0N! pg_restore -Fc -v --clean --if-exists -h localhost -U postgres -d avatarsdb" < {{dump_path}}/dump_avatars.db
    docker exec -i {{project_name}}-backgrounddb-1 /bin/sh -c "PGPASSWORD=F1rstL0g0N! pg_restore -Fc -v --clean --if-exists -h localhost -U postgres -d backgrounddb" < {{dump_path}}/dump_backgrounddb
    
  10. По окончании восстановления запустите остальные контейнеры продукта Test IT:
    docker compose -f docker-compose.yml -p {{project_name}} up -d
    

Подготовка к обновлению до версии 4.0.1

Начиная с версии 4.0.1 в конфигурации docker compose была изменена сеть по умолчанию с testit_network на yoonion_network. Чтобы применить данные изменения необходимо выполнить следующие команды.

Важно

Если вы обновляете продукт с версии ниже 4.0.0, перед обновлением выполните указания из раздела Подготовка к обновлению до версии 4.0

  1. Создайте сеть yoonion_network:

    docker network create yoonion_network
    
  2. При применении обновления укажите ключ --remove-orphans, чтобы контейнеры системы пересоздались в новой сети:

    docker compose -f docker-compose.yml --project-name  {{project_name}} up --detach --timeout 120 --remove-orphans
    

Важно

В файле .env начиная с версии 4.0.1 была добавлена переменная COMPOSE_NETWORK_NAME, определяющая название сети, в которой будут запущены контейнеры. Ее значение по умолчанию yoonion_network.

Подготовка к обновлению до версии 4.0

В целях повышения безопасности в версии 4.0 процессы в контейнерах запускаются от имени пользователя uid=611(testit). Чтобы избежать некорректной работы контейнеров webapi и rabbitmqconsumer, при обновлении необходимо запустить скрипт, мигрирующий права в вольюмах контейнеров.

Осторожно

При обновлении с более ранних версий до версии 4.0.0 без выполнения скрипта сервисы webapi и rabbitmqcosumer будут рестартовать из-за ошибки в сервисе лицензий.

  1. Сделайте резервную копию системы.
  2. Остановите контейнеры системы:
    docker compose -f docker-compose.yml --project-name  {{project_name}} stop --timeout 120
    
  3. Выполните следующие команды для миграции прав в вольюмах. Скрипт миграции прав в вольюмах phoenix_migrate_volumes_rights.sh находится в директории scripts.
    chmod +x scripts/phoenix_migrate_volumes_rights.sh
    sudo scripts/phoenix_migrate_volumes_rights.sh  {{project_name}}
    
    {{project_name}} в примерах команд необходимо заменить на название проекта Docker Compose, в котором запущена система. Чтобы определить название проекта, выполните команду docker ps. Префикс к названиям контейнеров является названием проекта.

    Важно

    Для выполнения скрипта могут потребоваться права пользователя root на хост-системе. В таком случае необходимо запускать скрипт с использованием sudo или от имени пользователя root.

  4. Продолжите обновление системы, описанное в инструкциях ниже.

При чистой установке версии 4.0 выполнение скрипта не требуется.

Online обновление

  1. Создайте новую директорию, скачайте и распакуйте в ней файл для online установки. Актуальная версия установочного файла доступна на странице загрузокopen in new window.
  2. Сравните содержимое файлов .env и docker-compose.yml и перенесите пользовательские значения переменных в соответствующие файлы новой версии.
  3. В командной строке перейдите в директорию с новой версией и выполните следующую команду:
    docker compose -f docker-compose.yml --project-name prod up -d --remove-orphans
    

Автономное обновление

  1. Создайте новую директорию, скачайте и распакуйте в ней файл для автономной установки. Актуальная версия установочного файла доступна на странице загрузокopen in new window.
  2. Сравните содержимое файлов .env и docker-compose.yml и перенесите пользовательские значения переменных в соответствующие файлы новой версии.
  3. В командной строке перейдите в директорию с новой версией, распакуйте архив для автономной установки и выполните следующую команду:
    docker load -i images.tar.gz
    docker compose -f docker-compose.yml --project-name prod up -d --remove-orphans