Gitea 是一个自建的代码托管服务,界面和操作跟 GitHub 一个路子:仓库、提交、工单、合并请求都有。整个服务编译成一个可执行文件,数据库可以只用 SQLite。这篇在 Windows 上从零起了一个实例,建管理员、建仓库,把每一步的真实返回记下来。
122 MB 的单文件,首次启动 10.6 秒
gitea-28.2.0-windows-amd64.exe 122,481,664 字节
启动命令 gitea.exe web --config custom\conf\app.ini
监听 127.0.0.1:3100
首次启动到 HTTP 200 10.59 秒
这 10 秒里它在建表。第二次启动会快很多,因为迁移已经跑过。程序没有安装向导,配置、数据、日志都放在自己指定的目录里,整个目录拷走就是完整备份。
配置只有一个 app.ini
新建 custom/conf/app.ini,改四个段落就能跑起来。密钥用自带命令生成,不要自己随手编。
gitea.exe generate secret SECRET_KEY 64 字符
gitea.exe generate secret INTERNAL_TOKEN 105 字符
[server]
HTTP_PORT = 3100
ROOT_URL = http://127.0.0.1:3100/
DISABLE_SSH = true
[database]
DB_TYPE = sqlite3
PATH = D:/wb_cache/lab/gitea/data/gitea.db
| 段落 | 作用 |
|---|---|
| server | 端口、对外地址、是否开 SSH |
| database | 数据库类型与文件位置 |
| security | 安装锁、SECRET_KEY、内部令牌 |
| service | 是否允许注册,这里关掉 |
先迁移再建号,顺序错了会报错
第一次直接创建管理员,会得到一句看不懂的 SQL 报错。
gitea.exe admin user create --admin --username shiceku ...
Command error: IsTableNotEmpty: SQL logic error: no such table: user (1)
先跑迁移再建号
gitea.exe migrate --config custom\conf\app.ini
New user 'shiceku' has been successfully created!
顺序是迁移 → 建号 → 起服务。跳过迁移那一步,表还不存在,任何管理命令都会撞在同一个错误上。
建仓走接口,201 之后仓库立刻可用
用管理员账号带 Basic Auth 调 POST /api/v1/user/repos,带上自动初始化,返回 201 和一个完整的仓库对象。
POST /api/v1/user/repos
{"name":"demo-repo","description":"实测库建的第一个仓库","auto_init":true}
返回 201 shiceku/demo-repo default_branch=main
刷新网页就能看到提交 1 个、分支 main、README.md 已经躺在根目录,提交号 09f8424a26。首页同时出现「创建了仓库」的动态和一年贡献图上的 1 个格子。
数据落在两个地方
data/gitea.db 2,232,320 字节
data/repos/ shiceku/ (仓库的裸库都在这层下面)
账号、工单、权限在 SQLite 里,代码本身按仓库名分目录存在 data/repos。备份要同时拷这两块,只拷数据库会丢代码。换机器时把整个实例目录搬过去,配置、库和裸库都在原位,起服务就能接着用。
实例起来之后,页头会一直显示「工单 / 合并请求 / 里程碑 / 探索」四个入口,其中探索页不需要登录就能打开,能看到实例里所有公开仓库。默认配置已经把注册关掉,陌生人进不来,但公开仓库仍然可读。
这次把 SSH 关了,所以推送只能走 HTTP。用 HTTP 推代码要先去设置里生成访问令牌,把令牌当密码用,账号本身的密码不行。这一步没有实测,属于官方文档里的常规做法。
适合谁用
仓库 58,592 星,Go 编写,MIT 许可。默认关闭注册之后,就是一个只对内开放的代码托管站。
| 场景 | 结论 | 理由 |
|---|---|---|
| 小团队私有仓库 | 合适 | 仓库与工单都在一个服务里 |
| 不想维护数据库 | 合适 | SQLite 一个文件就够 |
| 要跑 CI | 要另装 | Gitea 自带 Actions 需要额外的 runner |
| 公网公开托管 | 先做功课 | 默认配置没有 HTTPS,需要反向代理 |
实测范围:Windows 10 22H2(10.0.19045.6466)、Gitea 28.2.0、SQLite、Chrome 1360×860。合并请求、工单流转、Actions、SSH 推送、多用户权限这五项没有验证,不作结论。









