Резервное копирование¶
Руководство по резервному копированию и восстановлению данных AegisAI.
Что нужно бэкапить¶
| Компонент | Данные | Критичность |
|---|---|---|
| PostgreSQL | Все данные платформы | 🔴 Критично |
| ML-модели | ./models/anomaly/ |
🟡 Важно |
| Экспорты аудита | ./storage/exports/ |
🟢 Опционально |
| Конфигурация | .env, docker-compose.yml |
🔴 Критично |
| Rego-политики | ./policies/ |
🟡 Важно |
| Redis | Кэш, pub/sub | ⚪ Не требуется* |
* Redis содержит только ephemeral-данные. Восстанавливается автоматически.
Бэкап PostgreSQL¶
Ручной дамп¶
# Создание дампа
docker compose exec postgres pg_dump \
-U aegisai -d aegisai -Fc \
> aegisai_backup_$(date +%Y%m%d).dump
# Или SQL-формат
docker compose exec postgres pg_dump \
-U aegisai -d aegisai \
> aegisai_backup_$(date +%Y%m%d).sql
Автоматический бэкап (cron)¶
#!/bin/bash
# /etc/cron.daily/aegisai-backup
BACKUP_DIR=/backups/aegisai
DATE=$(date +%Y%m%d_%H%M%S)
RETENTION_DAYS=30
mkdir -p $BACKUP_DIR
docker compose -f /opt/aegisai/docker-compose.yml exec -T postgres \
pg_dump -U aegisai -d aegisai -Fc > "$BACKUP_DIR/aegisai_$DATE.dump"
# Удаление старых бэкапов
find $BACKUP_DIR -name "*.dump" -mtime +$RETENTION_DAYS -delete
Восстановление¶
# Остановить API (чтобы не писал в БД)
docker compose stop app frontend
# Восстановить
docker compose exec -T postgres pg_restore \
-U aegisai -d aegisai --clean --if-exists \
< aegisai_backup_20260703.dump
# Запустить
docker compose start app frontend
Восстановление
--clean --if-exists удаляет существующие объекты перед восстановлением. Убедитесь, что это ожидаемое поведение.
Бэкап ML-моделей¶
# Архивирование
tar czf anomaly_models_$(date +%Y%m%d).tar.gz models/anomaly/
# Восстановление
tar xzf anomaly_models_20260703.tar.gz -C /
Модели также можно переобучить:
curl -X POST http://localhost:8000/api/v1/anomalies/detector/train \
-H "X-API-Key: <key>" \
-d '{"min_samples": 100}'
Бэкап политик Rego¶
Политики, созданные через UI, хранятся в PostgreSQL. Файловые шаблоны — в policies/templates/.
Бэкап конфигурации¶
# Сохраните (без секретов в git!)
cp .env backups/env_$(date +%Y%m%d).env
cp docker-compose.yml backups/
Секреты
Храните .env с секретами в зашифрованном хранилище (Vault, AWS Secrets Manager). Не коммитьте в git.
Стратегия 3-2-1¶
| Правило | Реализация |
|---|---|
| 3 копии | Production + локальный бэкап + удалённое хранилище |
| 2 типа носителей | SSD сервера + S3 / NFS |
| 1 офсайт | Копия в другом ДЦ или облаке |
Пример: загрузка в S3¶
Проверка восстановления¶
Регулярно (ежемесячно) проверяйте восстановление:
- Поднимите тестовый PostgreSQL
- Восстановите последний дамп
- Запустите
alembic upgrade head(если версия схемы изменилась) - Проверьте
/api/v1/health/ready - Выполните smoke-тест: login → stats → audit
RPO и RTO¶
| Метрика | Рекомендация |
|---|---|
| RPO (допустимая потеря данных) | < 1 час (ежечасный бэкап) |
| RTO (время восстановления) | < 30 минут |
Для критичных production-сред рассмотрите PostgreSQL streaming replication (WAL) для RPO ≈ 0.