add PostgreSQL to replace SQLite for better LFS upload concurrency

This commit is contained in:
2026-04-27 15:35:34 +08:00
parent ff0929dc02
commit b68c715f6b
5 changed files with 244 additions and 194 deletions

View File

@@ -11,14 +11,16 @@
```
Client → Gitea (HTTP_PORT, e.g. 3000)
Gitea SSH (22 → 宿主机 SSH_PORT)
├─ PostgreSQL (5432, Docker 内部网络)
└─ Gitea SSH (22 → 宿主机 SSH_PORT)
```
### Caddy 模式(--profile caddy
```
Client → Caddy (80/443, HTTP + HTTPS) → Gitea (3000, Docker 内部网络)
Gitea SSH (22 → 宿主机 SSH_PORT)
├─ PostgreSQL (5432, Docker 内部网络)
└─ Gitea SSH (22 → 宿主机 SSH_PORT)
```
## 快速开始
@@ -39,6 +41,7 @@ cp .env.example .env
```env
DOMAIN=git.example.com # 你的域名
SSH_PORT=2222 # SSH 端口(宿主机端口,容器内仍为 22
POSTGRES_PASSWORD=changeme # PostgreSQL 密码(务必修改)
```
#### HTTP 模式
@@ -56,7 +59,7 @@ ROOT_URL=https://git.example.com/
### 2. 启动服务
```bash
# HTTP 模式(仅 Gitea无 Caddy
# HTTP 模式(仅 Gitea + PostgreSQL,无 Caddy
docker compose up -d
# Caddy 模式HTTP + HTTPSCaddy 反向代理)
@@ -70,7 +73,7 @@ docker compose --profile caddy up -d
首次访问会进入安装向导:
1. 设置管理员账户
2. 数据库已默认使用 SQLite
2. 数据库已通过环境变量配置为 PostgreSQL无需手动设置
## 访问方式
@@ -105,21 +108,84 @@ git push
## 数据备份
备份 `data/` 目录:
### 备份 PostgreSQL 数据库
```bash
# 备份
tar -czvf gitea-backup-$(date +%Y%m%d).tar.gz data/
docker exec postgres pg_dump -U gitea gitea > gitea-db-$(date +%Y%m%d).sql
```
# 恢复
tar -xzvf gitea-backup-20260320.tar.gz
### 备份全部数据
```bash
# 备份数据目录 + 数据库导出
tar -czvf gitea-data-$(date +%Y%m%d).tar.gz data/
docker exec postgres pg_dump -U gitea gitea > gitea-db-$(date +%Y%m%d).sql
```
### 恢复数据库
```bash
cat gitea-db-20260327.sql | docker exec -i postgres psql -U gitea gitea
```
重要文件:
- `data/gitea/gitea.db` - 用户和配置数据
- `data/postgres/` - PostgreSQL 数据
- `data/git/repositories/` - 仓库数据
- `data/git/lfs/` - LFS 文件
- `data/gitea/conf/app.ini` - Gitea 配置
## SQLite 迁移到 PostgreSQL
如果之前使用 SQLite需执行以下步骤迁移到 PostgreSQL
### 1. 停止 Gitea保留 PostgreSQL 运行)
```bash
docker compose stop gitea
```
### 2. 备份现有数据
```bash
cp data/gitea/gitea.db data/gitea/gitea.db.bak
```
### 3. 修改 app.ini 数据库配置
编辑 `data/gitea/conf/app.ini`,将 `[database]` 段改为:
```ini
[database]
DB_TYPE = postgres
HOST = postgres:5432
NAME = gitea
USER = gitea
PASSWD = <你的 POSTGRES_PASSWORD>
SCHEMA =
SSL_MODE = disable
PATH =
```
> 注意:如果 docker-compose.yml 中已通过 `GITEA__database__*` 环境变量配置,则 app.ini 中的值会被覆盖,可不修改 app.ini。
### 4. 执行数据迁移
```bash
docker compose exec gitea gitea migrate
```
### 5. 重启 Gitea
```bash
docker compose start gitea
```
### 6. 验证
访问 Web 界面,确认用户、仓库数据完整。
> 迁移成功后 `data/gitea/gitea.db` 可以保留作为备份,不会影响 PostgreSQL 运行。
## 常用命令
@@ -136,6 +202,9 @@ docker compose down
# 查看日志
docker compose logs -f
# 查看 PostgreSQL 日志
docker compose logs -f postgres
# 查看 Caddy 日志
docker compose logs -f caddy
@@ -145,4 +214,7 @@ docker compose restart
# 更新版本
# 修改 .env 中的 GITEA_VERSION 后
docker compose up -d
# 连接 PostgreSQL
docker exec -it postgres psql -U gitea
```