在开发一个类似ModelScope的AI模型托管平台时,我们需要为每个项目提供独立的代码仓库服务。
初期,我们选择了业界熟知的GitLab作为解决方案。然而,在部署运行后很快遇到了资源瓶颈:仅仅为了基础的代码托管功能,GitLab整套服务(包括主进程、PostgreSQL和Redis)运行一段时间后,内存占用就飙升到了接近10GB。对于我们的轻量级项目需求而言,这样的资源消耗显然过高,成为了一个沉重的负担。
因此,我们转向了Gitea——一个轻量级的自托管Git服务。这一替换效果显著:内存占用从约10GB大幅降低至600MB左右。更重要的是,Gitea提供了完整且功能强大的API接口,这使得我们能够将其深度集成到自己的AI平台业务流中,实现高度定制化。
本文将指导你如何使用Docker快速部署Gitea,演示如何创建和管理代码仓库,并介绍如何通过其REST API实现业务系统的深度集成。

部署前置准备

| 组件 |
是否必须 |
用途说明 |
| 数据库(MySQL / PostgreSQL / SQLite) |
✅ 必须 |
存储核心业务数据:用户、仓库、Issue、PR、权限、LFS元信息等 |
| S3 / MinIO(对象存储) |
➖ 可选 |
用于存储仓库附件、LFS大文件;没有时使用本地磁盘 |
| Redis |
➖ 可选 |
用作缓存、Session、队列后台,提升性能 |
Gitea支持SQLite、MySQL 8及PostgreSQL 12。由于SQLite仅支持单进程/线程写入,性能受限,通常不推荐用于生产环境。
我们最熟悉且常用的是MySQL,因此选择预先安装MySQL 8。安装完成后,请在数据库中创建一个名为gitea的空数据库(此时库中没有任何表)。

Docker安装Gitea
接下来,通过运行以下Docker命令来安装Gitea:
docker run -d --name gitea \
-p 3000:3000 -p 222:22 \
-v /Users/zhangyong/docker/gitea/data:/data \
-v /etc/localtime:/etc/localtime:ro \
-v /etc/timezone:/etc/timezone:ro \
-e USER_UID=1000 \
-e USER_GID=1000 \
--restart always \
gitea/gitea:latest
安装完成后,首次访问 http://localhost:3000 将进入初始化配置页面。

如图所示,我们需要配置数据库连接信息(选择MySQL,填写前面创建好的gitea数据库连接参数),然后点击“立即安装”。
所有配置选项将被写入容器内的 /data/gitea/conf/app.ini 文件。
安装成功后,界面如下:

注册完初始的root管理员账号后,即可登录进入Gitea主页。

新建仓库

创建仓库的界面与GitHub风格相似,输入仓库名称及相关信息,即可成功创建。

当我们需要克隆仓库或向仓库推送代码时,通常需要创建一个用户的个人访问令牌(Personal Access Token,简称PAT)。

令牌创建成功后,请务必妥善保存。
此令牌将在使用Git命令行克隆或推送代码时,作为密码使用。
调用API
访问 http://localhost:3000/api/swagger#/repository,可以查看Gitea提供的所有可操作的REST API接口文档。

如图所示,我们可以根据业务需求,将这些API封装成内部服务。例如,可以封装一个统一的Java服务,来管理仓库的创建、删除、用户权限等操作。

总结

上图对比了Gitea与GitLab在资源消耗和特性上的主要差异。对于中小型团队或需要将Git服务深度集成到自有平台中的场景,Gitea凭借其极低的资源占用和完整的API支持,无疑是一个高效、灵活的“轻量级神器”,能够很好地适配公司特定的业务需求。