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

Внимание!

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

Назовите свой проект

В качестве примера в этой инструкции используется проект с именем testit. Вы можете использовать другое название.

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

Переход на Alpine в версии 4.6

Важно

Начиная с версии 4.6.0 в базовых образах сервисов TestIT, а также образах PostgreSQL, InfluxDB, Redis используется версия Alpine. Данное изменение уменьшает фактический размер образов и существенно снижает количество потенциальных уязвимостей контейнеров.

Пользователям PostgreSQL

Если вы используете сервер PostgreSQL из состава поставки Test IT, в процессе обновления для корректной работы сервисов необходимо переиндексировать базы данных в связи с переходом сервера на Alpine.

Действия, описанные ниже, необходимо выполнить непосредственно перед запуском новой версии TestIT, т.е. после сверки файлов .env и docker-compose.yml для онлайн-обновленияopen in new window или после команды docker image load -i images.tar.gz для автономного обновленияopen in new window.

  1. Перейдите в директорию с установочными файлами версии 4.6.0 и остановите контейнеры продукта. Используйте команду:
    docker compose -f docker-compose.yml -p testit stop
    
  2. Запустите контейнер db (в новой версии образ меняется на alpine):
    docker compose -f docker-compose.yml -p testit up -d db
    
  3. Передайте в контейнер команды для реиндексации:
    docker exec -it testit-db-1 psql -U postgres -d licensedb -c "reindex database licensedb;"
    docker exec -it testit-db-1 psql -U postgres -d authdb -c "reindex database authdb;"
    docker exec -it testit-db-1 psql -U postgres -d avatarsdb -c "reindex database avatarsdb;"
    docker exec -it testit-db-1 psql -U postgres -d testitdb -c "reindex database testitdb;"
    docker exec -it testit-db-1 psql -U postgres -d globalsearchdb -c "reindex database globalsearchdb;"
    docker exec -it testit-db-1 psql -U postgres -d backgrounddb -c "reindex database backgrounddb;"
    
  4. После успешной реиндексации баз запустите остальные компоненты Test IT версии 4.6.0:
    docker compose -f docker-compose.yml -p testit up -d --remove-orphans
    

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

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

Обновление до версии 4.5 осуществляется с версии 4.4.0 и выше. :::

  • Создайте резервную копию установленной системы (рекомендуется). Чтобы перенести информацию из вольюмов со старой версии на новую, имена проектов в обеих версиях должны совпадать. В наших примерах проект называется testit (вы можете использовать другое название).
  • Убедитесь, что на компьютере с установленным продуктом достаточно места для создания файла дампа БД Postgres.
  • Если вы используете внешнее объектное хранилище MiniO, не включайте в запуск миграции контейнер mc-minio.
  • Если вы используете внешние СУБД Postgres, пропустите соответствующие разделы настоящей инструкции.

Объединение контейнеров MiniO и Postgres

Мигрируйте бакеты MiniO

Начиная с версии 4.5 бакет avatars перемещается в контейнер minio. Поэтому перед обновлением необходимо выполнить миграцию бакетов MiniO и их метаданных.

  1. Из архива поставки Test IT версии 4.5 скопируйте следующие файлы из папки scripts в папку с установочными файлами, с помощью которых была развернута текущая версия Test IT. Файлы должны находиться в той же директории, что и файл docker-compose.yml:
    • docker-compose.unite-postgres-minio.yml
    • db-unite.sh
    • minio-unite.sh
    • postgres-init.sql (расположен в корневой папке поставки)
  2. Перейдите в директорию с установочными файлами, с помощью которых была развернута текущая версия Test IT и остановите контейнеры продукта. Используйте команду:
    docker compose -f docker-compose.yml -p testit stop
    
  3. Добавьте разрешение на исполнение скриптов:
    chmod +x db-unite.sh minio-unite.sh 
    
  4. Запустите все необходимые для миграции контейнеры командой:
    docker compose -f docker-compose.yml -f docker-compose.unite-postgres-minio.yml -p testit up -d minio avatars.minio mc-minio new-db authdb avatars.db backgrounddb licensedb globalsearchdb
    
    В контейнере testit-mc-minio-1 будет запущен миграционный скрипт.
  5. Задайте команду чтения логов контейнера:
    docker logs -f testit-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!
    
  6. Завершите процесс вывода логов и запустите миграционный скрипт баз данных Postgres:
    docker exec testit-new-db-1 bash /db-unite.sh
    
    Убедитесь, что миграция прошла успешно. При успешной миграции по окончании работы скрипта отобразится строка:
    Script finished!
    
    В случае ошибки миграции отобразится строка:
    Import FAILED! Check database availability and postgres environment variables!
    
    В случае ошибки миграции устраните проблему самостоятельно или свяжитесь с технической поддержкой (support@yoonion.ru).
  7. После успешной миграции остановите контейнеры продукта и MiniO:
    docker compose -f docker-compose.yml -f docker-compose.unite-postgres-minio.yml -p testit down
    
    По окончании миграции перейдите к обновлению онлайн или автономному обновлению.

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

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

