背景 链接到标题
团队或个人笔记、代码需要版本管理,GitHub/GitLab 固然好用,但部分数据希望留在内网。Gitea 是用 Go 编写的轻量 Git 服务,单二进制即可运行,资源占用低,功能对标 GitHub 核心能力——Issue、PR、Wiki、Actions 一应俱全。
选择 Gitea 的理由:
- 轻量:二进制不到 100MB,内存占用极低
- 易部署:Docker 镜像开箱即用
- 功能完整:Issue、PR、Code Review、Wiki、Actions
- Prometheus 原生支持:内置 metrics 端点,方便接入监控
环境 链接到标题
| 项目 | 配置 |
|---|---|
| OS | Ubuntu 24.04 LTS |
| 内核 | x86_64 |
| Docker | Compose v5 |
部署 链接到标题
目录结构 链接到标题
/opt/gitea-service/
├── .env # 数据库密码
├── docker-compose.yaml
├── gitea/ # Gitea 数据
└── postgres/ # PostgreSQL 数据
docker-compose.yaml 链接到标题
Gitea 使用 PostgreSQL 作为后端数据库(比 SQLite 更适合生产环境),镜像通过 docker.m.daocloud.io 加速拉取。
services:
db:
image: docker.m.daocloud.io/postgres:16-alpine
container_name: gitea-db
restart: unless-stopped
environment:
- POSTGRES_USER=gitea
- POSTGRES_PASSWORD=${DB_PASSWORD}
- POSTGRES_DB=gitea
volumes:
- ./postgres:/var/lib/postgresql/data
networks:
- gitea-net
server:
image: docker.m.daocloud.io/gitea/gitea:1.26.4
container_name: gitea
restart: unless-stopped
depends_on:
- db
ports:
- 3000:3000
- 2222:22
environment:
- USER_UID=1000
- USER_GID=1000
- GITEA__database__DB_TYPE=postgres
- GITEA__database__HOST=db:5432
- GITEA__database__NAME=gitea
- GITEA__database__USER=gitea
- GITEA__database__PASSWD=${DB_PASSWORD}
- GITEA__server__DOMAIN=git.example.com
- GITEA__server__HTTP_PORT=3000
- GITEA__server__ROOT_URL=http://git.example.com:3000
- GITEA__server__SSH_DOMAIN=git.example.com
- GITEA__server__SSH_PORT=2222
- GITEA__server__SSH_LISTEN_PORT=22
volumes:
- ./gitea:/data
- /etc/timezone:/etc/timezone:ro
- /etc/localtime:/etc/localtime:ro
networks:
- gitea-net
networks:
gitea-net:
name: gitea-net
driver: bridge
几个关键配置:
- SSH_PORT=2222:容器内 SSH 监听 22 端口,映射到宿主机 2222,避免与主机 SSH 冲突
- SSH_DOMAIN=git.example.com:SSH 克隆地址显示为
ssh://git@git.example.com:2222/... - USER_UID/GID=1000:与宿主机用户 ID 一致,避免文件权限问题
环境变量 链接到标题
密码单独存放在 .env 文件,不写入 docker-compose.yaml:
DB_PASSWORD=<随机生成的 32 位密码>
启动 链接到标题
cd /opt/gitea-service
docker compose up -d
首次启动会自动拉取镜像并创建容器,PostgreSQL 初始化数据库,Gitea 等待数据库就绪后启动 Web 服务。
初始化配置 链接到标题
浏览器打开 http://git.example.com:3000 进入安装页面:
- 数据库:选择 PostgreSQL,填写
db:5432、gitea、密码 - 服务器:域名
git.example.com,SSH 端口2222,Web 端口3000 - 管理员:创建初始管理员账号
安装完成后通过 API 或 Web UI 创建仓库,即可通过两种协议克隆:
# HTTP
git clone http://git.example.com:3000/用户名/仓库名.git
# SSH
git clone ssh://git@git.example.com:2222/用户名/仓库名.git
禁用开放注册 链接到标题
Gitea 默认允许任何人注册,内网服务应关闭此功能。安装后修改配置文件:
[service]
DISABLE_REGISTRATION = true
容器内配置文件路径 /data/gitea/conf/app.ini,修改后无需重启立即生效。
SSH 公钥认证 链接到标题
用户将本地 SSH 公钥添加到 Gitea 后,即可免密访问:
ssh -p 2222 git@git.example.com
# Hi there, 用户名! You've successfully authenticated...
SSH 协议相比 HTTP 的优势在于免密操作,配合 ssh-agent 使用体验流畅。
Prometheus 监控 链接到标题
Gitea 原生支持 Prometheus metrics,暴露端点 /metrics,涵盖以下指标:
gitea_users— 用户数gitea_repositories— 仓库数gitea_issues— Issue 数gitea_accesses— HTTP 访问次数process_resident_memory_bytes— 进程内存go_goroutines— Goroutine 数
开启方式:在 app.ini 中添加:
[metrics]
ENABLED = true
即可将 Gitea 接入现有 Prometheus + Grafana 监控体系。
日常维护 链接到标题
备份 链接到标题
Gitea 提供内置备份命令:
docker exec gitea gitea dump -c /data/gitea/conf/app.ini
备份文件包含 Git 仓库、数据库、配置文件、附件等全部数据。
版本升级 链接到标题
cd /opt/gitea-service
docker compose pull server
docker compose up -d
Gitea 的数据库迁移会自动执行,升级后验证功能正常即可。
总结 链接到标题
Gitea 部署过程简洁明了,从创建目录到服务启动只需几分钟。PostgreSQL + Docker Compose 的组合兼顾了数据安全与运维便利。对于内网 Git 托管需求,Gitea 是一个零成本、低维护的理想选择。