96 lines
2.5 KiB
Bash
96 lines
2.5 KiB
Bash
|
|
#!/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"
|