#!/bin/bash # ============================================================================= # Gitea 部署包 —— 一键备份 # 备份内容: # 1. gitea dump(仓库 + 用户 + 配置 + secrets 加密导出) # 2. 完整 data 卷(gitea.db / app.ini / runner 配置 / upyun-sync 目录) # 产物输出到 backups/ 目录 # ============================================================================= set -euo pipefail SCRIPT_DIR="$(cd "$(dirname "${BASH_SOURCE[0]}")" && pwd)" ROOT_DIR="$(dirname "$SCRIPT_DIR")" BACKUP_DIR="$ROOT_DIR/backups" STAMP="$(date +%Y%m%d-%H%M%S)" mkdir -p "$BACKUP_DIR" echo "==> 1/2 导出 Gitea dump(含 secrets)..." docker compose -f "$ROOT_DIR/docker-compose.yml" exec -T gitea \ gitea dump --config /data/gitea/conf/app.ini \ --file /data/gitea-dump.zip \ -R -S 2>/dev/null || { echo "⚠️ gitea dump 失败(容器可能未运行),跳过,仅备份 data 卷" } # 把 dump 产物从容器拷出来 docker compose -f "$ROOT_DIR/docker-compose.yml" cp \ gitea:/data/gitea-dump.zip "$BACKUP_DIR/gitea-dump-$STAMP.zip" 2>/dev/null || true echo "==> 2/2 打包 data 卷..." tar -czf "$BACKUP_DIR/data-$STAMP.tar.gz" -C "$ROOT_DIR" data/ echo "" echo "✅ 备份完成:" ls -lh "$BACKUP_DIR" | tail -5 echo "" echo "⚠️ 产物含密钥,请勿上传网盘/公开仓库。"