#!/bin/bash # B2B Shopping AI Assistant - Production Backup Script # 生产环境备份脚本 set -e # 配置 BACKUP_DIR="./backups" DATE=$(date +%Y%m%d_%H%M%S) RETENTION_DAYS=7 # 颜色输出 GREEN='\033[0;32m' YELLOW='\033[1;33m' NC='\033[0m' log_info() { echo -e "${GREEN}[INFO]${NC} $1" } log_warn() { echo -e "${YELLOW}[WARN]${NC} $1" } # 创建备份目录 mkdir -p "$BACKUP_DIR" log_info "========================================" log_info "生产环境备份 - $DATE" log_info "========================================" echo "" # 1. 备份 Redis 数据 log_info "1. 备份 Redis 数据..." docker run --rm \ -v ai_redis_data_prod:/data \ -v "$(pwd)/$BACKUP_DIR":/backup \ alpine tar czf /backup/redis-$DATE.tar.gz -C /data . log_info "✅ Redis 数据备份完成: redis-$DATE.tar.gz" # 2. 备份 Agent 日志 log_info "2. 备份 Agent 日志..." docker run --rm \ -v ai_agent_logs_prod:/data \ -v "$(pwd)/$BACKUP_DIR":/backup \ alpine tar czf /backup/agent-logs-$DATE.tar.gz -C /data . log_info "✅ Agent 日志备份完成: agent-logs-$DATE.tar.gz" # 3. 备份 Grafana 配置(如果存在) if docker volume inspect ai_grafana_data &> /dev/null; then log_info "3. 备份 Grafana 配置..." docker run --rm \ -v ai_grafana_data:/data \ -v "$(pwd)/$BACKUP_DIR":/backup \ alpine tar czf /backup/grafana-$DATE.tar.gz -C /data . log_info "✅ Grafana 配置备份完成: grafana-$DATE.tar.gz" fi # 4. 备份环境变量文件 log_info "4. 备份环境变量文件..." cp .env.production "$BACKUP_DIR/env-$DATE.backup" chmod 600 "$BACKUP_DIR/env-$DATE.backup" log_info "✅ 环境变量备份完成: env-$DATE.backup" # 5. 清理旧备份 log_info "5. 清理 $RETENTION_DAYS 天前的旧备份..." find "$BACKUP_DIR" -name "*.tar.gz" -mtime +$RETENTION_DAYS -delete find "$BACKUP_DIR" -name "env-*.backup" -mtime +$RETENTION_DAYS -delete log_info "✅ 旧备份清理完成" # 6. 生成备份清单 log_info "6. 生成备份清单..." cat > "$BACKUP_DIR/manifest-$DATE.txt" << EOF 备份时间: $DATE 备份内容: - Redis 数据: redis-$DATE.tar.gz - Agent 日志: agent-logs-$DATE.tar.gz - 环境变量: env-$DATE.backup EOF log_info "✅ 备份清单生成完成: manifest-$DATE.txt" echo "" log_info "========================================" log_info "✅ 备份完成!" log_info "========================================" echo "" log_info "备份文件位置: $BACKUP_DIR" log_info "" ls -lh "$BACKUP_DIR" | grep "$DATE"