Gitea 备份到 R2 脚本备份
- rclone 不支持使用通配符命名
#!/bin/bash
set -Eeuo pipefail
# 错误捕获
trap 'echo "错误:退出状态 $? 在第 $LINENO 行,命令: $BASH_COMMAND"' ERR
BACKUP_DIR="/data/backup"
TIMESTAMP=$(date '+%Y%m%d-%H%M%S')
LOGFILE="$BACKUP_DIR/backup-${TIMESTAMP}.log"
GITEA_BIN="/usr/local/bin/gitea"
GITEA_CFG="/etc/gitea/app.ini"
BACKUP_FILE="$BACKUP_DIR/gitea-dump-${TIMESTAMP}.zip"
# 如果不是调试模式,则重定向日志
if [ "${DEBUG:-0}" -ne 1 ]; then
exec > >(tee -a "$LOGFILE") 2>&1
fi
echo "==== $(date '+%Y-%m-%d %H:%M:%S') Backup started ===="
cd "$BACKUP_DIR"
# 删除 7 天前的旧备份
echo "Cleaning old backups..."
find "$BACKUP_DIR" -name "gitea-dump*.zip" -delete
# 执行 Gitea 备份
echo "Running gitea dump..."
if runuser -u git -- "$GITEA_BIN" dump --config "$GITEA_CFG" --file "$BACKUP_FILE"; then
echo "Gitea backup completed successfully: $BACKUP_FILE"
else
echo "Gitea backup failed"
exit 1
fi
# 上传到对象存储
echo "Running rclone copy $BACKUP_FILE -> r2:giteabackup/"
if rclone copy -v --checksum "$BACKUP_FILE" r2:giteabackup/; then
echo "Backup uploaded successfully"
rm -v "$BACKUP_FILE"
else
echo "Backup upload failed"
exit 1
fi
echo "==== $(date '+%Y-%m-%d %H:%M:%S') Backup finished ===="