第 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
- 产物是一个
zip,含repos/(裸仓库)、数据库导出、app.ini、data/(附件、LFS)等。 - 建议放进定时任务每日执行。Linux 用
cron:
# 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:
- 3 份数据(生产 1 份 + 备份 2 份)。
- 2 种介质(如服务器磁盘 + NAS / 移动硬盘)。
- 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 标记) |
备份责任随维护者轮值一并交接,避免"人走备份停"。