初次提交,gitea
This commit is contained in:
67
gitea/backup.sh
Normal file
67
gitea/backup.sh
Normal file
@@ -0,0 +1,67 @@
|
||||
#!/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
|
||||
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)"
|
||||
Reference in New Issue
Block a user