自托管 Git 平台选型:Gitea、Forgejo、GitLab 怎么选?Docker 部署一条龙
前言
一直在 GitHub 上存代码,免费、好用、生态全。但有个问题 —— 代码数据在微软的服务器上。对于个人项目还好,但有些东西不想放公网,或者需要 CI / CD 但不想付费。
自己搭个 Git 平台,这件事在 2026 年已经变得很简单了。Docker 一条命令起一个 Gitea,功能跟 GitHub 八成相似,资源占用跟一个 RSS 阅读器差不多。
三大平台速览
| Gitea | Forgejo | GitLab | |
|---|---|---|---|
| 定位 | 个人 / 小团队 | Gitea 开源分支 | 企业 DevOps 全家桶 |
| 内存占用 | 100-300MB | 100-300MB | 2-4GB 起 |
| Docker | 极简 | 极简 | 较重 |
| CI/CD | Gitea Actions | Forgejo Actions | GitLab CI(最完善) |
| 开源协议 | MIT | GPL | MIT(CE 版) |
Gitea — 首选
轻量到令人发指。一个 Go 二进制,不到 100MB 内存就能跑。支持 Issue、PR、Wiki、Actions(CI/CD)、Webhook、包管理器(NPM/Docker/Maven)。
绝大多数个人和团队场景,Gitea 完全够用。
Forgejo — 开源纯度选项
Gitea 被一家商业公司接手后,社区 fork 了 Forgejo。功能和 Gitea 几乎一样,协议换成了 GPL。如果你对「开源治理」在意,选 Forgejo。
GitLab — 重型方案
CI / CD 非常强,权限管理完善。但内存最低 4GB,小 VPS 根本跑不动。除非你需要 GitLab Runner 的多平台构建矩阵,否则没必要。
Docker Compose 部署 Gitea
services: gitea: image: gitea/gitea:latest container_name: gitea environment: - USER_UID=1000 - USER_GID=1000 volumes: - ./data:/data - /etc/timezone:/etc/timezone:ro - /etc/localtime:/etc/localtime:ro ports: - "3000:3000" - "2222:22" # SSH restart: unless-stopped打开 http://IP:3000,首次访问会进入安装向导。数据库选 SQLite(个人用)或 PostgreSQL(团队用)。
SSH 配置
Gitea 把 Git SSH 跑在容器内的 22 端口,宿主机的 SSH 可能也占着 22。容器映射到宿主机 2222,然后配置 ~/.ssh/config:
Host git.yourdomain.com Port 2222 User git IdentityFile ~/.ssh/id_ed25519这样 git clone git@git.yourdomain.com:user/repo.git 就自动走 2222 端口了。
接入 CI / CD
Gitea Actions 语法跟 GitHub Actions 完全兼容:
name: Buildon: [push]jobs: build: runs-on: ubuntu-latest steps: - uses: actions/checkout@v3 - run: npm install && npm test需要在 Gitea 管理后台注册一个 Runner(Docker 容器),跑 CI 任务用。
备份策略
Gitea 的数据就一个目录 ./data,备份直接打包:
tar -czf gitea-backup-$(date +%Y%m%d).tar.gz /opt/gitea/dataSQLite 数据库也在里面。简单到只需要一个 cron job。
总结
自托管 Git 平台的选型其实很简单:
- 个人 / 小团队 → Gitea(轻、够用、Docker 一条命令)
- 在意开源纯度 → Forgejo(跟 Gitea 一样,协议 GPL)
- 企业级 DevOps → GitLab(功能全但要吃资源)
Docker Compose 部署 Gitea,两分钟就能用。对于想「把代码搬回自己服务器」的人来说,没有比这更简单的方案了。