Gitea 备份加密 5 分钟上手:给 dump 文件加一道解不开的锁

📅 2026/8/24 5:01:26
Gitea 备份加密 5 分钟上手:给 dump 文件加一道解不开的锁
Gitea 备份加密 5 分钟上手给 dump 文件加一道解不开的锁【免费下载链接】giteaGit with a cup of tea! Painless self-hosted all-in-one software development service, including Git hosting, code review, team collaboration, package registry and CI/CD项目地址: https://gitcode.com/GitHub_Trending/gi/gitea一次真实的备份翻车现场公司 Gitea 服务器每晚 cron 自动备份。某天新同事不知道这个 Gitea 备份 zip 里装着全量代码库和整份数据库好心把它传上了公开网盘方便大家取用。两天后有人在公网搜到了它才被发现。问题不在没备份而在那个备份文件是裸压状态——谁拿到谁就能打开。读完你能做到一件事给备份文件加上一把别人解不开的锁。60 秒搞懂 Gitea 备份流程程序做 4 步你做 1 步你在服务器终端跑一条 dump 命令相当于给整个 Gitea 拍一张全家福数据会经历这些阶段导出先把数据库导出成一份 gitea-db.sql用户、仓库、Issue 这些账本数据都在这里。收集repos 目录下的仓库文件逐个收进来开了 LFS、附件、包注册表的话也一起收。压缩全部数据打进一个压缩包默认 zip也支持 tar.gz、tar.zst 等格式。落盘写到指定路径写完后程序会自动把文件权限设成 0600即只有属主能读——这段逻辑在 cmd/dump.go 源码的 319-325 行附近有兴趣可以翻翻。传输往后的 scp、对象存储、网盘都靠你自己这也是最容易被看光的一段。前四步程序替你干了第五步是你自己的活加密就是你要补上去的那一层。 三档落地从能跑到跑好第一档·最小可用先把完整备份跑起来./gitea dump -f /backups/gitea-$(date %F).zip它在做什么带日期落盘一份完整 zip数据库仓库配置写完自动 600 权限。记得把 /backups 目录权限设成 700别的系统用户连目录都进不去。✅ 输出里出现 Finish dumping in file没有 Fatal 报错✅ ls -l 看到的文件权限是 600目录是 700✅ 备份文件属主是专门跑备份的账号而不是 root第二档·进阶加固加一层 GPG 对称加密./gitea dump -f - | gpg --symmetric --cipher-algo AES256 --output /backups/gitea-$(date %F).zip.gpg它在做什么-f - 让 dump 输出到标准输出管道直接交给 gpg落盘的就是 AES-256 密文没有口令谁都打不开。⚠️ 口令放密码管理器里别在服务器磁盘上写一个明文口令文件。跑 cron 时给 gpg 加上 --batch --passphrase-file 指向口令文件否则它会在等输入的地方卡住。✅ 产物以 .gpg 结尾直接 unzip 会报格式错误✅ 解密口令存在密码管理器不在备份目录附近✅ 你亲手解密并还原过一次这个文件第三档·团队协作换密钥对谁都不独占一个密码./gitea dump -f - | gpg --encrypt -r backup-team -o /backups/gitea-$(date %F).zip.gpg它在做什么改用 GPG 密钥对加密。持有团队私钥的人都能解加新人就是多一个收件人有人离职则吊销对应密钥不用像口令那样改了就得重加密全部历史。⚠️ 私钥导出后离线存放和备份文件放不同磁盘别一个硬盘装下全家。恢复演练也在这一步做一条解密加一条还原gpg --decrypt /backups/gitea-20260801.zip.gpg /tmp/backup.zip ./gitea restore-repo -r /tmp/backup -o admin -n demo完整恢复的套路是停服务 → 解包 → 把数据库 SQL 导进库里 → data 目录归位restore-repo 负责把单个仓库放回去实现见 cmd/restore_repo.go。✅ 团队私钥已离线备份不止一个人知道存放位置✅ 新成员用团队密钥解密过一次并成功✅ 最近一个季度做过一次完整恢复演练4 个容易踩的坑别笑这四个坑都有人真实踩过。坑 1.gpg 备份和口令/私钥文件躺在同一个目录 → 锁和钥匙放一个抽屉目录一泄露加密等于没做 → 密钥单独存放跨距离隔离别的盘、离线介质。坑 2只压缩成 zip 就高枕无忧 → 压缩是省地方不是上锁谁拿到都能解开 → 传输前多一道 gpg 加密装进箱子和锁上箱子是两件事。坑 3重跑备份命令报 Dump file exists 直接退出 → dump 拒绝覆盖同名已有文件防的就是误删上一份 → 文件名带日期另配一条定期清理旧备份的命令。坑 4恢复演练发现数据库是空的 → 备份命令上挂着 --skip-db 或 --skip-repository你以为全量其实缺了半边 → 每次备份后扫一眼日志确认数据库和仓库都真的进包了。上线前的自查表检查项怎么查期望结果备份文件权限ls -l /backups/文件 600、目录 700仅备份账号可读内容真的加密了file /backups/gitea-*.gpg显示 PGP data而不是 Zip archive密钥存放位置看一眼口令/私钥在哪与备份文件不同磁盘数据库在包里翻 dump 日志有 Dumping database且没被 skip恢复演练查演练记录近一季度内做过数据完整下次 cron 跑起来的时候记得zip 只是纸箱锁还得你自己装。【免费下载链接】giteaGit with a cup of tea! Painless self-hosted all-in-one software development service, including Git hosting, code review, team collaboration, package registry and CI/CD项目地址: https://gitcode.com/GitHub_Trending/gi/gitea创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考