В версии v19.02 существенно улучшена работа с базой данных, чтобы не возникало проблем после обновлений (например, игнорирования некоторых настроек). Однако штатное обновление до версии v19.02 не работает. Нужно пользоваться специальной процедурой.
Предполагается, что Mitigator старой версии в рабочем состоянии, а также выполнен вход в хранилище образов:
docker login docker.mitigator.ru
В ходе процедуры будет указано, когда и как сделать резервные копии. На случай проблем предусмотрен откат изменений.
Сделать резервные копии Compose-файлов:
cp docker-compose.yml docker-compose.bak
cp docker-compose.override.yml docker-compose.override.bak || true
Переключиться на специальные версии Postgres и бэкенда. Для этого в файле
docker-compose.override.yml
их свойства image
должны быть такими:
version: "3"
services:
backend:
image: docker.mitigator.ru/product/backend:pre-v19.02
postgres:
image: docker.mitigator.ru/product/postgres:v19.01
Если этот файл не используется, можно просто записать в него эти строки.
Обновить только бэкенд:
docker-compose pull backend postgres
docker-compose up -d backend postgres
docker-compose logs -f backend | grep -m1 'was started'
Остановить бэкенд:
docker-compose rm -sf backend
Сохранить данные из базы:
docker-compose exec postgres pg_dump --user mitigator \
--data-only --inserts --column-inserts --schema public \
>backup.sql
Остановить Mitigator:
docker-compose down
Сохранить полную резервную копию базы данных на случай проблем:
tar -czf postgres.tgz -C /var/lib/docker/volumes/mitigator_postgres _data
Удалить том с данными:
docker volume rm mitigator_postgres
Вернуть docker-compose.override.yml
в прежнее состояние
(удалить, если его не было):
mv docker-compose.override.bak docker-compose.override.yml ||
rm docker-compose.override.yml
Обновить Compose-файл:
wget https://docs.mitigator.ru/dist/docker-compose.yml \
-O docker-compose.yml
Указать версию системы v19.02:
sed -e 's:^VERSION=.*:VERSION=v19.02:' -i .env
Загрузить все образы новой версии:
docker-compose pull
Запустить только базу данных:
docker-compose up -d postgres
Подготовить данные из старой базы к загрузке в новую:
sed -e "s:INTO public.:INTO backend.:" -i backup.sql
sed -e "s:setval('public.:setval('backend.:" -i backup.sql
Восстановить данные из резервной копии (это может занять минуты):
docker-compose exec -T postgres psql -U postgres mitigator \
<backup.sql >restore.log
Сообщения базы об ошибках на этом шаге можно игнорировать.
Загрузить дополнительный скрипт миграции данных и запустить его:
wget https://docs.mitigator.ru/kb/update-v19.02/migrate.sql
docker-compose exec -T postgres psql -U postgres mitigator \
<migrate.sql >migrate.log
Запустить новую версию системы:
docker-compose up -d
Остановить Mitigator:
docker-compose down
Удалить базу данных:
docker volume rm mitigator_postgres
Восстановить базу данных из резервной копии:
mkdir -p /var/lib/docker/volumes/mitigator_postgres
tar -C /var/lib/docker/volumes/mitigator_postgres -xf postgres.tgz
Убедиться, что docker-compose.yml
и docker-compose.override.yml
(если
используется) соответствуют старой версии:
cp docker-compose.bak docker-compose.yml
test -f docker-compose.override.bak && \
cp docker-compose.override.bak docker-compose.override.yml || \
rm docker-compose.override.yml
Убедиться, что в .env
есть одна строка с VERSION
, соответствующая
версии, к которой делается откат, например, VERSION=v19.01
.
Запустить Mitigator:
docker-compose up -d