Gitea 自托管 Git 服务部署指南:从 NAS 到云服务器
前言:为什么自托管 Git?
GitHub 很好用,但自建 Git 服务在以下场景中有着不可替代的价值:
- 数据主权:代码完全在你自己的硬盘上,不怕服务关停或政策变动
- 局域网速度:NAS 在本地网络,clone/push 跑满千兆,体验丝滑
- 免费私有仓库:不限数量、不限容量,随便建
- 低延迟:代码就在家里,无需穿越半个互联网
- 团队协作:给社团/小团队搭建内部代码仓库,管理更方便
Gitea 是用 Go 写的轻量级自托管 Git 服务,界面清爽、资源占用极低。我分别在家里的绿联 NAS 和阿里云服务器上各部署了一套——前者自用,后者给人工智能协会做团队仓库。这篇文章把两种方案的完整过程都记录下来。
方案一:NAS 手动 Docker Compose(个人/轻量)
环境
| 项目 | 配置 |
|---|---|
| NAS | 绿联 DXP2800 |
| CPU | Intel N100(4 核) |
| 内存 | 8GB DDR5 |
| 系统 | Debian 12 |
| 数据库 | SQLite3(零维护) |
docker-compose.yml
services:
gitea:
image: gitea/gitea:latest
restart: unless-stopped
volumes:
- /volume1/docker/gitea/data:/data
- /etc/localtime:/etc/localtime:ro
ports:
- "3000:3000"
- "2222:22"
environment:
- TZ=Asia/Shanghai
- USER_UID=1000
- USER_GID=1000
- GITEA__database__DB_TYPE=sqlite3
- GITEA__server__DOMAIN=192.168.5.8
- GITEA__server__SSH_DOMAIN=192.168.5.8
- GITEA__server__SSH_PORT=2222
- GITEA__server__ROOT_URL=http://192.168.5.8:3000/
- GITEA__server__HTTP_PORT=3000
mem_limit: 512m
cpus: 1
配置要点
| 配置 | 说明 |
|---|---|
| SQLite3 | 个人场景首选,零配置、零维护,备份只需复制一个文件 |
2222:22 |
NAS 自身的 SSH 已占用 22,Gitea 映射到 2222 避让 |
mem_limit: 512m |
Gitea 实际运行仅 ~180MB,512MB 足够且有余量 |
/etc/localtime:ro |
容器内时间与宿主机保持一致 |
unless-stopped |
NAS 重启后容器自动恢复 |
启动后访问 http://192.168.5.8:3000,按安装向导完成即可——首个注册用户自动成为管理员。
SSH 克隆地址
由于 SSH 端口是 2222,克隆地址为:
ssh://git@192.168.5.8:2222/用户名/仓库名.git
推荐在客户端 ~/.ssh/config 中配置别名:
Host gitea-nas
HostName 192.168.5.8
Port 2222
User git
IdentityFile ~/.ssh/id_ed25519
之后就能用 git clone gitea-nas:用户名/仓库名.git 了。
方案二:云服务器 1Panel 部署(团队/生产)
环境
| 项目 | 配置 |
|---|---|
| 服务器 | 阿里云 ECS |
| 管理面板 | 1Panel |
| 数据库 | PostgreSQL 16 |
| Gitea 版本 | Gitea Enterprise Edition 25.5.0 |
| 用途 | 河南理工大学人工智能协会团队仓库 |
为什么选 1Panel?
1Panel 是一个开源的 Linux 服务器管理面板,可以一键安装 Gitea,自动处理数据库创建、端口配置、环境变量等。对于不熟悉命令行运维的同学来说门槛更低。
通过 1Panel 安装
在 1Panel 的「应用商店」中搜索 Gitea,点安装即可。1Panel 会自动生成如下 docker-compose.yml(简化版):
networks:
1panel-network:
external: true
services:
gitea:
image: commitgo/gitea-ee:25.5.0
container_name: 1Panel-gitea-x2k3
restart: always
environment:
- USER_UID=1000
- USER_GID=1000
- GITEA__database__DB_TYPE=postgres
- GITEA__database__HOST=postgresql:5432
- GITEA__database__NAME=gitea_bn223b
- GITEA__database__USER=gitea_r7Zp2F
- GITEA__database__PASSWD=********
ports:
- "3000:3000"
- "222:22"
volumes:
- ./data:/data
- /etc/localtime:/etc/localtime:ro
networks:
- 1panel-network
与 NAS 方案的关键差异
| 对比维度 | NAS 方案 | 云服务器方案 |
|---|---|---|
| 数据库 | SQLite3 | PostgreSQL |
| 部署方式 | 手写 docker-compose | 1Panel 面板管理 |
| 镜像版本 | gitea/gitea:latest |
commitgo/gitea-ee:25.5.0(企业版) |
| SSH 端口 | 2222 | 222 |
| 资源限制 | 512MB / 1 核 | 无硬限制 |
| 离线模式 | 关闭 | 开启(公网无需外部连接) |
| 适用场景 | 个人/家庭 | 团队/组织 |
为什么团队协作选 PostgreSQL?
- 并发支持更好:多人同时 push/pull 时,PostgreSQL 的 MVCC 机制比 SQLite3 更适合
- 数据完整性:更强的约束和事务保证
- 备份恢复:PostgreSQL 有成熟的
pg_dump和 WAL 归档方案
为什么选 Gitea EE(企业版)?
Gitea Enterprise Edition 相比社区版多了:
- 更细粒度的权限控制
- 分支保护规则增强
- 更好的团队管理功能
对于有 10+ 成员的社团来说,这些功能很实用。生成环境中建议锁定镜像版本(如 25.5.0),不要追 latest。
通用配置
以下是两个环境共通的配置项,直接在 app.ini 中修改(或通过环境变量注入)。
QQ 邮箱 SMTP 通知
[mailer]
ENABLED = true
SMTP_ADDR = smtp.qq.com
SMTP_PORT = 465
FROM = Gitea <your_email@qq.com>
USER = your_email@qq.com
PASSWD = 你的QQ邮箱授权码
QQ 邮箱需要用授权码而非登录密码。在 QQ 邮箱设置 → 账户 → POP3/IMAP/SMTP 中生成。
开启 Git LFS
存储模型权重、数据集、设计稿等大文件:
[lfs]
PATH = /data/git/lfs
[server]
LFS_START_SERVER = true
OpenID 登录
方便非注册用户通过第三方身份登录:
[openid]
ENABLE_OPENID_SIGNIN = true
ENABLE_OPENID_SIGNUP = true
安全建议
- 关闭自主注册:
DISABLE_REGISTRATION = true(仅管理员创建账号) - 开启验证码:
ENABLE_CAPTCHA = true - 锁定安装页面:
INSTALL_LOCK = true(防止被他人重新初始化)
日常维护
数据备份
# NAS:备份整个数据目录
cd /volume1/docker/gitea
docker compose down
tar -czf gitea-backup-$(date +%Y%m%d).tar.gz data/
docker compose up -d
# 云服务器:同时备份 Gitea 数据 + PostgreSQL 数据库
docker exec -t postgresql pg_dump -U gitea_user gitea_db > gitea_db_backup.sql
tar -czf gitea-backup-$(date +%Y%m%d).tar.gz /opt/1panel/apps/gitea/gitea/data/ gitea_db_backup.sql
建议用 cron 定时自动执行。
版本更新
# NAS
cd /volume1/docker/gitea
docker compose pull && docker compose up -d
# 云服务器(1Panel)
# 在 1Panel 面板中点击「升级」即可
Gitea 更新频繁且向后兼容性很好,建议每月更新一次。锁版本的云服务器可以在测试环境验证后再升级。
健康监控
# 检查服务可达性
curl -o /dev/null -s -w "%{http_code}" http://192.168.5.8:3000
# 查看资源占用
docker stats gitea --no-stream
NAS 上的实例 CPU 常年在 0.3% 以下,内存约 180MB。云服务器上因有多人使用,资源占用会稍高一些。
总结
| 维度 | NAS 方案 | 云服务器方案 |
|---|---|---|
| 部署难度 | 复制粘贴 YAML | 面板点几下 |
| 资源占用 | CPU < 1%,内存 < 200MB | 取决于使用量 |
| 数据库 | SQLite3(零维护) | PostgreSQL(生产级) |
| 适用场景 | 个人项目、代码备份 | 团队协作、对外服务 |
| 外网访问 | 需额外配置 | 天然支持 |
| 成本 | 0(已有 NAS) | 云服务器费用 |
两套方案各有用处:NAS 上的 Gitea 放我的个人项目和学习代码,局域网用着飞快;云服务器上的协会 Gitea 让社团成员协作开发,公网随时访问。
如果你想拥有一台自己的 GitHub,今晚就可以动手试试看。
NAS:绿联 DXP2800 (N100/8GB/Debian 12) · Docker Compose · Gitea latest
云服务器:阿里云 ECS · 1Panel · Gitea EE 25.5.0 · PostgreSQL 16
评论交流
欢迎留下你的想法