Перейти к содержанию

Резервное копирование и восстановление

Что нужно сохранять

В проекте есть два хранилища данных, которые требуют регулярного резервного копирования:

  1. MongoDB --- база данных с метаданными документов, реестрами, группами, настройками и результатами обработки.
  2. 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 растёт пропорционально количеству загруженных файлов. При большом количестве документов (тысячи файлов) полная копия может занимать десятки гигабайт.