无法读取此仓库下的 Git 数据。 联系此实例的管理员或删除此仓库。
参考文档:https://docs.gitea.cn/administration/backup-and-restore
基于最新版本的docker容器。
由于docker里没有service,所以修改完成后手动重启的docker。
官方没有提供较好的docker容器下备份数据教程,大概是因为docker下可以直接备份数据,而不采用内部数据操作的方法。
我在用的备份和恢复脚本
backup.sh
#!/bin/bash
# 定义Gitea根目录和备份目录
GITEA_ROOT="/docker-data/gitea"
BACKUP_DIR="${GITEA_ROOT}/backups"
TIMESTAMP=$(date +"%Y%m%d-%H%M%S")
BACKUP_FILE="gitea-${TIMESTAMP}.tar.gz"
# 创建备份目录
mkdir -p "$BACKUP_DIR"
echo "停止Gitea容器..."
docker compose stop
echo "正在创建备份文件: $BACKUP_FILE"
tar -zcvf "${BACKUP_DIR}/${BACKUP_FILE}" -C "$GITEA_ROOT" config/ data/ mysql/
echo "启动Gitea容器..."
docker compose start
echo "备份完成! 备份文件保存在: ${BACKUP_DIR}/${BACKUP_FILE}"
gitea-restore.sh
#!/bin/bash
# 定义Gitea根目录和备份目录
GITEA_ROOT="/docker-data/gitea"
BACKUP_DIR="${GITEA_ROOT}/backups"
if [ $# -eq 0 ]; then
echo "请指定要恢复的备份文件名。"
echo "可用备份文件:"
ls -l "$BACKUP_DIR" | grep gitea-.*\.tar\.gz
exit 1
fi
BACKUP_FILE="$1"
if [ ! -f "${BACKUP_DIR}/${BACKUP_FILE}" ]; then
echo "错误: 备份文件 ${BACKUP_DIR}/${BACKUP_FILE} 不存在!"
exit 1
fi
echo "停止Gitea容器..."
docker compose stop
echo "正在恢复备份: $BACKUP_FILE"
# 备份当前数据
echo "备份当前数据..."
CURRENT_BACKUP="gitea-pre-restore-$(date +"%Y%m%d-%H%M%S").tar.gz"
tar -zcvf "${BACKUP_DIR}/${CURRENT_BACKUP}" -C "$GITEA_ROOT" config/ data/ mysql/
# 恢复备份
echo "删除旧数据并恢复备份..."
rm -rf "${GITEA_ROOT}/config" "${GITEA_ROOT}/data" "${GITEA_ROOT}/mysql"
tar -zxvf "${BACKUP_DIR}/${BACKUP_FILE}" -C "$GITEA_ROOT"
echo "启动Gitea容器..."
docker compose start
echo "恢复完成! 原数据已备份为: ${BACKUP_DIR}/${CURRENT_BACKUP}"
1 Like