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