Резервное копирование и восстановление¶
Что нужно сохранять¶
В проекте есть два хранилища данных, которые требуют регулярного резервного копирования:
- MongoDB --- база данных с метаданными документов, реестрами, группами, настройками и результатами обработки.
- MinIO --- файловое хранилище с исходными PDF-файлами и изображениями страниц после обработки.
Код приложения хранится в системе управления версиями и не требует отдельного резервного копирования.
Резервное копирование MongoDB¶
Создание копии¶
Для создания резервной копии используется утилита mongodump, запускаемая внутри контейнера:
ssh alfa "docker exec sdm_mongodb mongodump --db smart_doc_matcher --archive=/data/db/backup.archive --gzip"
Эта команда создаёт сжатый архив всей базы данных внутри тома MongoDB.
Чтобы скопировать архив на локальную машину:
ssh alfa "docker cp sdm_mongodb:/data/db/backup.archive ./backup-$(date +%Y%m%d).archive"
scp alfa:~/backup-*.archive ./backups/
Восстановление из копии¶
# Передать архив в контейнер
ssh alfa "docker cp backup.archive sdm_mongodb:/data/db/backup.archive"
# Восстановить
ssh alfa "docker exec sdm_mongodb mongorestore --db smart_doc_matcher --archive=/data/db/backup.archive --gzip --drop"
Флаг --drop означает, что существующие коллекции будут удалены перед восстановлением. Без него данные будут добавлены к существующим, что может привести к дубликатам.
Выборочное копирование¶
Можно копировать отдельные коллекции:
# Только реестры и строки реестров
ssh alfa "docker exec sdm_mongodb mongodump --db smart_doc_matcher --collection registries --collection registry_rows --archive=/data/db/registries-backup.archive --gzip"
Резервное копирование MinIO¶
Через утилиту mc (MinIO Client)¶
Если на сервере установлена утилита mc:
# Настроить подключение (выполняется один раз)
mc alias set local http://localhost:9000 minioadmin minioadmin
# Скопировать все хранилища
mc mirror local/ ./minio-backup/
Через том Docker¶
Данные MinIO хранятся в томе minio_data. Путь к тому на диске можно узнать командой:
docker volume inspect alfa_minio_data --format '{{ .Mountpoint }}'
Этот каталог можно скопировать целиком. Перед копированием рекомендуется остановить контейнер MinIO, чтобы избежать повреждения данных:
ssh alfa "cd /opt/alfa && docker compose stop minio"
ssh alfa "sudo tar czf /tmp/minio-backup.tar.gz -C $(docker volume inspect alfa_minio_data --format '{{ .Mountpoint }}') ."
ssh alfa "cd /opt/alfa && docker compose start minio"
Восстановление MinIO¶
При восстановлении через mc:
mc mirror ./minio-backup/ local/
При восстановлении из архива тома:
ssh alfa "cd /opt/alfa && docker compose stop minio"
ssh alfa "sudo tar xzf /tmp/minio-backup.tar.gz -C $(docker volume inspect alfa_minio_data --format '{{ .Mountpoint }}')"
ssh alfa "cd /opt/alfa && docker compose start minio"
Рекомендации¶
- Создавать резервную копию MongoDB перед крупными операциями: массовой загрузкой документов, обновлением версии приложения, изменением структуры данных.
- Хранить как минимум две последние копии.
- Периодически проверять, что восстановление из копии действительно работает: развернуть копию на тестовой машине и убедиться, что данные на месте.
- Учитывать, что объём MinIO растёт пропорционально количеству загруженных файлов. При большом количестве документов (тысячи файлов) полная копия может занимать десятки гигабайт.