自建 Git:Forgejo 或 Gitea
如何搭建带 Web 界面、SSH 访问和构建运行的个人代码仓库服务器——以及需要备份什么以免丢失代码。
更新于 2026年8月23日
当代码不能离开自己的平台,或者您希望私有仓库和构建时长不受限制时,就需要搭建自己的 Git。Forgejo 和 Gitea 是两个关系密切的项目(Forgejo 源自 Gitea);两者都能在单个容器中安装,并在配置不高的机器上运行。
如何选择以及需要多少资源
日常使用几乎没有区别:界面、议题、拉取请求、镜像、用于构建的 Actions。Forgejo 由社区开发,Gitea 由公司开发。如果项目独立性对您很重要,请选择 Forgejo。
对于两三个人来说,VDS-1 就足够了。一旦您为构建添加 runner,就应选择 VDS-3 或更高配置:构建会消耗 CPU 和磁盘,而且磁盘速度受层级限制。
通过 Compose 安装
services:
forgejo:
image: codeberg.org/forgejo/forgejo:11
container_name: forgejo
restart: unless-stopped
environment:
- USER_UID=1000
- USER_GID=1000
volumes:
- ./data:/data
- /etc/timezone:/etc/timezone:ro
ports:
- "3000:3000"
- "2222:22"
docker compose up -d
docker compose logs -f forgejo
打开 http://<machine-address>:3000 并完成初始设置。创建的第一个用户将成为管理员。
您不需要将 3000 端口对外开放。请关闭它,并在服务前面放置一台带证书的 Web 服务器——这样您就能获得 HTTPS,也不会把设置面板暴露给外人。在设置完成之前,任何打开该地址的人都能抢先创建管理员。
SSH 访问
容器内的 22 端口被转发到 2222,因为 22 已被系统 SSH 占用。在仓库设置中,地址会是这样:
git clone ssh://git@example.com:2222/user/repo.git
如果您想要不带端口的常规 git@example.com:user/repo.git,请将 2222 留给容器,并通过系统 SSH 在主机上设置转发,或者将管理用 SSH 移到其他端口(参见访问保护)。
构建
Actions 由单独的 runner 运行——即 forgejo-runner 容器,它使用管理员设置中的令牌进行注册。只有在确有需要时才授予它访问 Docker 套接字的权限:这等同于机器上的 root 权限。对于构建,最好通过内存和 CPU 限制 runner——参见资源限制。
需要备份什么
所有状态都存储在 ./data 卷中:仓库、数据库、附件、配置。备份方式如下:
docker compose stop forgejo
restic -r <repository> backup ./data
docker compose start forgejo
如果服务使用 SQLite,您需要停止服务——否则数据库快照可能不一致。使用 PostgreSQL 时,无需停止服务,pg_dump 就足够了。更多详情,请参见具体要备份什么和 Restic。