Резервное копирование, восстановление резервной копии и обновление версии¶
В текущей версии Системы используется база данных SQLite Django-приложения, для ее резервного копирования и восстановления резервной копии следует использовать образ Docker-контейнера, порядок использования которого представлен в разделах «Подготовка к запуску» и «Подготовка окружения при локальном использовании».
Для обеспечения непрерывности работы Системы, развернутой в Docker-контейнере и использующей базу данных PostgreSQL как отдельный сервис, необходимо выполнить процедуры, описанные ниже.
Данный раздел включает описание следующих процессов:
- Резервное копирование (backup) базы данных и конфигурационных данных.
- Пошаговое восстановление при частичных и полных отказах.
- Безопасное обновление версий приложения с возможностью отката.
Введем исходные допущения:
- Система запущена под именем контейнера ml_scanner.
- Образ приложения: my-django-app:<YYYYMMDD-HHMM>.
- PostgreSQL-контейнер называется postgres_ml, том данных – pgdata_ml.
Резервное копирование¶
В таблице ниже представлены операции резервного копирования Системы.
Объект копирования | Команда / инструмент | Периодичность | Место хранения |
---|---|---|---|
Логическая копия БД (pg_dump) | docker exec postgres_ml pg_dump -U postgres -F c -f /var/lib/postgresql/data/db_$(date +%F).dump ml_db |
Ежедневно, 02:00 | /backup/ml_scanner/ |
Архив тома pgdata_ml | docker run --rm -v pgdata_ml:/db -v /backup:/backup alpine tar czf /backup/pgdata_$(date +%F).tgz /db |
Еженедельно, вс 03:00 | /backup/ |
Исходный код и файл .env.dev | tar czf /backup/ml_scanner/src_$(date +%F-%H%M).tgz /opt/ml-scanner |
Перед каждым релизом | /backup/ml_scanner/ |
Очистка архивов старше 30 суток | find /backup -type f -mtime +30 -delete |
Еженедельно, сб 04:00 | --- |
При наличии требований по криптографической защите архивы шифруются командой: gpg -c /backup/pgdata_YYYY-MM-DD.tgz
; ключ шифрования хранится в защищённом хранилище (HSM или Vault).
Частичное восстановление (логическая загрузка)¶
Используется при целостном томе pgdata_ml, но повреждённых данных:
cp /backup/ml_scanner/db_2025-05-22.dump /tmp/
docker exec -it postgres_ml pg_restore \
-U postgres -d ml_db --clean /tmp/db_2025-05-22.dump
Полное восстановление¶
При полном восстановлении из архива тома необходимо выполнить следующие действия:
-
Остановка сервисов:
docker stop ml_scanner docker stop postgres_ml
-
Пересоздание тома БД:
docker volume rm pgdata_ml docker volume create pgdata_ml
-
Запуск пустого контейнера PostgreSQL:
docker run -d --name postgres_ml \ -e POSTGRES_PASSWORD=postgres \ -v pgdata_ml:/var/lib/postgresql/data \ postgres:14
-
Развёртывание архивной копии:
docker run --rm \ -v pgdata_ml:/db \ -v /backup:/backup \ alpine sh -c \ "cd /db && tar xzf /backup/pgdata_2025-05-18.tgz --strip 1"
-
Перезапуск базы данных и приложения:
docker restart postgres_ml docker start ml_scanner
Обновление версии¶
Последовательность действий при обновлении версии Системы:
cd /opt/ml-scanner
docker build -t my-django-app:20250522-1500 .
docker stop ml_scanner && docker rm ml_scanner
docker run --name ml_scanner \
--env-file .env.dev \
-d -p 8003:8003 \
my-django-app:20250522-1500
Возврат к предыдущему образу выполняется с помощью следующих команд:
docker stop ml_scanner && docker rm ml_scanner
docker run --name ml_scanner \
--env-file .env.dev \
-d -p 8003:8003 \
my-django-app:20250518-0900