diff --git a/.env.example b/.env.example index bb6c397..d814103 100644 --- a/.env.example +++ b/.env.example @@ -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(仅 HTTP):ROOT_URL=http://${DOMAIN}:${HTTP_PORT}/ +# 使用 Caddy(HTTP + HTTPS):ROOT_URL=https://${DOMAIN}/ +ROOT_URL=http://${DOMAIN}:${HTTP_PORT}/ diff --git a/Caddyfile b/Caddyfile index e205978..20d33e0 100644 --- a/Caddyfile +++ b/Caddyfile @@ -1,3 +1,7 @@ -{$DOMAIN} { +http://{$DOMAIN} { + reverse_proxy gitea:3000 +} + +https://{$DOMAIN} { reverse_proxy gitea:3000 } diff --git a/README.md b/README.md index 3b0264d..faed507 100644 --- a/README.md +++ b/README.md @@ -1,24 +1,32 @@ -# Gitea Docker 部署(Caddy 反向代理 + 自动 HTTPS) +# Gitea Docker 部署 -使用 Docker Compose 部署 Gitea,通过 Caddy 反向代理实现自动 HTTPS(Let'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 + HTTPS,Caddy 反向代理) +docker compose --profile caddy up -d ``` -Caddy 会自动为 `DOMAIN` 申请 Let's Encrypt 证书,稍等片刻后即可通过 HTTPS 访问。 +> Caddy 会自动为 `DOMAIN` 申请 Let's Encrypt 证书,稍等片刻后即可通过 HTTPS 访问。 ### 3. 初始配置 -首次访问 `https://` 会进入安装向导: +首次访问会进入安装向导: 1. 设置管理员账户 2. 数据库已默认使用 SQLite ## 访问方式 +### HTTP 模式 + +| 方式 | 地址 | +|-----|------| +| Web 界面 | `http://:` | +| HTTP 克隆 | `git clone http://:/<用户>/<仓库>.git` | +| SSH 克隆 | `git clone ssh://git@:/<用户>/<仓库>.git` | + +### Caddy 模式 + | 方式 | 地址 | |-----|------| | Web 界面 | `https://` | +| HTTP 克隆 | `git clone http:///<用户>/<仓库>.git` | | HTTPS 克隆 | `git clone https:///<用户>/<仓库>.git` | -| SSH 克隆 | `git clone ssh://git@:2222/<用户>/<仓库>.git` | +| SSH 克隆 | `git clone ssh://git@:/<用户>/<仓库>.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 diff --git a/docker-compose.yml b/docker-compose.yml index 16b4e03..5b611f7 100644 --- a/docker-compose.yml +++ b/docker-compose.yml @@ -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