自托管Git服务选型:Gitea vs Forgejo vs GitLab CE全面对比
为什么你需要逃离付费Git托管?
GitHub Team每用户每月$4,GitLab Premium直接飙到$29/月/人。一个10人团队,一年下来GitHub要花$480,GitLab更是$3480。更别说这些SaaS平台随时可能涨价、修改服务条款,你的代码命运完全捏在别人手里。
自托管Git服务不是什么新鲜事,但2024-2025年的开源方案已经成熟到令人惊讶。一台$5/月的VPS就能跑起一个功能完整的Git平台,对小团队来说,一年省下的钱够买好几台服务器。
付费工具定价分析
GitHub Team — $4/月/用户
GitHub Team提供相比Free版本的增强功能:高级PR审查流程、CODEOWNERS自动分配审查者、仓库规则保护、3000分钟/月的Actions构建时间、2GB包存储。对小团队来说价格不算离谱,但注意这是按人头收费,团队扩张时成本线性增长。
GitLab Premium — $29/月/用户
GitLab Premium定价激进得多。你得到的是高级CI/CD管道功能、合规管理、代码质量报告、合并请求审批规则、50000分钟/月CI时间、50GB存储。功能确实强大,但$29/月/人的价格对初创团队和小公司来说是沉重负担。
真实成本计算
| 团队规模 | GitHub Team年费 | GitLab Premium年费 | $5/月VPS自托管年费 |
|---|---|---|---|
| 5人 | $240 | $1,740 | $60 |
| 10人 | $480 | $3,480 | $60 |
| 20人 | $960 | $6,960 | $120 |
| 50人 | $2,400 | $17,400 | $180 |
自托管方案的成本几乎是固定的,不随人数增长。规模越大,省得越多。
免费替代方案详细介绍
1. Gitea — 轻量之王
Gitea是目前最受欢迎的自托管Git服务,Go语言编写,单二进制文件部署,内存占用通常在100-200MB。它覆盖了日常开发的绝大多数需求:仓库管理、Pull Request、Issue追踪、Wiki、包管理、CI/CD(Gitea Actions,兼容GitHub Actions语法)。
适合场景:个人开发者、小团队、资源有限的服务器。
2. Forgejo — 自由软件捍卫者
Forgejo是Gitea的社区分叉,由Codeberg社区维护。它继承了Gitea的轻量特性,同时更强调自由软件理念和社区治理。Forgejo引入了ActivityPub联邦协议支持(实验性),并积极开发Forgejo Actions作为CI/CD方案。
适合场景:重视开源理念、希望参与社区治理的团队。
3. GitLab Community Edition (CE)
GitLab CE是GitLab的免费开源版本,功能最为全面:内置CI/CD、容器注册表、Issue看板、Wiki、代码审查。但代价是资源消耗巨大,最低需要4GB内存(推荐8GB以上),安装包超过1GB。
适合场景:需要完整DevOps平台、服务器资源充裕的中大型团队。
4. OneDev — 一体化新秀
OneDev是一个相对小众但功能完整的选择,内置CI/CD、包管理、代码搜索、Issue看板。Java编写,部署简单,Web UI设计现代。
适合场景:喜欢all-in-one方案、不想折腾CI/CD集成的团队。
功能对比表
| 功能 | Gitea | Forgejo | GitLab CE | OneDev |
|---|---|---|---|---|
| 内存需求 | 约200MB | 约200MB | 4-8GB | 约500MB |
| 安装难度 | 简单 | 简单 | 较复杂 | 中等 |
| 内置CI/CD | Gitea Actions | Forgejo Actions | GitLab CI | 内置CI |
| 容器注册表 | 支持 | 支持 | 支持 | 支持 |
| Issue看板 | 支持 | 支持 | 支持 | 支持 |
| LFS支持 | 支持 | 支持 | 支持 | 支持 |
| LDAP/OAuth | 支持 | 支持 | 支持 | 支持 |
| GitHub Actions兼容 | 是 | 是 | 否 | 否 |
| 联邦协议 | 否 | 实验性 | 否 | 否 |
| 社区活跃度 | 非常高 | 高 | 非常高 | 一般 |
安装部署实战
方案一:Gitea(推荐入门)
最低配置:1核CPU、512MB内存、10GB磁盘。
Docker一键部署步骤如下。首先创建数据目录和配置文件:
mkdir -p /opt/gitea/data
然后编写docker-compose.yml,使用Gitea官方镜像,映射3000端口用于Web访问,2222端口用于SSH Git操作,数据持久化到宿主机目录。运行 docker compose up -d 启动服务。
访问 http://your-server:3000 完成初始化设置。首次登录注册第一个账户即为管理员,无需额外配置。
裸机安装也很简单,以Ubuntu为例:从Gitea官网下载最新二进制文件放到 /usr/local/bin/,创建git系统用户和必要目录,配置systemd服务文件实现开机自启。整个过程不超过5分钟。
方案二:Forgejo
部署方式与Gitea几乎一致,只需将Docker镜像替换为 codeberg.org/forgejo/forgejo:latest 即可。其余端口映射、数据卷挂载完全相同。如果你之前用过Gitea,迁移到Forgejo毫无学习成本。
方案三:GitLab CE
资源需求较高,推荐至少4GB内存。使用官方Docker镜像 gitlab/gitlab-ce:latest 部署,映射80、443、22三个端口,挂载config、logs、data三个数据卷。首次启动需要3-5分钟完成初始化,之后访问Web界面设置root密码即可。
生产环境建议使用Omnibus安装方式,通过apt包管理器安装,自动处理依赖和系统服务。
使用示例
创建仓库并推送代码
在Gitea或Forgejo的Web界面点击"新建仓库",填入仓库名和描述,选择是否初始化README。创建完成后,复制仓库克隆地址:
git clone git@your-server:username/my-project.git
cd my-project
echo "# My Project" > README.md
git add .
git commit -m "init: first commit"
git push origin main
操作体验与GitHub完全一致,无需改变任何工作习惯。
配置Gitea Actions实现CI/CD
Gitea Actions兼容GitHub Actions语法,这是它最大的优势之一。在仓库根目录创建 .gitea/workflows/build.yml,定义触发条件和构建步骤。例如一个Go项目的CI配置:在push和PR到main分支时触发,检出代码,安装Go 1.22环境,运行测试,编译构建。
还需要在服务器上配置act runner来执行工作流。从Gitea官方下载act runner二进制,注册到Gitea实例获取token,然后以daemon模式运行。配置完成后,每次推送代码都会自动触发CI流程。
从GitHub迁移仓库
Gitea和Forgejo都内置了仓库迁移功能。在Web界面点击"迁移仓库",输入GitHub仓库地址和个人访问令牌,系统会自动导入代码、Issue、PR、标签等所有数据。
也可以通过API批量迁移,适合需要一次性迁移大量仓库的场景。使用curl调用迁移API端点,传入源仓库地址和认证令牌即可。
迁移注意事项
备份策略: 自托管意味着你承担数据安全责任。务必配置定时备份脚本,使用 gitea dump 命令导出完整备份(包含数据库和Git仓库)。建议备份到异地存储,如S3兼容的对象存储。
HTTPS配置: 生产环境必须配置SSL证书。推荐使用Caddy作为反向代理,它能自动获取和续期Let's Encrypt证书,零配置HTTPS。
监控告警: 使用Uptime Kuma(同样是开源免费工具)监控Git服务的健康状态,配置Telegram或邮件告警,确保第一时间发现服务异常。
结论
对于大多数5-20人的中小团队,Gitea是性价比最高的选择:资源占用低、功能够用、社区活跃。如果你更看重开源理念和社区治理,选Forgejo。只有当你确实需要GitLab的完整DevOps管线且服务器资源充裕时,才考虑GitLab CE。
自托管不是免费的午餐,你需要投入运维精力。但相比每年数千美元的SaaS账单,一台廉价VPS加上几小时的初始配置,回报率是惊人的。
评论