Резервное копирование
Данные для бэкапа
| Volume |
Содержимое |
Критичность |
postgres_data |
Профили, провайдеры, события, audit log, отчёты (метаданные) |
Критично |
redis_data |
Кэш, events stream |
Некритично (восстанавливается) |
minio_data |
OPA policy bundles |
Некритично (пересобирается) |
reports-data |
Файлы PDF/CSV отчётов |
Важно |
Скрипт бэкапа
#!/bin/bash
# /opt/llm-firewall/backup.sh
BACKUP_DIR="/opt/llm-firewall/backups"
TIMESTAMP=$(date +%Y%m%d_%H%M%S)
BACKUP_PATH="${BACKUP_DIR}/backup_${TIMESTAMP}"
mkdir -p "$BACKUP_PATH"
echo "=== Бэкап PostgreSQL ==="
docker exec llm-firewall-postgres pg_dumpall -U postgres > "${BACKUP_PATH}/postgres_dump.sql"
echo "=== Бэкап reports ==="
docker cp llm-firewall-admin-api:/data/reports "${BACKUP_PATH}/reports" 2>/dev/null || echo "No reports found"
echo "=== Бэкап конфигурации ==="
cp /opt/llm-firewall/docker-compose.yml "${BACKUP_PATH}/"
cp /opt/llm-firewall/.env "${BACKUP_PATH}/"
cp /opt/llm-firewall/opa-config.yaml "${BACKUP_PATH}/"
echo "=== Архивация ==="
cd "$BACKUP_DIR"
tar -czf "backup_${TIMESTAMP}.tar.gz" "backup_${TIMESTAMP}"
rm -rf "backup_${TIMESTAMP}"
echo "Бэкап создан: ${BACKUP_DIR}/backup_${TIMESTAMP}.tar.gz"
# Удаление бэкапов старше 30 дней
find "$BACKUP_DIR" -name "backup_*.tar.gz" -mtime +30 -delete
chmod +x /opt/llm-firewall/backup.sh
# Добавление в crontab (ежедневно в 3:00)
echo "0 3 * * * /opt/llm-firewall/backup.sh >> /opt/llm-firewall/logs/backup.log 2>&1" | crontab -