Обновление 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 и их метаданных.
- Из архива поставки 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
.
- Перейдите в директорию с установочными файлами, с помощью которых была развернута текущая версия Test IT и остановите контейнеры продукта. Используйте команду:Здесь и далее
docker compose -f docker-compose.yml -p {{project_name}} stop
{{project_name}}
— имя проекта, с которым вы запускали Test IT (префикс всех контейнеров), например prod. - Добавьте разрешение на исполнение скриптов:
chmod +x ./move-minio-migrated-volumes.sh ./minio-migrate.sh
- Запустите контейнеры 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
будет запущен миграционный скрипт. - Задайте команду чтения логов контейнера:
docker logs -f {{project_name}}-mc-minio_1
Убедитесь, что миграция прошла успешно. При успешной миграции по окончании работы скрипта отобразится строка:Важно
- В зависимости от объема данных в бакетах, процесс может занять некоторое время.
В случае ошибки миграции отобразится строка:Done!
В случае ошибки миграции устраните проблему самостоятельно или свяжитесь с технической поддержкой (support@yoonion.ru). Пример логов с успешным выполнением миграции:<bucket_name> bucket migration failed!
<...> 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!
- После успешной миграции, завершите процесс вывода логов, остановите контейнеры продукта и MiniO:
docker compose -f docker-compose.yml -f docker-compose.minio-migrate.yml -p {{project_name}} down
- Перенесите вольюмы с мигрированными бакетами в оригинальные вольюмы. Используйте команду (для успешного выполнения команды требуются права root):По окончании миграции вы можете перейти к процессу миграции баз СУБД Postgres.
sudo -s ./move-minio-migrated-volumes.sh {{project_name}} exit
Миграция СУБД Postgres
Начиная с версии 4.2 в качестве основной системы управления базами данных (СУБД) используется Postgres 14. В процессе обновления необходимо выполнить дамп ваших баз данных (БД) с предыдущей версии Test IT и их восстановление в новой версии. В течение дампа и восстановления баз данных продукт будет недоступен.
Важно
БД backgrounddb появляется в версии 4.1. Если вы обновляете систему с версии ниже, чем 4.1, действия с базой и сервисом backgrounddb, приведенные в настоящей инструкции, выполнять не нужно.
- Перейдите в директорию с установочными файлами, с помощью которых была развернута текущая версия Test IT.
- Остановите контейнеры продукта, используя .yml файл, из которого он был запущен. Используйте команду:Здесь и далее
docker compose -f docker-compose.yml -p {{project_name}} down
{{project_name}}
— имя проекта, с которым вы запускали Test IT (префикс всех контейнеров), например prod. - Запустите сервисы Postgres (db, authdb, avatars.db, backgrounddb):
docker compose -f docker-compose.yml -p {{project_name}} up -d db authdb avatars.db backgrounddb
- Если в .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 (англ.): - Остановите контейнеры:
docker compose -f docker-compose.yml -p {{project_name}} down
- Удалите вольюмы сервисов 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
- Если в .env и .yml файлах старой версии используются пользовательские значения переменных, перенесите их в соответствующие файлы новой версии.
- Перейдите в директорию с новой версией поставки Test IT и запустите сервисы Postgres:
docker compose -f docker-compose.yml -p {{project_name}} up -d db authdb avatars.db backgrounddb
- Выполните восстановление БД каждого сервиса, используя имя пользователя и пароли из .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
- По окончании восстановления запустите остальные контейнеры продукта 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
Создайте сеть yoonion_network:
docker network create yoonion_network
При применении обновления укажите ключ --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
будут рестартовать из-за ошибки в сервисе лицензий.
- Сделайте резервную копию системы.
- Остановите контейнеры системы:
docker compose -f docker-compose.yml --project-name {{project_name}} stop --timeout 120
- Выполните следующие команды для миграции прав в вольюмах. Скрипт миграции прав в вольюмах
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.0 выполнение скрипта не требуется.
Online обновление
- Создайте новую директорию, скачайте и распакуйте в ней файл для online установки. Актуальная версия установочного файла доступна на странице загрузок.
- Сравните содержимое файлов
.env
иdocker-compose.yml
и перенесите пользовательские значения переменных в соответствующие файлы новой версии. - В командной строке перейдите в директорию с новой версией и выполните следующую команду:
docker compose -f docker-compose.yml --project-name prod up -d --remove-orphans
Автономное обновление
- Создайте новую директорию, скачайте и распакуйте в ней файл для автономной установки. Актуальная версия установочного файла доступна на странице загрузок.
- Сравните содержимое файлов
.env
иdocker-compose.yml
и перенесите пользовательские значения переменных в соответствующие файлы новой версии. - В командной строке перейдите в директорию с новой версией, распакуйте архив для автономной установки и выполните следующую команду:
docker load -i images.tar.gz docker compose -f docker-compose.yml --project-name prod up -d --remove-orphans