Files
server-deploy/gitea/backup.sh

69 lines
2.1 KiB
Bash
Executable File
Raw Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
#!/usr/bin/env bash
set -euo pipefail
# ============================================
# Gitea 备份脚本 (MySQL 版)
# 备份内容MySQL 数据库 + Gitea 数据(含 LFS) + 配置
# 定时执行: crontab -e → 0 3 * * * /opt/gitea/backup.sh
# ============================================
SCRIPT_DIR="$(cd "$(dirname "${BASH_SOURCE[0]}")" && pwd)"
cd "$SCRIPT_DIR"
# 加载配置
if [ ! -f .env ]; then
echo "[ERROR] .env 文件不存在" >&2
exit 1
fi
set -a
sed -i 's/\r$//' .env
source .env
set +a
BACKUP_DIR="${BACKUP_DIR:-/var/backups/gitea}"
GITEA_DATA_DIR="${GITEA_DATA_DIR:-/var/lib/gitea}"
DATE=$(date +%Y%m%d_%H%M%S)
KEEP_DAYS=30
log() { echo "[$(date '+%Y-%m-%d %H:%M:%S')] $*"; }
mkdir -p "$BACKUP_DIR"
# 1. 备份 MySQL 数据库
log "正在备份 MySQL 数据库..."
docker compose exec -T db mysqldump \
-u root -p"${DB_ROOT_PASSWORD}" \
--single-transaction \
--routines \
--triggers \
--databases gitea \
| gzip > "${BACKUP_DIR}/db_${DATE}.sql.gz"
log "数据库备份完成: db_${DATE}.sql.gz ($(du -h "${BACKUP_DIR}/db_${DATE}.sql.gz" | cut -f1))"
# 2. 备份 Gitea 数据仓库、LFS、附件、头像等
log "正在备份 Gitea 数据目录(含 LFS..."
tar czf "${BACKUP_DIR}/gitea_data_${DATE}.tar.gz" \
-C "$(dirname "$GITEA_DATA_DIR")" \
"$(basename "$GITEA_DATA_DIR")"
log "数据目录备份完成: gitea_data_${DATE}.tar.gz ($(du -h "${BACKUP_DIR}/gitea_data_${DATE}.tar.gz" | cut -f1))"
# 3. 备份配置文件
log "正在备份配置文件..."
tar czf "${BACKUP_DIR}/config_${DATE}.tar.gz" \
-C "$SCRIPT_DIR" \
.env docker-compose.yml nginx/
log "配置备份完成: config_${DATE}.tar.gz"
# 4. 清理过期备份
log "清理 ${KEEP_DAYS} 天前的备份..."
deleted=$(find "$BACKUP_DIR" -type f -mtime +${KEEP_DAYS} -print -delete | wc -l)
log "已清理 ${deleted} 个过期文件"
# 5. 输出备份摘要
echo ""
log "===== 备份完成 ====="
log "备份目录: ${BACKUP_DIR}/"
ls -lh "${BACKUP_DIR}/"*"${DATE}"* 2>/dev/null || true
echo ""
log "总备份空间占用: $(du -sh "${BACKUP_DIR}" | cut -f1)"