В статье рассмотрим обновление системы Test IT, которая установлена автономно и её база данных вынесена из контейнера.

Установка рассматривается в статье Автономная установка Test IT на Red Hat Enterprise Linux с внешней базой данных.

Обновление до конкретной версии

Информация в данном разделе позволит вам сэкономить время.

Обновление Test IT 4.4.4 до 4.5.1

Сервер приложений

//// Делаем бэкап (скриптами из каталога предыдущей установки, не новой)
cd /home/testit/testit444/
chmod +x scripts/backup.sh
scripts/backup.sh docker-compose.yml prod
 
//// Загрузка данных
// создаём каталог
mkdir /home/testit/testit451/
cd /home/testit/testit451/
 
// Загрузить в каталог архив с новой установкой
https://storage.testit.software/downloads/v4.5/testit_v4.5.1_full.zip

// Распаковать и удалить дистрибутив:
unzip /home/testit/testit451/testit_v4.5.1_full.zip -d /home/testit/testit451
rm /home/testit/testit451/testit_v4.5.1_full.zip
 
// Правим .env и docker-compose.yml. Файлы с моего тестового сервера приложены. Можете использовать их. Вам необходимо поправить в .env IP серверов БД (Host=192.168.31.121), пароли для подключения к ним (Username=tester;Password=tester) и (FRONTEND_URL=https://victorz.ru)

// Заменяем .env и docker-compose.yml на изменённые в /home/testit/testit451/.
 
//// Удалить неиспользуемые образы для освобождения места (при работающем Test IT)
docker image prune -a
 
//// Загрузить новые образы 
docker load -i images.tar.gz
 
//// Запустить систему 
sudo docker-compose -f docker-compose.yml --project-name prod up -d --remove-orphans

Скачать .env и docker-compose.yml для 4.5.1

Обновление Test IT 4.3.1 до 4.4.4

Сервер баз данных

В новой версии появилась дополнительная БД. Это определяем просмотром файла .env в новой установке.

//// Создать базы данных
su - postgres
psql -c "CREATE DATABASE testit_globalsearchdb;"
 
// Добавить к БД расширение "uuid-ossp"
psql -d testit_globalsearchdb -c "CREATE EXTENSION if not exists \"uuid-ossp\" SCHEMA public;"
 
// Предоставить пользователю Test IT доступ к БД

psql -c "GRANT ALL PRIVILEGES ON DATABASE testit_globalsearchdb TO tester;"

Сервер приложений

//// Делаем бэкап (скриптами из каталога предыдущей установки, не новой)
cd /home/testit/testit431/
chmod +x scripts/backup.sh
scripts/backup.sh docker-compose.yml prod
 
//// Загрузка данных
// создаём каталог
mkdir /home/testit/testit444/
cd /home/testit/testit444/
 
// Загрузить в каталог архив с новой установкой
https://storage.testit.software/downloads/v4.4/testit_v4.4.4_full.zip

// Распаковать и удалить дистрибутив:
unzip /home/testit/testit444/testit_v4.4.4_full.zip -d /home/testit/testit444
rm /home/testit/testit444/testit_v4.4.4_full.zip
 
// Правим .env и docker-compose.yml. Файлы с моего тестового сервера приложены. Можете использовать их. Вам необходимо поправить в .env IP серверов БД (Host=192.168.31.121), пароли для подключения к ним (Username=tester;Password=tester) и (FRONTEND_URL=https://victorz.ru)

// Заменяем .env и docker-compose.yml на изменённые в /home/testit/testit444/.
 
//// Удалить неиспользуемые образы для освобождения места (при работающем Test IT)
docker image prune -a
 
//// Загрузить новые образы 
docker load -i images.tar.gz
 
//// Запустить систему 
sudo docker-compose -f docker-compose.yml --project-name prod up -d --remove-orphans

Скачать .env и docker-compose.yml для 4.4.4

Обновление Test IT 4.2.4 до 4.3.1

Сервер баз данных

В новой версии появилась дополнительная БД. Это определяем просмотром файла .env в новой установке.

//// Создать базу данных
su - postgres
psql -c "CREATE DATABASE testit_licensedb;"
 
// Добавить к БД расширение "uuid-ossp"
psql -d testit_licensedb -c "CREATE EXTENSION if not exists \"uuid-ossp\" SCHEMA public;"
 
// Предоставить пользователю Test IT доступ к БД
psql -c "GRANT ALL PRIVILEGES ON DATABASE testit_licensedb TO tester;"

Сервер приложений

//// Делаем бэкап (скриптами из каталога предыдущей установки, не новой)
 
cd /home/testit/testit424/
chmod +x scripts/backup.sh
scripts/backup.sh docker-compose.yml prod
 
//// Загрузка данных

