自托管 Git 平台选型:Gitea、Forgejo、GitLab 怎么选?Docker 部署一条龙

前言

一直在 GitHub 上存代码,免费、好用、生态全。但有个问题 —— 代码数据在微软的服务器上。对于个人项目还好,但有些东西不想放公网,或者需要 CI / CD 但不想付费。

自己搭个 Git 平台,这件事在 2026 年已经变得很简单了。Docker 一条命令起一个 Gitea,功能跟 GitHub 八成相似,资源占用跟一个 RSS 阅读器差不多。

三大平台速览

GiteaForgejoGitLab
定位个人 / 小团队Gitea 开源分支企业 DevOps 全家桶
内存占用100-300MB100-300MB2-4GB 起
Docker极简极简较重
CI/CDGitea ActionsForgejo ActionsGitLab CI(最完善)
开源协议MITGPLMIT(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 完全兼容:

.gitea/workflows/build.yml
name: Build
on: [push]
jobs:
build:
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v3
- run: npm install && npm test

需要在 Gitea 管理后台注册一个 Runner(Docker 容器),跑 CI 任务用。

备份策略

Gitea 的数据就一个目录 ./data,备份直接打包:

Terminal window
tar -czf gitea-backup-$(date +%Y%m%d).tar.gz /opt/gitea/data

SQLite 数据库也在里面。简单到只需要一个 cron job。

总结

自托管 Git 平台的选型其实很简单:

  • 个人 / 小团队 → Gitea(轻、够用、Docker 一条命令)
  • 在意开源纯度 → Forgejo(跟 Gitea 一样,协议 GPL)
  • 企业级 DevOps → GitLab(功能全但要吃资源)

Docker Compose 部署 Gitea,两分钟就能用。对于想「把代码搬回自己服务器」的人来说,没有比这更简单的方案了。