Будет рассмотрена автономная установка и вынос баз данных из контейнеров на отдельный сервер. Если вы читаете данную статью, то скорее всего вы уже знаете, что такое Test IT, если нет, то в интернете есть статьи, описывающие данную систему управления тестированием. Мы же начнём сразу с практики установки системы. Установка Test IT будем производить на Red Hat Enterprise Linux 8 с нуля, поэтому весь процесс описан подробно. Данная инструкция подойдёт и для CentOS, Rocky Linux, AlmaLinux, так как они основаны на базе Red Hat Linux.
Обновление рассматривается в статье Обновление Test IT установленного автономно с внешней базой данных.
В исходной поставке система Test IT и её базы данных (их много) живут в docker-контейнерах на одном сервере. Мы будем использовать базы данных, которые находится вне контейнеров и вынесем базы данных на другой сервер. В итоге у нас будет два сервера: сервер баз данных, сервер приложений.
Нам с вами необходимо:
- Установить PostgreSQL на Red Hat Enterprise Linux (отдельная статья). Пропустите этот шаг, если вы базы данных не выносите из docker-контейнеров с сервера, на котором работает Test IT или у вас уже есть развёрнутый экземпляр PostgreSQL.
- Развернуть базы данных для Test IT (описано в данной статье). Пропустите этот шаг, если вы базы данных не выносите из docker-контейнеровс сервера, на котором работает Test IT.
- Установить Docker и Docker Compose на Red Hat Enterprise Linux (отдельная статья). Пропустите этот шаг, если у вас на сервере уже установлены данные компоненты.
- Установить Test IT (описано в данной статье).
Предполагаем, что у вас уже есть два сервера:
- Сервер приложений на Red Hat Enterprise Linux с установленными Docker и Docker Compose.
- Сервер баз данных на Red Hat Enterprise Linux с установленным PostgreSQL.
ВАЖНО!
- Статья актуальна для Test IT 4.4.4. Если у вас версия старше указанной, то вам необходимо убедиться, что количество баз данных в файле .env равно тому количеству, которое разворачиваем ниже по тексту. В противном случае самостоятельно разверните дополнительные базы данных указанные в .env.
- На данный момент Test IT работает с PostgreSQL версии не меньше 14-й. Если у вас версия PostgreSQL меньше указанной, то система не запустится.
Если нету, то разверните их. Статьи по ссылкам выше помогут вам установить на серверах PostgreSQL, Docker и Docker Compose.
Развернуть базы данных для Test IT
Нам необходимо создать базы данных для Test IT, для этого на сервере баз данных в терминале по порядку выполняем ряд команд:
yum install postgresql-contrib
su - postgres
psql -c "CREATE DATABASE testit_db;"
psql -c "CREATE DATABASE testit_authdb;"
psql -c "CREATE DATABASE testit_avatarsdb;"
psql -c "CREATE DATABASE testit_backgrounddb;"
psql -c "CREATE DATABASE testit_licensedb;"
psql -c "CREATE DATABASE testit_globalsearchdb;"
psql -d testit_db -c "CREATE EXTENSION if not exists \"uuid-ossp\" SCHEMA public;"
psql -d testit_authdb -c "CREATE EXTENSION if not exists \"uuid-ossp\" SCHEMA public;"
psql -d testit_avatarsdb -c "CREATE EXTENSION if not exists \"uuid-ossp\" SCHEMA public;"
psql -d testit_backgrounddb -c "CREATE EXTENSION if not exists \"uuid-ossp\" SCHEMA public;"
psql -d testit_licensedb -c "CREATE EXTENSION if not exists \"uuid-ossp\" SCHEMA public;"
psql -d testit_globalsearchdb -c "CREATE EXTENSION if not exists \"uuid-ossp\" SCHEMA public;"
psql -c "CREATE USER tester WITH ENCRYPTED PASSWORD 'tester';"
psql -c "GRANT ALL PRIVILEGES ON DATABASE testit_db TO tester;"
psql -c "GRANT ALL PRIVILEGES ON DATABASE testit_authdb TO tester;"
psql -c "GRANT ALL PRIVILEGES ON DATABASE testit_avatarsdb TO tester;"
psql -c "GRANT ALL PRIVILEGES ON DATABASE testit_backgrounddb TO tester;"
psql -c "GRANT ALL PRIVILEGES ON DATABASE testit_licensedb TO tester;"
psql -c "GRANT ALL PRIVILEGES ON DATABASE testit_globalsearchdb TO tester;"
Вы можете по каждой базе данных проверять, что расширение установлено выполнив после команды CREATE EXTENSION… следующую команду:
psql -d testit_db -c "\dx uuid-ossp"
Выходим из-под пользователя postgres:
exit
Базы данных созданы и готовы к работе.
Установка Test IT
Систему мы будем устанавливать из автономного установщика, который можно скачать на сайте разработчиков данной системы по ссылке https://testit.software/downloads
После скачивания необходимо распаковать архив и внести правки в служебные файлы.
Файл .env
Вносим правки, для примера покажу правку одной из баз данных, в указанные строки вносим свои настройки подключения к базе данных.
Было:
POSTGRES_DB=testitdb
POSTGRES_USER=postgres
POSTGRES_PASSWORD=F1rstL0g0N!
DB_CONNECTION_STRING=Host=db;Port=${POSTGRES_PORT};Database=${POSTGRES_DB};Username=${POSTGRES_USER};Password=${POSTGRES_PASSWORD};Pooling=true;Maximum Pool Size=130;Command Timeout=30
POSTGRES_AUTH_DB=authdb
POSTGRES_AUTH_USER=postgres
POSTGRES_AUTH_PASSWORD=F1rstL0g0N!
AUTH_CONNECTION_STRING=Host=authdb;Port=${POSTGRES_PORT};Database=${POSTGRES_AUTH_DB};Username=${POSTGRES_AUTH_USER};Password=${POSTGRES_AUTH_PASSWORD};Pooling=true;Maximum Pool Size=130;Command Timeout=30
POSTGRES_AVATARS_DB=avatarsdb
POSTGRES_AVATARS_USER=postgres
POSTGRES_AVATARS_PASSWORD=F1rstL0g0N!
AVATARS_CONNECTION_STRING=Host=avatars-db;Port=${POSTGRES_PORT};Database=${POSTGRES_AVATARS_DB};Username=${POSTGRES_AVATARS_USER};Password=${POSTGRES_AVATARS_PASSWORD};Command Timeout=30
POSTGRES_BACKGROUND_DB=backgrounddb
POSTGRES_BACKGROUND_USER=postgres
POSTGRES_BACKGROUND_PASSWORD=F1rstL0g0N!
BACKGROUND_CONNECTION_STRING=Host=backgrounddb;Port=${POSTGRES_PORT};Database=${POSTGRES_BACKGROUND_DB};Username=${POSTGRES_BACKGROUND_USER};Password=${POSTGRES_BACKGROUND_PASSWORD};Pooling=true;Maximum Pool Size=30;Command Timeout=30
POSTGRES_LICENSE_DB=licensedb
POSTGRES_LICENSE_USER=postgres
POSTGRES_LICENSE_PASSWORD=F1rstL0g0N!
LICENSE_DB_CONNECTION_STRING=Host=licensedb;Port=${POSTGRES_PORT};Database=${POSTGRES_LICENSE_DB};Username=${POSTGRES_LICENSE_USER};Password=${POSTGRES_LICENSE_PASSWORD};Pooling=true;Maximum Pool Size=30;Command Timeout=30
POSTGRES_GLOBALSEARCH_DB=globalsearchdb
POSTGRES_GLOBALSEARCH_USER=postgres
POSTGRES_GLOBALSEARCH_PASSWORD=F1rstL0g0N!
GLOBALSEARCH_CONNECTION_STRING=Host=globalsearchdb;Port=${POSTGRES_PORT};Database=${POSTGRES_GLOBALSEARCH_DB};Username=${POSTGRES_GLOBALSEARCH_USER};Password=${POSTGRES_GLOBALSEARCH_PASSWORD};Pooling=true;Maximum Pool Size=30;Command Timeout=30
Стало:
DB_CONNECTION_STRING=Host=192.168.31.121;Port=5432;Database=testit_db;Username=tester;Password=tester;Pooling=true;Maximum Pool Size=130;Command Timeout=30
AUTH_CONNECTION_STRING=Host=192.168.31.121;Port=5432;Database=testit_authdb;Username=tester;Password=tester;Pooling=true;Maximum Pool Size=130;Command Timeout=30
AVATARS_CONNECTION_STRING=Host=192.168.31.121;Port=5432;Database=testit_avatarsdb;Username=tester;Password=tester;Command Timeout=30
BACKGROUND_CONNECTION_STRING=Host=192.168.31.121;Port=5432;Database=testit_backgrounddb;Username=tester;Password=tester;Pooling=true;Maximum Pool Size=30;Command Timeout=30
LICENSE_DB_CONNECTION_STRING=Host=192.168.31.121;Port=5432;Database=testit_licensedb;Username=tester;Password=tester;Pooling=true;Maximum Pool Size=30;Command Timeout=30
GLOBALSEARCH_CONNECTION_STRING=Host=192.168.31.121;Port=5432;Database=testit_globalsearchdb;Username=tester;Password=tester;Pooling=true;Maximum Pool Size=30;Command Timeout=30
Вместо 192.168.31.121 указываете IP своего сервера баз данных.
Указать корректный URL на домен по которому будет размещена ваша система Test IT (без закрывающего слеша). Пример:
FRONTEND_URL=https://testit.victorz.ru
В будущем можно изменить параметр.
Файл docker-compose.yml
Полностью удалить секции с упоминанием баз данных: db, authdb, avatars.db, backgrounddb, licensedb, globalsearchdb. На картинках для примера выделено что нужно удалить, удаляем весь выделенный блок (изображения можно увеличить):
Закомментировать все упоминания этих баз данных в секциях depends_on:
Удалить все без исключения упоминания этих баз данных в секциях volumes (удалить строки с упоминанием authdb-volume, db-volume, avatars.db-volume). Пример:
Установка системы
Само приложение разворачивается на сервере приложений, в то время как база данных у нас находится на сервере баз данных.
Для установки будет использоваться Docker Compose версии старше 1.20.0. Если у вас версия младше, то посетите сайт разработчика и найдите инструкцию по установке, а лучше обновите Docker Compose.
Необходимо вписать параметры vm.max_map_count=262144 и vm.overcommit_memory=1 в файл /etc/sysctl.conf, для этого в терминале набираем команды:
echo 'vm.max_map_count=262144' >> /etc/sysctl.conf
echo 'vm.overcommit_memory = 1' >> /etc/sysctl.conf
# проверка
sysctl -p
Открыть 80-й и 443-й порт, для доступа к системе:
firewall-cmd --zone=public --add-port=80/tcp --permanent
firewall-cmd --zone=public --add-port=443/tcp --permanent
firewall-cmd --reload
Определяем пользователя, под которым мы будем устанавливать и запускать Test IT и авторизуемся под ним. В нашем случае — это user.
Создаём каталог testit:
mkdir /home/user/testit
Копируем скачанный архив в каталог /home/user/testit (на текущий момент у нас архив имеет имя testit_v4.4.5_full.zip).
Распакуем архив:
unzip /home/user/testit/testit_v4.4.5_full.zip -d /home/user/testit
Удалим исходный архив:
rm /home/user/testit/testit_v4.4.5_full.zip
После распаковки заменим файлы из архива .env и docker-compose.yml на те которые мы ранее изменили.
Запускаем установку:
cd /home/user/testit/
sudo docker load -i images.tar.gz
sudo docker-compose -f docker-compose.yml --project-name prod up --detach --timeout 120
Система установлена. Теперь в браузере набираем IP-адрес сервера и открывается главная страница системы:
До полной инициализации системы может потребоваться до 3 минут. Пока система не инициализирована полностью могут временно появляться ошибки на главной странице. Далее работаем с системой используя руководство администратора https://docs.testit.software/user-guide/admin-guide
Онлайн установку не описываю, так как она аналогична автономной установке, но обязательное условие — серверу требуется доступ в интернет.
Подсказки
Если при установке Test IT вы не изменяли параметр FRONTEND_URL=http://localhost в файле .env и у вас через определённое время появилась необходимость указать верный URL, то вам необходимо изменить данный параметр и после этого перезапустить систему командой:
docker-compose -f docker-compose.yml --project-name prod restart --timeout 120
Ошибки
Ошибка при запуске сервиса
Если при запуске вы видите ошибку:
ERROR: The Compose file './docker-compose.yml' is invalid because:
services.license-service.depends_on contains an invalid type, it should be an array, or an object
Упоминаться может и другой сервис. Это означает, что когда вы правили файл docker-compose.yml, то не до конца всё удалили. К примеру, было:
APPLICATION__CONFIGURATION__CUSTOMFILEPATH: "${APP_CONFIG_FILEPATH:-}"
depends_on:
- licensedb
volumes:
- license-volume:/var/licensing ## Remove in future releases
После правки стало:
APPLICATION__CONFIGURATION__CUSTOMFILEPATH: "${APP_CONFIG_FILEPATH:-}"
depends_on:
volumes:
- license-volume:/var/licensing ## Remove in future releases
Обратите внимание в depends_on пусто, а это не допускается, поэтому его также удаляем не оставляя пустым. Правильно:
APPLICATION__CONFIGURATION__CUSTOMFILEPATH: "${APP_CONFIG_FILEPATH:-}"
volumes:
- license-volume:/var/licensing ## Remove in future releases
Брат, все вышло как ты писал!