// создаём каталог
mkdir /home/testit/testit431/
cd /home/testit/testit431/
 
// Загрузить в каталог архив с новой установкой
https://storage.testit.software/downloads/v4.3/testit_v4.3.1_full.zip

// Распаковать и удалить дистрибутив:
unzip /home/testit/testit431/testit_v4.3.1_full.zip -d /home/testit/testit431
rm /home/testit/testit431/testit_v4.3.1_full.zip
 
// Правим .env и docker-compose.yml. Файлы с моего тестового сервера приложены. Можете использовать их. Вам необходимо поправить в .env IP серверов БД (Host=192.168.31.121), пароли для подключения к ним (Username=tester;Password=tester) и (FRONTEND_URL=https://victorz.ru)

// Заменяем .env и docker-compose.yml на изменённые в /home/testit/testit431/.
 
//// Удалить неиспользуемые образы для освобождения места (при работающем Test IT)
docker image prune -a
 
//// Загрузить новые образы 
docker load -i images.tar.gz
 
//// Запустить систему 
sudo docker-compose -f docker-compose.yml --project-name prod up -d --remove-orphans

Скачать .env и docker-compose.yml для 4.3.1

Обновление Test IT 4.1.0 до 4.2.4

В данной версии идёт переход на PostgeSQL 14. Я переходил с PostgeSQL 10.

Сервер приложений

//// Делаем бэкап (скриптами из каталога предыдущей установки, не новой)
cd /home/testit/testit410/
chmod +x scripts/backup.sh
scripts/backup.sh docker-compose.yml prod

//// Загрузка данных
// создаём каталог
mkdir /home/testit/testit424/
cd /home/testit/testit424/

// Загрузить в каталог архив с новой установкой
https://storage.testit.software/downloads/v4.2/testit_v4.2.4_full.zip

// Распаковать и удалить дистрибутив:
unzip /home/testit/testit424/testit_v4.2.4_full.zip -d /home/testit/testit424
rm /home/testit/testit424/testit_v4.2.4_full.zip

// Правим .env и docker-compose.yml. Файлы с моего тестового сервера приложены. Можете использовать их. Вам необходимо поправить в .env IP серверов БД (Host=192.168.31.121), пароли для подключения к ним (Username=tester;Password=tester) и (FRONTEND_URL=https://victorz.ru)

// Заменяем .env и docker-compose.yml на изменённые в /home/testit/testit424/.

//// Загрузка образов (заранее, так как понадобятся для миграции)
sudo docker load -i images.tar.gz

//// Миграция бакетов MiniO и их метаданных

// Из архива поставки Test IT версии 4.2.4 скопировать файлы docker-compose.minio-migrate.yml, minio-migrate.sh, move-minio-migrated-volumes.sh из папки scripts в папку с установочными файлами версии 4.1.0 (/home/testit/testit410/).
 
// Закомментировать в скрипте minio-migrate.sh строки (9 и 10), иначе миграция не будет проходить из-за ошибок:
# mc admin config export SOURCE > config.txt
# mc admin config import TARGET < config.txt
 
cd /home/testit/testit410/
docker-compose -f docker-compose.yml -p prod stop
chmod +x ./move-minio-migrated-volumes.sh ./minio-migrate.sh
docker-compose -f docker-compose.yml -f docker-compose.minio-migrate.yml -p prod up -d minio avatars.minio new-minio new-avatars-minio mc-minio
docker logs -f prod_mc-minio_1

// "Done!" в логах - миграция завершена успешно.
// жмём CTRL +Z (для выхода из консоли контейнера)

docker-compose -f docker-compose.yml -f docker-compose.minio-migrate.yml -p prod down
sudo ./move-minio-migrated-volumes.sh prod

Сервер баз данных

//// Резервное копирование БД
su - postgres
pg_dump testit_db > /tmp/testit_db.dump
pg_dump testit_authdb > /tmp/testit_authdb.dump
pg_dump testit_avatarsdb > /tmp/testit_avatarsdb.dump
pg_dump testit_backgrounddb > /tmp/testit_backgrounddb.dump

exit

//// Установить новую PostgeSQL 14
yum install postgresql14-server postgresql14-contrib

// Инициализировать БД
/usr/pgsql-14/bin/postgresql-14-setup initdb

// правим порт на 5433 у PostgeSQL 14: /var/lib/pgsql/14/data/postgresql.conf

// запускаем PostgeSQL 14
systemctl start postgresql-14
 
// Узнать пути к рабочим директориям старой версии и новой версии PSQL (понадобится для скрипта миграции)

// Для текущего PostgeSQL
su - postgres -c "psql"
SELECT current_setting('data_directory'), current_setting('config_file');
\q

