自建 Git 服务 Gitea:仓库、CI 与备份
代码放第三方托管省心,但私有项目、内部脚本总想有个自己的地方。Gitea 轻量,单容器 + 数据库即可。
最容易踩的坑是 SSH:宿主机的 22 端口已被 sshd 占用,Gitea 的 SSH 要换端口。
先说结论
SSH 换端口并在克隆地址里体现,备份用 dump 而不是拷目录。
- SSH 端口与宿主机 sshd 分开
- 仓库备份用 gitea dump,包含配置与数据
- Actions 用 Act Runner,注意容器内访问宿主网络
- 对外只暴露 HTTPS,SSH 限制来源
先把问题说清楚
Gitea 的数据分三块:仓库文件、数据库、配置。只备份仓库目录会丢 issue、PR、用户。
gitea dump 会把三者打包成一个 zip,是官方推荐的备份方式。
具体怎么做
按顺序执行,每步都验证完再进下一步:
- compose 部署 Gitea + PostgreSQL
- 映射 SSH 端口(如 2222),并在 app.ini 里配置 SSH_DOMAIN 与 SSH_PORT
- 创建管理员,关闭公开注册
- 配置 Act Runner 执行 CI
- 加每日 gitea dump 备份任务
参数与成本对照
把关键数值摊开,方便判断该选哪条路:
| 数据 | 位置 | 备份方式 |
|---|---|---|
| 仓库 | /data/git/repositories | dump 包含 |
| 数据库 | PostgreSQL | dump 包含 |
| 配置 | /data/gitea/conf | dump 包含 |
| 附件/LFS | /data/gitea | dump 包含 |

几个容易踩的坑
下面这些是最常见的错误做法:
- SSH 端口不写进克隆地址:clone 一直超时
- 只备份 repositories:issue 与用户全丢
- Runner 里访问宿主机服务用 localhost:容器内不是宿主
- 开放注册被爬虫建号
最后补两句
私有 Git 的价值是「代码不出去」,前提是备份做足、权限收紧。
工具是手段,理解机制才是能力。命令记不住没关系,知道「该看什么」就够了。
评论 (3)
照着做了一遍,确实少走弯路。第二步最容易漏,建议顺手加个检查清单。
比「一键脚本」有用多了,知道为什么比知道怎么做重要。
补充一句:不同版本行为会变,动手前先确认自己的版本号。
发表评论