背景 链接到标题

团队或个人笔记、代码需要版本管理,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 进入安装页面:

  1. 数据库:选择 PostgreSQL,填写 db:5432gitea、密码
  2. 服务器:域名 git.example.com,SSH 端口 2222,Web 端口 3000
  3. 管理员:创建初始管理员账号

安装完成后通过 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 是一个零成本、低维护的理想选择。