Skip to content
VDS · 应用与机器人

自建 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。

常见错误

  • 忽视仓库大小。 游戏服务器构建和媒体文件会迅速占用磁盘空间:入门层级的 40 GB 会在不知不觉中用完。
  • 未设置电子邮件。 没有它,邀请和密码重置都无法使用。接入外部 SMTP 比搭建自己的邮件服务器更简单。
  • 不备份就更新。 更改主版本会改变数据库架构。先备份,再执行 docker compose pull——参见更新容器。