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

Резервное копирование

Руководство по резервному копированию и восстановлению данных 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

tar czf policies_$(date +%Y%m%d).tar.gz policies/

Политики, созданные через 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

aws s3 cp aegisai_backup_$(date +%Y%m%d).dump \
  s3://your-bucket/aegisai/backups/

Проверка восстановления

Регулярно (ежемесячно) проверяйте восстановление:

  1. Поднимите тестовый PostgreSQL
  2. Восстановите последний дамп
  3. Запустите alembic upgrade head (если версия схемы изменилась)
  4. Проверьте /api/v1/health/ready
  5. Выполните smoke-тест: login → stats → audit

RPO и RTO

Метрика Рекомендация
RPO (допустимая потеря данных) < 1 час (ежечасный бэкап)
RTO (время восстановления) < 30 минут

Для критичных production-сред рассмотрите PostgreSQL streaming replication (WAL) для RPO ≈ 0.