support HTTP-only and Caddy (HTTP+HTTPS) modes via compose profiles

This commit is contained in:
2026-04-23 22:20:02 +08:00
parent 866c059ee4
commit ff0929dc02
4 changed files with 66 additions and 18 deletions

View File

@@ -18,5 +18,10 @@ GITEA__lfs__PATH=/data/git/lfs
# 禁用公开注册(仅管理员可创建账号)
GITEA__service__DISABLE_REGISTRATION=true
# 域名配置Caddy 反向代理 + 自动 HTTPS
# 域名配置
DOMAIN=git.example.com
# ROOT_URL决定 Gitea UI 中的链接生成
# 不使用 Caddy仅 HTTPROOT_URL=http://${DOMAIN}:${HTTP_PORT}/
# 使用 CaddyHTTP + HTTPSROOT_URL=https://${DOMAIN}/
ROOT_URL=http://${DOMAIN}:${HTTP_PORT}/

View File

@@ -1,3 +1,7 @@
{$DOMAIN} {
http://{$DOMAIN} {
reverse_proxy gitea:3000
}
https://{$DOMAIN} {
reverse_proxy gitea:3000
}

View File

@@ -1,24 +1,32 @@
# Gitea Docker 部署Caddy 反向代理 + 自动 HTTPS
# Gitea Docker 部署
使用 Docker Compose 部署 Gitea通过 Caddy 反向代理实现自动 HTTPSLet's Encrypt
使用 Docker Compose 部署 Gitea支持两种模式:
- **HTTP 模式**Gitea 直接暴露端口,仅 HTTP
- **Caddy 模式**:通过 Caddy 反向代理,同时支持 HTTP 和 HTTPS自动证书
## 架构
### HTTP 模式(默认)
```
Client → Caddy (80/443, 自动 HTTPS) → Gitea (3000, Docker 内部网络)
Gitea SSH (22 → 宿主机 2222)
Client → Gitea (HTTP_PORT, e.g. 3000)
Gitea SSH (22 → 宿主机 SSH_PORT)
```
- **Caddy** 处理 HTTPS 证书的自动申请、续期和 HTTP→HTTPS 重定向
- **Gitea** Web 流量通过 Docker 内部网络由 Caddy 代理,不直接暴露端口
- **SSH** 直接映射到宿主机 2222 端口,不经过 Caddy
### Caddy 模式(--profile caddy
```
Client → Caddy (80/443, HTTP + HTTPS) → Gitea (3000, Docker 内部网络)
Gitea SSH (22 → 宿主机 SSH_PORT)
```
## 快速开始
### 前提条件
- 域名已解析到服务器公网 IP
- 服务器 80、443、2222 端口可从外网访问
- 服务器 `SSH_PORT`(默认 2222端口可从外网访问
- 如使用 Caddy 模式:域名已解析到服务器公网 IP 80、443 端口可从外网访问
### 1. 配置环境变量
@@ -29,34 +37,59 @@ cp .env.example .env
编辑 `.env`,关键配置:
```env
DOMAIN=git.example.com # 你的域名Caddy 将为此域名申请 HTTPS 证书)
DOMAIN=git.example.com # 你的域名
SSH_PORT=2222 # SSH 端口(宿主机端口,容器内仍为 22
```
> `GITEA__server__SSH_PORT` 通过 `.env` 传递给容器,使 Web 界面中的 SSH clone 地址正确显示端口号。
#### HTTP 模式
```env
ROOT_URL=http://git.example.com:3000/
```
#### Caddy 模式
```env
ROOT_URL=https://git.example.com/
```
### 2. 启动服务
```bash
# HTTP 模式(仅 Gitea无 Caddy
docker compose up -d
# Caddy 模式HTTP + HTTPSCaddy 反向代理)
docker compose --profile caddy up -d
```
Caddy 会自动为 `DOMAIN` 申请 Let's Encrypt 证书,稍等片刻后即可通过 HTTPS 访问。
> Caddy 会自动为 `DOMAIN` 申请 Let's Encrypt 证书,稍等片刻后即可通过 HTTPS 访问。
### 3. 初始配置
首次访问 `https://<DOMAIN>` 会进入安装向导:
首次访问会进入安装向导:
1. 设置管理员账户
2. 数据库已默认使用 SQLite
## 访问方式
### HTTP 模式
| 方式 | 地址 |
|-----|------|
| Web 界面 | `http://<DOMAIN>:<HTTP_PORT>` |
| HTTP 克隆 | `git clone http://<DOMAIN>:<HTTP_PORT>/<用户>/<仓库>.git` |
| SSH 克隆 | `git clone ssh://git@<DOMAIN>:<SSH_PORT>/<用户>/<仓库>.git` |
### Caddy 模式
| 方式 | 地址 |
|-----|------|
| Web 界面 | `https://<DOMAIN>` |
| HTTP 克隆 | `git clone http://<DOMAIN>/<用户>/<仓库>.git` |
| HTTPS 克隆 | `git clone https://<DOMAIN>/<用户>/<仓库>.git` |
| SSH 克隆 | `git clone ssh://git@<DOMAIN>:2222/<用户>/<仓库>.git` |
| SSH 克隆 | `git clone ssh://git@<DOMAIN>:<SSH_PORT>/<用户>/<仓库>.git` |
## Git LFS
@@ -91,9 +124,12 @@ tar -xzvf gitea-backup-20260320.tar.gz
## 常用命令
```bash
# 启动
# 启动HTTP 模式)
docker compose up -d
# 启动Caddy 模式)
docker compose --profile caddy up -d
# 停止
docker compose down

View File

@@ -8,18 +8,21 @@ services:
- GITEA__lfs__PATH=${GITEA__lfs__PATH}
- GITEA__service__DISABLE_REGISTRATION=${GITEA__service__DISABLE_REGISTRATION}
- GITEA__server__SSH_PORT=${GITEA__server__SSH_PORT}
- GITEA__server__ROOT_URL=https://${DOMAIN}/
- GITEA__server__ROOT_URL=${ROOT_URL}
- GITEA__server__DOMAIN=${DOMAIN}
- GITEA__server__SSH_DOMAIN=${DOMAIN}
restart: always
volumes:
- ./data:/data
ports:
- "${HTTP_PORT}:3000"
- "${SSH_PORT}:22"
caddy:
image: caddy:2
container_name: caddy
profiles:
- caddy
environment:
- DOMAIN=${DOMAIN}
restart: always