5.4 KiB
5.4 KiB
Gitea 局域网部署设计
概述
使用 Docker Compose 在局域网中部署 Gitea Git 服务,支持 HTTP 和 SSH 访问,启用 Git LFS 支持。使用 PostgreSQL 替代 SQLite 以获得更好的并发性能(尤其是 LFS 大文件上传)。
需求
- 仅局域网使用
- Docker Compose 容器化部署
- 数据库:PostgreSQL(解决 SQLite 文件锁导致的 LFS 上传瓶颈)
- 访问方式:HTTP + SSH
- 端口配置:通过
.env文件灵活配置 - 数据存储:宿主机目录挂载
- 支持 Git LFS
- 镜像版本:固定版本(避免 latest)
技术选型
| 组件 | 选择 | 说明 |
|---|---|---|
| Gitea 版本 | 1.25.4 | 当前最新稳定版 |
| 数据库 | PostgreSQL 16 | 并发写入性能好,解决 SQLite 文件锁瓶颈 |
| 容器镜像 | gitea/gitea:1.25.4 | 官方镜像,固定版本 |
| 数据库镜像 | postgres:16-alpine | 轻量 PostgreSQL,~80MB |
为什么从 SQLite 迁移到 PostgreSQL
SQLite 使用文件级写锁,在 LFS 大文件上传时,元数据写入被串行化,导致上传速度被限制在约 1.7 MB/s。PostgreSQL 支持并发写入,消除了这个瓶颈。
目录结构
gitea/
├── docker-compose.yml # 容器编排配置
├── .env # 环境变量(端口等配置)
├── .env.example # 环境变量示例
├── .gitignore # 忽略数据目录和敏感文件
├── Caddyfile # Caddy 反向代理配置(可选)
├── README.md # 使用说明
└── data/ # Gitea 数据(挂载目录)
├── git/ # Git 仓库数据
│ ├── repositories/ # 仓库存储
│ └── lfs/ # LFS 文件存储
├── gitea/ # Gitea 配置
│ ├── gitea.db # SQLite 数据库(迁移后保留作备份)
│ └── conf/app.ini # 配置文件
├── postgres/ # PostgreSQL 数据
└── ssh/ # SSH 密钥
配置文件
.env - 环境变量
# 镜像版本
GITEA_VERSION=1.25.4
# 端口配置
HTTP_PORT=3000
SSH_PORT=2222
# 时区
TZ=Asia/Shanghai
# PostgreSQL 配置
POSTGRES_VERSION=16-alpine
POSTGRES_DB=gitea
POSTGRES_USER=gitea
POSTGRES_PASSWORD=changeme
# Git LFS 配置
GITEA__lfs__START_SERVER=true
GITEA__lfs__PATH=/data/git/lfs
# 禁用公开注册
GITEA__service__DISABLE_REGISTRATION=true
# 域名配置
DOMAIN=git.example.com
ROOT_URL=http://${DOMAIN}:${HTTP_PORT}/
docker-compose.yml
Gitea 服务
- 镜像:
gitea/gitea:${GITEA_VERSION} - 端口映射:
${HTTP_PORT}:3000- Web 界面和 HTTP Git 操作${SSH_PORT}:22- SSH Git 操作
- 数据卷挂载:
./data:/data - 环境变量:从
.env文件读取(数据库连接通过GITEA__database__*环境变量覆盖 app.ini) - 依赖:
postgres(健康检查通过后启动) - 重启策略:
always
PostgreSQL 服务
- 镜像:
postgres:${POSTGRES_VERSION}(默认 16-alpine) - 环境变量:
POSTGRES_DB、POSTGRES_USER、POSTGRES_PASSWORD - 数据卷挂载:
./data/postgres:/var/lib/postgresql/data - 健康检查:
pg_isready,5 秒间隔,3 秒超时,5 次重试 - 重启策略:
always
Caddy 服务(可选,--profile caddy)
- 镜像:
caddy:2 - 端口:80、443
- 配置:
./Caddyfile只读挂载 - 依赖:
gitea
.gitignore
忽略 data/ 目录、.env 文件、Caddy 数据目录(避免敏感信息提交)
数据库配置说明
数据库配置通过 docker-compose.yml 中的 GITEA__database__* 环境变量设置,优先级高于 app.ini:
| 环境变量 | 值 | 说明 |
|---|---|---|
GITEA__database__DB_TYPE |
postgres |
数据库类型 |
GITEA__database__HOST |
postgres:5432 |
Docker 内部网络连接 |
GITEA__database__NAME |
${POSTGRES_DB} |
数据库名 |
GITEA__database__USER |
${POSTGRES_USER} |
用户名 |
GITEA__database__PASSWD |
${POSTGRES_PASSWORD} |
密码 |
数据存储说明
| 数据类型 | 容器内路径 | 宿主机路径 |
|---|---|---|
| PostgreSQL 数据 | /var/lib/postgresql/data | ./data/postgres/ |
| Git 仓库 | /data/git/repositories/ | ./data/git/repositories/ |
| SSH 密钥 | /data/git/.ssh/ | ./data/git/.ssh/ |
| LFS 文件 | /data/git/lfs/ | ./data/git/lfs/ |
| 配置文件 | /data/gitea/conf/app.ini | ./data/gitea/conf/app.ini |
使用方式
启动服务
docker compose up -d
访问方式
- Web 界面:
http://<服务器IP>:3000 - HTTP 克隆:
git clone http://<服务器IP>:3000/用户/仓库.git - SSH 克隆:
git clone ssh://git@<服务器IP>:2222/用户/仓库.git
初始配置
首次访问 Web 界面会进入安装向导,需要:
- 设置管理员账户
- 数据库已通过环境变量配置为 PostgreSQL,无需手动设置
备份
# 导出数据库
docker exec postgres pg_dump -U gitea gitea > gitea-db-$(date +%Y%m%d).sql
# 备份数据目录
tar -czvf gitea-data-$(date +%Y%m%d).tar.gz data/
文件清单
| 文件 | 职责 |
|---|---|
docker-compose.yml |
容器编排:Gitea + PostgreSQL + Caddy |
.env |
环境变量:版本、端口、数据库、域名 |
.env.example |
环境变量示例 |
.gitignore |
忽略数据目录和敏感文件 |
Caddyfile |
Caddy 反向代理配置 |
README.md |
使用说明文档 |