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

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

Данные для бэкапа

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 -