// Для PostgeSQL 14
su - postgres -c "PGPORT=5433 psql"
SELECT current_setting('data_directory'), current_setting('config_file');
\q

// Остановить PostgeSQL 14
systemctl stop postgresql-14

//// Тест на возможность миграции БД
su - postgres -c " \
/usr/pgsql-14/bin/pg_upgrade \
--old-datadir=/var/lib/pgsql/data \
--new-datadir=/var/lib/pgsql/14/data \
--old-bindir=/usr/bin \
--new-bindir=/usr/pgsql-14/bin \
--old-options '-c config_file=/var/lib/pgsql/data/postgresql.conf' \
--new-options '-c config_file=/var/lib/pgsql/14/data/postgresql.conf' \
--check \
"

// В выводе везде должно быть ОК

// Остановить текущий PostgeSQL
systemctl stop postgresql

//// Миграция БД
su - postgres -c " \
/usr/pgsql-14/bin/pg_upgrade \
--old-datadir=/var/lib/pgsql/data \
--new-datadir=/var/lib/pgsql/14/data \
--old-bindir=/usr/bin \
--new-bindir=/usr/pgsql-14/bin \
--old-options '-c config_file=/var/lib/pgsql/data/postgresql.conf' \
--new-options '-c config_file=/var/lib/pgsql/14/data/postgresql.conf' \
"

// В выводе везде должно быть ОК и "Обновление завершено"

// Запускаем PostgeSQL 14
systemctl start postgresql-14

// Эту команду PostgeSQL сам попросит выполнить
su - postgres -c "PGPORT=5433 /usr/pgsql-14/bin/vacuumdb --all --analyze-in-stages"

// Остановим PostgeSQL 14
systemctl stop postgresql-14

// Правим порт на 5432: /var/lib/pgsql/14/data/postgresql.conf

// Переносим настройки из postgresql.conf и pg_hba.conf старого экземпляра в файлы настроек нового экземпляра.

// останавливаем и отключаем старый PostgeSQL
systemctl disable postgresql
systemctl stop postgresql

// Добавляем в автозапуск и запускаем PostgeSQL 14
systemctl enable postgresql-14
systemctl start postgresql-14

Сервер приложений

//// Запустить систему 
sudo docker-compose -f docker-compose.yml --project-name prod up -d --remove-orphans

Сервер баз данных

//// Проверить работу Test IT. Если система работает, то удалить старый экземпляр PostgeSQL запустив скрипт, который создался при миграции на PostgeSQL 14
su - postgres -c "/var/lib/pgsql/delete_old_cluster.sh"

Скачать .env и docker-compose.yml для 4.2.4


Общий процесс обновления

Предварительно делаем резервную копию данных. Переходим в каталог, из которого в предыдущий раз устанавливали Test IT. Копируем из данного каталога файл docker-compose.yml предварительно во вложенный каталог scripts, где находится скрипт backup.sh. Далее выполнить:

chmod +x backup.sh
./backup.sh docker-compose.yml prod

Скачиваем последнюю версию автономного установщика с сайта компании-разработчика. В рамках статьи мы будем устанавливать версию Test IT 3.5.3.

Для новой версии Test IT создаём каталог:

mkdir /home/user/testit353

Помещаем скачанный архив в созданный каталог. В нашем случае в каталог помещаем архив testit_v3.5.3_full.zip. Распаковываем архив:

unzip /home/user/testit353/testit_v3.5.3_full.zip -d /home/user/testit353

Удаляем архив:

rm /home/user/testit353/testit_v3.5.3_full.zip

Подготавливаем файлы docker-compose.yml и .env так как описано в статье Автономная установка Test IT на Red Hat Enterprise Linux с внешней базой данных.

Не рекомендую использовать файлы из прошлой установки, так как в файлах есть отличия и при запуске нового экземпляра Test IT у вас минимум начнутся скачиваться старые версии docker-образов из интернета. Они же попытаются запуститься, однако для нового экземпляра Test IT они не подходят.

Помещаем подготовленные файлы в каталог /home/user/testit353.

Переходим в каталог:

cd /home/user/testit353/

Загружаем образы новых контейнеров в docker:

sudo docker load -i images.tar.gz

После загрузки образов запускаем новый экземпляр Test IT:

sudo docker-compose -f docker-compose.yml --project-name prod up -d --remove-orphans

Обновление завершено. Каталог, из которого в предыдущий раз устанавливали Test IT удаляем. Каталог /home/user/testit353 с текущими данными оставляем.

Со временем у вас будет увеличиваться количество docker-образов старых версий системы Test IT, которые не используются. Чтобы удалить неиспользуемые образы включая образы помеченные тегами необходимо выполнить команду (при запущенном Test IT):

docker image prune -a

В итоге будет увеличено свободное место на сервере.