56 lines
1.7 KiB
Bash
56 lines
1.7 KiB
Bash
#!/bin/bash
|
|
# =============================================================================
|
|
# 追光AI 容器卷备份脚本 (在宿主机上跑)
|
|
# - 把 4 个 docker 卷打包到 /home/ubuntu/zhuiguang-ai-backup/dockers/
|
|
# - 默认保留最近 7 天快照
|
|
# - 用法: bash scripts/backup-volumes.sh
|
|
# =============================================================================
|
|
set -e
|
|
|
|
PROJECT="/home/ubuntu/zhuiguang-ai"
|
|
BACKUP_ROOT="/home/ubuntu/zhuiguang-ai-backup/dockers"
|
|
STAMP=$(date +%Y%m%d-%H%M%S)
|
|
BACKUP_DIR="${BACKUP_ROOT}/${STAMP}"
|
|
KEEP_DAYS=7
|
|
|
|
mkdir -p "$BACKUP_DIR"
|
|
|
|
echo "[backup] $(date) 开始备份容器卷到 $BACKUP_DIR"
|
|
|
|
# 备份 4 个卷
|
|
for vol in zhuiguang_ai_bot_data zhuiguang_ai_bot_public zhuiguang_ai_bot_logs zhuiguang_ai_bot_prisma; do
|
|
if ! docker volume inspect "$vol" >/dev/null 2>&1; then
|
|
echo "[backup] WARN: 卷 $vol 不存在,跳过"
|
|
continue
|
|
fi
|
|
echo "[backup] 备份卷 $vol ..."
|
|
docker run --rm \
|
|
-v "${vol}:/src:ro" \
|
|
-v "${BACKUP_DIR}:/dst" \
|
|
alpine:3.19 \
|
|
tar czf "/dst/${vol}.tgz" -C /src . 2>&1 | tail -3
|
|
echo "[backup] -> ${vol}.tgz"
|
|
done
|
|
|
|
# 同时备份 .env(敏感文件单独加密存)
|
|
if [ -f "$PROJECT/env/.env.production" ]; then
|
|
cp "$PROJECT/env/.env.production" "${BACKUP_DIR}/.env.production"
|
|
echo "[backup] .env.production 已备份"
|
|
fi
|
|
|
|
# 备份清单
|
|
{
|
|
echo "# 备份清单 - $(date)"
|
|
echo "STAMP: $STAMP"
|
|
ls -lh "$BACKUP_DIR"
|
|
} > "$BACKUP_DIR/INDEX.txt"
|
|
|
|
echo "[backup] 完成。清单:"
|
|
ls -lh "$BACKUP_DIR"
|
|
|
|
# 清理 7 天前的旧备份
|
|
echo "[backup] 清理 $KEEP_DAYS 天前的旧备份 ..."
|
|
find "$BACKUP_ROOT" -maxdepth 1 -type d -mtime +$KEEP_DAYS -exec rm -rf {} + 2>/dev/null || true
|
|
|
|
echo "[backup] DONE"
|