Gitea 上手指南:5 分钟部署你的自托管 Git 服务
【免费下载链接】giteaGit with a cup of tea! Painless self-hosted all-in-one software development service, including Git hosting, code review, team collaboration, package registry and CI/CD项目地址: https://gitcode.com/GitHub_Trending/gi/gitea
公司代码不能放公有仓库,个人项目又不想为私有仓库付费,这是很多团队遇到的 Gitea 要解决的典型问题。Gitea 是一个用 Go 编写的自托管 Git 服务,在一个进程里提供 Git 仓库、代码审查、Issue 管理、包仓库和 CI/CD。你只需要一台能跑 Docker 的服务器,就可以完成 Gitea 部署,数据完全留在自己的机器上。
Gitea 项目速览
Gitea 的定位是"自托管一体化开发服务":它不是单纯的 Git 托管,而是把从提交代码、审查合并到打包发布的常见环节收进同一套系统。项目整体信息如下:
- 技术栈:纯 Go 编写,单二进制运行,无 JVM、无前端构建依赖,支持 Linux、macOS、Windows 及 ARM 等 Go 覆盖的平台
- 许可证:MIT,可自由商用、修改和分发
- 核心能力:Git 托管、Pull Request 审查、Issue/看板、Wiki、包注册表(Docker、npm、Maven 等格式)、内置 Gitea Actions
- 适用人群:需要私有仓库的个人开发者、小规模协作团队、有合规审计要求的企业
功能拆解:按"你想完成的事"看 Gitea
怎么把仓库跑起来
仓库支持git clone/push常规操作,也支持 HTTP 和 SSH 两种协议(端口在custom/conf/app.example.ini的[server]段配置)。仓库内提供完整的在线浏览:按文件、按提交、按分支看差异,支持 LFS 大文件。个人场景下,克隆一个仓库、推送一个私有项目,五分钟就能跑通。
怎么和团队协同
- Pull Request:提交合并请求后可以看到 diff、检查 CI 状态、写审查意见,再选择 merge、squash 或 rebase 合并
- Issue 与看板:Issue 支持标签、里程碑和依赖项,看板面板用于可视化排期
- 通知:可通过 Webhook 把 push、Issue、PR 等事件推送到 Slack、Discord、企业微信等外部系统(
modules/webhook/、services/webhook/)
怎么做自动化
Gitea 内置 Actions 引擎,工作流写法兼容 GitHub Actions 的 YAML:在仓库.gitea/workflows/下放一个文件即可触发。runner 以独立进程注册到实例上,流程大致如下:
也可以直接复用现成的 GitHub Actions 生态,无需为迁移重写流水线。
怎么管控权限
权限分三个层级:实例管理员、组织/团队、单个仓库,可以逐级收紧。配合双因素认证、访问令牌(API 场景)、部署密钥(CI 场景)使用,细到"哪个 key 只能推哪个仓库"的程度。相关模型代码在models/perm/、models/deploykey/。
快速上手:两种部署方式
方式一:Docker 部署(推荐)
docker run -d --name gitea \ -p 3000:3000 \ -v /data/gitea:/data \ -v /etc/timezone:/etc/timezone:ro \ -v /etc/localtime:/etc/localtime:ro \ gitea/gitea:latest- 浏览器访问
http://服务器IP:3000,首次进入安装向导,按提示填数据库、创建管理员账号即可 /data/gitea挂载点保存仓库、附件和配置文件,升级镜像时只要保留这个卷,数据不会丢- 容器以 rootless 方式运行,权限模型简单;仓库内的
docker/目录提供了 rootful 与 rootless 两种镜像模板
方式二:二进制部署
从发布页下载对应平台的单文件二进制,放到服务器上后执行:
./gitea web首次运行同样会引导你完成安装。这种方式不依赖容器,适合已经熟悉 systemd 管理的运维环境。想自己编译源码的话,参考 构建文档 和 开发指南。
| 对比项 | Docker | 二进制 |
|---|---|---|
| 上手速度 | 快,一条命令 | 快,但需自行管进程 |
| 升级 | 拉新镜像替换容器 | 替换二进制文件 |
| 适用场景 | 多数生产环境 | 无容器平台的宿主机 |
进阶配置
反向代理与 HTTPS
问题:对外暴露域名后,浏览器提示不安全,Gitea 也不该直接面对公网 80/443 端口。
做法:在 Nginx 或 Caddy 前置反向代理,终结 TLS 后转发到127.0.0.1:3000,并在 Gitea 的[server]中把APP_URL改成正式的 HTTPS 地址,保证生成的链接、邮件里的链接都是对外域名。所有可调项的完整注释清单见 配置示例。
数据库选择
问题:安装向导默认给了 SQLite,生产环境该不该换。
做法:app.ini的[database]段支持mysql、postgres、mssql、sqlite3四种类型。个人实例用 SQLite 足够省心;多用户、多仓库、需要主从备份的环境建议上 PostgreSQL 或 MySQL,并定期执行数据库备份。
备份策略
问题:仓库数据丢了怎么恢复。
做法:Gitea 的数据集中在/data/gitea(对应安装向导里的GITEA__database配置目录),备份三件套是:数据库(mysqldump/pg_dump)、仓库目录(bare repo 文件)、附件与 LFS。把这三部分纳入定时任务打包压缩即可,恢复时反向还原。建议至少保留一份异地副本,并每季度做一次恢复演练。
常见问题
Q1:SQLite 和 MySQL 差别大吗?数据量小(几十个仓库以内)用 SQLite 没有压力,配置最少;仓库多了、并发高了之后换 PostgreSQL/MySQL,DB_TYPE改一下再迁移数据即可。
Q2:改完配置要重启吗?分两类:后台管理面板里能改的动态配置即时生效;写在app.ini里的静态配置需要重启进程。判断方法是看 配置示例 里该项是否标注了"需要重启"。
Q3:升级后配置和数据会丢吗?不会,前提是数据在独立目录(Docker 的/data挂载点或自定义的GITEA_WORK_DIR)而不是镜像内部。升级 = 换新版本进程 + 旧数据目录,官方数据库迁移(modelmigration/)会自动把表结构升到新版。
Q4:能用 GitHub Actions 的现成 workflow 吗?可以。Gitea Actions 兼容 GitHub Actions 的 YAML 语法,大部分 action 直接可用;少数依赖 GitHub 特有 API 的除外。
结语
Gitea 的价值在于把"私有 Git + 协作 + CI"压缩成一个低维护成本的服务,Docker 一条命令就能先跑起来,再按团队规模逐步加反向代理、数据库和备份。仓库内资源:开发文档、完整配置示例、API 路由、Docker 构建文件。
【免费下载链接】giteaGit with a cup of tea! Painless self-hosted all-in-one software development service, including Git hosting, code review, team collaboration, package registry and CI/CD项目地址: https://gitcode.com/GitHub_Trending/gi/gitea
创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考