Важно

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

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

  • Создайте резервную копию установленной системы (рекомендуется). Файлы docker-compose.yml и backup.sh находятся в одной директории. Чтобы перенести информацию из вольюмов со старой версии на новую, имена проектов в обеих версиях должны совпадать. В наших примерах проект называется testit (вы можете использовать другое название).
  • Убедитесь, что на компьютере с установленным продуктом достаточно места для создания файла дампа БД 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-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 testit stop
    
  2. Добавьте разрешение на исполнение скриптов:
    chmod +x ./move-migrated-volumes.sh ./minio-migrate.sh
    
  3. Запустите контейнеры MiniO текущей версии продукта и контейнеры MiniO для миграции:
    docker compose -f docker-compose.yml -f docker-compose.minio-migrate.yml -p testit up -d minio avatars.minio new-minio new-avatars-minio mc-minio
    
    В контейнере testit_minio-mc_1 будет запущен миграционный скрипт.
  4. Задайте команду чтения логов контейнера:
    docker logs -f testit-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 testit down
    
  6. Перенесите вольюмы с мигрированными бакетами в оригинальные вольюмы. Используйте команду (для успешного выполнения команды требуются права root):
    sudo -s
    ./move-migrated-volumes.sh testit new-minio-data-volume new-avatars-minio-data-volume
    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 testit down
    
  3. Запустите сервисы Postgres (db, authdb, avatars.db, backgrounddb):
    docker compose -f docker-compose.yml -p testit up -d db authdb avatars.db backgrounddb
    
  4. Если в .env-файле для баз установлены кастомные пользователи и пароли, укажите соответствующие значения в командах ниже, а также укажите директорию для сохранения файлов дампа . Выполните команды, чтобы осуществить дамп БД каждого сервиса:
    docker exec -i testit-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 testit-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 testit-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 testit-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 testit down
    
  6. Удалите вольюмы сервисов Postgres:
    docker volume rm testit_db-volume
    docker volume rm testit_authdb-volume
    docker volume rm testit_avatars.db-volume
    docker volume rm testit_backgrounddb-volume
    
  7. Если в файлах .env и .yml старой версии используются пользовательские значения переменных, перенесите их в соответствующие файлы новой версии.
  8. Перейдите в директорию с новой версией поставки Test IT и запустите сервисы Postgres:
    docker compose -f docker-compose.yml -p testit up -d db authdb avatars.db backgrounddb
    
  9. Выполните восстановление БД каждого сервиса, используя имя пользователя и пароли из .env-файла:
    docker exec -i testit-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 testit-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 testit-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 testit-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 testit 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  testit up --detach --timeout 120 --remove-orphans
    

Переменная COMPOSE_NETWORK_NAME

В файле .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  testit 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  testit
    
    testit в примерах команд необходимо заменить на название проекта Docker Compose, в котором запущена система. Чтобы определить название проекта, выполните команду docker ps. Префикс к названиям контейнеров является названием проекта.

    Важно

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

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

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

Обновление онлайн

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