Резервное копирование¶
Зачем¶
MedInsight хранит БД, зашифрованные документы и DICOM. Регулярный бэкап защищает от потери данных при сбое диска или ошибке обновления.
Что входит в бэкап¶
| Компонент | Путь |
|---|---|
| SQLite БД | medinsight.db |
| Документы | storage/documents/ |
| DICOM | storage/dicom/ |
| Ключи age | из .env (отдельно!) |
Автоматический бэкап (Celery Beat)¶
При BACKUP_ENABLED=true задача backup_task запускается по расписанию BACKUP_SCHEDULE_CRON.
Архивы сохраняются в backups/ с шифрованием age.
Ручной бэкап¶
cd ~/medinsight
docker compose -f docker-compose.prod.yml exec app \
python -c "from app.tasks.backup_task import run_backup; run_backup()"
Или через скрипт (если есть):
./scripts/backup.sh
Восстановление¶
- Остановите сервисы:
docker compose -f docker-compose.prod.yml down
- Расшифруйте и распакуйте архив:
age -d -i age-key.txt backups/medinsight-YYYYMMDD.tar.gz.age | tar xzf -
- Восстановите
.envи ключи age. - Запустите:
./deploy.sh production
Хранение ключей¶
Критично
Без AGE_SECRET_KEY зашифрованные файлы невосстановимы. Храните ключи отдельно от бэкапов (менеджер секретов, офлайн-копия).
Ротация¶
Старые архивы удаляются автоматически через BACKUP_RETENTION_DAYS (по умолчанию 30 дней).
Рекомендации¶
- Копируйте
backups/на внешнее хранилище (S3, другой сервер). - Тестируйте восстановление раз в квартал.
- Не используйте
docker system prune --volumesна проде — см.scripts/docker_cleanup.sh.