Обновление Test IT в Docker Compose
Test IT Enterprise можно обновить в режиме онлайн или автономно. Если вы используйте версии до 4.6. включительно, следуйте соответствующим инструкциям на этой странице.
Обновление онлайн
- Создайте новую директорию, скачайте и распакуйте в ней файл для установки онлайн. Актуальная версия установочного файла доступна на странице загрузок.
- Сравните содержимое файлов
.env
иdocker-compose.yml
и перенесите пользовательские значения переменных в соответствующие файлы новой версии. - В командной строке перейдите в директорию с новой версией и выполните следующую команду:
docker compose -f docker-compose.yml --project-name testit up -d --remove-orphans
Автономное обновление
- Создайте новую директорию, скачайте и распакуйте в ней файл для автономной установки. Актуальная версия установочного файла доступна на странице загрузок.
- Сравните содержимое файлов
.env
иdocker-compose.yml
и перенесите пользовательские значения переменных в соответствующие файлы новой версии. - В командной строке перейдите в директорию с новой версией, распакуйте архив для автономной установки и выполните следующую команду:
docker load -i images.tar.gz docker compose -f docker-compose.yml --project-name testit up -d --remove-orphans
Внимание!
Перед обновлением Test IT до версии 4.3 и выше убедитесь, что дата и время в установках сервера синхронизированы с датой и временем в установках внешней базы данных! Несовпадение даты и времени может привести к нарушениям работы лицензии.
Назовите свой проект
В качестве примера в этой инструкции используется проект с именем testit
. Вы можете использовать другое название.
Если в файлах .env
и .yml
используются пользовательские значения переменных, перенесите их в файлы .env
и .yml
новой версии Test IT. Все значения в файлах .env
и .yml
новых версий Test IT заменяются на значения по умолчанию при обновлении.
Переход на Alpine в версии 4.6
Важно
Начиная с версии 4.6.0 в базовых образах сервисов Test IT, а также образах PostgreSQL, InfluxDB, Redis используется версия Alpine. Данное изменение уменьшает фактический размер образов и существенно снижает количество потенциальных уязвимостей контейнеров.
Пользователям PostgreSQL
Если вы используете сервер PostgreSQL из состава поставки Test IT, в процессе обновления для корректной работы сервисов необходимо переиндексировать базы данных в связи с переходом сервера на Alpine.
Действия, описанные ниже, необходимо выполнить непосредственно перед запуском новой версии Test IT, т.е. после сверки файлов .env
и docker-compose.yml
для онлайн-обновления или после команды docker image load -i images.tar.gz
для автономного обновления.
- Перейдите в директорию с установочными файлами версии 4.6.0 и остановите контейнеры продукта. Используйте команду:
docker compose -f docker-compose.yml -p testit stop
- Запустите контейнер
db
(в новой версии образ меняется наalpine
):docker compose -f docker-compose.yml -p testit up -d db
- Передайте в контейнер команды для реиндексации:
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;"
- После успешной реиндексации баз запустите остальные компоненты 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 и их метаданных.
- Из архива поставки 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
(расположен в корневой папке поставки)
- Перейдите в директорию с установочными файлами, с помощью которых была развернута текущая версия Test IT и остановите контейнеры продукта. Используйте команду:
docker compose -f docker-compose.yml -p testit stop
- Добавьте разрешение на исполнение скриптов:
chmod +x db-unite.sh minio-unite.sh
- Запустите все необходимые для миграции контейнеры командой:В контейнере
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
будет запущен миграционный скрипт. - Задайте команду чтения логов контейнера:
docker logs -f testit-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!
- Завершите процесс вывода логов и запустите миграционный скрипт баз данных Postgres:Убедитесь, что миграция прошла успешно. При успешной миграции по окончании работы скрипта отобразится строка:
docker exec testit-new-db-1 bash /db-unite.sh
В случае ошибки миграции отобразится строка:Script finished!
В случае ошибки миграции устраните проблему самостоятельно или свяжитесь с технической поддержкой (support@yoonion.ru).Import FAILED! Check database availability and postgres environment variables!
- После успешной миграции остановите контейнеры продукта и 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 и их метаданных.
- Из архива поставки 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
.
- Перейдите в директорию с установочными файлами, с помощью которых была развернута текущая версия Test IT и остановите контейнеры продукта. Используйте команду:
docker compose -f docker-compose.yml -p testit stop
- Добавьте разрешение на исполнение скриптов:
chmod +x ./move-migrated-volumes.sh ./minio-migrate.sh
- Запустите контейнеры 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
будет запущен миграционный скрипт. - Задайте команду чтения логов контейнера:
docker logs -f testit-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 testit down
- Перенесите вольюмы с мигрированными бакетами в оригинальные вольюмы. Используйте команду (для успешного выполнения команды требуются права root):По окончании миграции вы можете перейти к процессу миграции баз СУБД Postgres.
sudo -s ./move-migrated-volumes.sh testit new-minio-data-volume new-avatars-minio-data-volume exit
Миграция СУБД Postgres
Начиная с версии 4.2 в качестве основной системы управления базами данных (СУБД) используется Postgres 14. В процессе обновления необходимо выполнить дамп ваших баз данных (БД) с предыдущей версии Test IT и их восстановление в новой версии. В течение дампа и восстановления баз данных продукт будет недоступен.
Важно
БД backgrounddb появляется в версии 4.1. Если вы обновляете систему с версии ниже, чем 4.1, действия с базой и сервисом backgrounddb, приведенные в настоящей инструкции, выполнять не нужно.
- Перейдите в директорию с установочными файлами, с помощью которых была развернута текущая версия Test IT.
- Остановите контейнеры продукта, используя
.yml
-файл, из которого он был запущен. Используйте команду:docker compose -f docker-compose.yml -p testit down
- Запустите сервисы Postgres (db, authdb, avatars.db, backgrounddb):
docker compose -f docker-compose.yml -p testit up -d db authdb avatars.db backgrounddb
- Если в
.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 (англ.): - Остановите контейнеры:
docker compose -f docker-compose.yml -p testit down
- Удалите вольюмы сервисов 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
- Если в файлах
.env
и.yml
старой версии используются пользовательские значения переменных, перенесите их в соответствующие файлы новой версии. - Перейдите в директорию с новой версией поставки Test IT и запустите сервисы Postgres:
docker compose -f docker-compose.yml -p testit up -d db authdb avatars.db backgrounddb
- Выполните восстановление БД каждого сервиса, используя имя пользователя и пароли из
.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
- По окончании восстановления запустите остальные контейнеры продукта 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.
Создайте сеть yoonion_network:
docker network create yoonion_network
При применении обновления укажите ключ --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
будут рестартовать из-за ошибки в сервисе лицензий.
- Сделайте резервную копию системы.
- Остановите контейнеры системы:
docker compose -f docker-compose.yml --project-name testit stop --timeout 120
- Выполните следующие команды для миграции прав в вольюмах. Скрипт миграции прав в вольюмах
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.0 выполнение скрипта не требуется.