VPNT Technical Report Series
Vol. 2026, No. 1 · 管理员层手册
← 目录 / 管理员层手册

第 5 章 备份与灾难恢复

实验室代码全部托管在自建 Gitea 上,服务器磁盘损坏、误删仓库、机房断电都可能造成不可逆损失。每个仓库虽在成员本地各有一份克隆,但分支、Tag、Issue、PR、权限配置只完整存在于服务器。管理员须建立定期备份,并确认备份可恢复。

5.1 要备份什么

对象 说明 是否随代码克隆自带
仓库数据(含全部历史与 Tag) `git` 裸仓库,代码与提交历史的本体 部分(成员本地克隆可兜底,但可能不全)
Issue / PR / Wiki / 评论 存于 Gitea 数据库,**本地克隆不含**
用户、组织、权限、分支保护配置 存于 Gitea 数据库与配置文件
Gitea 配置与密钥 `app.ini`、SSH host key、LFS 数据
重要

Issue、PR、权限配置只存在于服务器数据库,一旦丢失无法从成员的本地克隆恢复。备份不能只备代码。

5.2 备份方式一:Gitea 官方 dump(推荐)

Gitea 自带 dump 命令,一次性打包仓库、数据库、配置、LFS 为单个压缩文件,是最省心的整站备份方式。

# 以 gitea 运行用户执行(示例路径按实际部署调整)
# -c 指定配置文件,--file 指定输出
gitea dump -c /etc/gitea/app.ini --file /backup/gitea-dump-$(date +%Y%m%d).zip
# crontab -e,每天凌晨 3 点备份,保留最近 14 天
0 3 * * * gitea dump -c /etc/gitea/app.ini --file /backup/gitea-dump-$(date +\%Y\%m\%d).zip && find /backup -name 'gitea-dump-*.zip' -mtime +14 -delete

Windows 部署可用「任务计划程序」在同一时间调用等效的 PowerShell 命令。

5.3 备份方式二:镜像到第二个远端(补充)

除整站 dump 外,可为关键仓库配置一个推送镜像,实时同步到第二台服务器或另一平台,作为热备。Gitea 界面路径:

仓库 -> Settings -> Repository -> Mirror Settings -> Push Mirror

填入目标仓库地址与凭据后,Gitea 会在每次推送后自动同步。此方式保代码历史,但不含 Issue / PR / 权限,只作 dump 的补充,不能替代 dump。

5.4 异地存放(3-2-1 原则)

备份文件不能只留在 Gitea 服务器本机——服务器整体损坏时会同归于尽。遵循 3-2-1:

课题组落地建议:每日 dump 存 NAS,每周再复制一份到实验室外的加密存储或另一台服务器。

5.5 恢复演练(关键,且易被忽略)

没验证过恢复的备份等于没有备份。 每季度至少演练一次,在一台测试机而非生产机上验证 dump 可还原:

# 1. 解压 dump
unzip gitea-dump-20260701.zip -d /tmp/gitea-restore

# 2. 按官方恢复步骤逐项还原(顺序:数据库 -> 仓库 -> 配置 -> data)
#    - 导入数据库:将解压出的库文件导入到测试实例的数据库
#    - 恢复仓库:把 repos/ 复制到测试实例的 gitea-repositories 目录
#    - 恢复配置与附件:还原 app.ini 与 data/
# 3. 启动测试实例,确认:仓库可克隆、历史与 Tag 完整、Issue/PR 可见、成员权限正确
提示

演练时记录每一步命令与耗时,形成一份「恢复操作手册」。真出故障时按手册执行,避免临场摸索。

5.6 备份检查表

完成标准
定期 dump 已配置定时任务,每日自动执行
备份含完整对象 仓库 + 数据库(Issue/PR/权限)+ 配置 + LFS
异地存放 至少一份备份不在 Gitea 服务器本机
保留策略 明确保留周期(如 14 天),自动清理过期备份
恢复演练 每季度至少一次,验证可完整还原
责任人 备份与演练指定专人负责,纳入交接说明(见第 4 章 handover 标记)

备份责任随维护者轮值一并交接,避免"人走备份停"。


← 第 4 章 Tag 与版本锚点第 6 章 域名迁移与后台运维 →