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 推送、多用户权限这五项没有验证,不作结论。