Compare commits

...

4 Commits

Author SHA1 Message Date
ff0929dc02 support HTTP-only and Caddy (HTTP+HTTPS) modes via compose profiles 2026-04-23 22:20:02 +08:00
866c059ee4 pass DOMAIN env var to caddy container 2026-04-23 21:35:31 +08:00
af7d49b685 switch to Caddy reverse proxy with auto HTTPS
Replace manual nginx + SSL certificates with Caddy for automatic
Let's Encrypt certificate management. Remove direct HTTP port exposure,
route web traffic through Caddy (80/443) via Docker internal network.
SSH remains on port 2222.
2026-04-23 21:05:07 +08:00
83ca0632f6 ADD https cert 2026-04-23 20:37:56 +08:00
5 changed files with 110 additions and 16 deletions

View File

@@ -17,3 +17,11 @@ GITEA__lfs__PATH=/data/git/lfs
# 禁用公开注册(仅管理员可创建账号)
GITEA__service__DISABLE_REGISTRATION=true
# 域名配置
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}/

4
.gitignore vendored
View File

@@ -4,5 +4,9 @@ data/
# 环境变量(可能包含敏感信息)
.env
# Caddy 数据
caddy_data/
caddy_config/
# macOS
.DS_Store

7
Caddyfile Normal file
View File

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

View File

@@ -1,48 +1,95 @@
# Gitea 局域网部署
# Gitea Docker 部署
使用 Docker Compose 部署 Gitea Git 服务。
使用 Docker Compose 部署 Gitea,支持两种模式:
- **HTTP 模式**Gitea 直接暴露端口,仅 HTTP
- **Caddy 模式**:通过 Caddy 反向代理,同时支持 HTTP 和 HTTPS自动证书
## 架构
### HTTP 模式(默认)
```
Client → Gitea (HTTP_PORT, e.g. 3000)
Gitea SSH (22 → 宿主机 SSH_PORT)
```
### Caddy 模式(--profile caddy
```
Client → Caddy (80/443, HTTP + HTTPS) → Gitea (3000, Docker 内部网络)
Gitea SSH (22 → 宿主机 SSH_PORT)
```
## 快速开始
### 1. 配置环境变量
### 前提条件
复制并编辑 `.env` 文件:
- 服务器 `SSH_PORT`(默认 2222端口可从外网访问
- 如使用 Caddy 模式:域名已解析到服务器公网 IP且 80、443 端口可从外网访问
### 1. 配置环境变量
```bash
cp .env.example .env
```
修改端口等配置:
编辑 `.env`,关键配置:
```env
HTTP_PORT=3000 # Web 界面端口
SSH_PORT=2222 # SSH 端口(宿主机端口,容器内仍为 22
DOMAIN=git.example.com # 你的域名
SSH_PORT=2222 # SSH 端口(宿主机端口,容器内仍为 22
```
> `GITEA__server__SSH_PORT` 已通过 `.env` 传递给容器,告知 Gitea 对外 SSH 端口为 `2222`
> 使 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 访问。
### 3. 初始配置
首次访问 `http://<服务器IP>:3000` 会进入安装向导:
首次访问会进入安装向导:
1. 设置管理员账户
2. 配置服务器域名(可选)
3. 数据库已默认使用 SQLite
2. 数据库已默认使用 SQLite
## 访问方式
### HTTP 模式
| 方式 | 地址 |
|-----|------|
| Web 界面 | `http://<IP>:3000` |
| HTTP 克隆 | `git clone http://<IP>:3000/<用户>/<仓库>.git` |
| SSH 克隆 | `git clone ssh://git@<IP>:2222/<用户>/<仓库>.git` |
| 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>:<SSH_PORT>/<用户>/<仓库>.git` |
## Git LFS
@@ -69,6 +116,7 @@ tar -xzvf gitea-backup-20260320.tar.gz
```
重要文件:
- `data/gitea/gitea.db` - 用户和配置数据
- `data/git/repositories/` - 仓库数据
- `data/git/lfs/` - LFS 文件
@@ -76,15 +124,21 @@ tar -xzvf gitea-backup-20260320.tar.gz
## 常用命令
```bash
# 启动
# 启动HTTP 模式)
docker compose up -d
# 启动Caddy 模式)
docker compose --profile caddy up -d
# 停止
docker compose down
# 查看日志
docker compose logs -f
# 查看 Caddy 日志
docker compose logs -f caddy
# 重启
docker compose restart

View File

@@ -8,6 +8,9 @@ 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=${ROOT_URL}
- GITEA__server__DOMAIN=${DOMAIN}
- GITEA__server__SSH_DOMAIN=${DOMAIN}
restart: always
volumes:
- ./data:/data
@@ -15,6 +18,24 @@ services:
- "${HTTP_PORT}:3000"
- "${SSH_PORT}:22"
caddy:
image: caddy:2
container_name: caddy
profiles:
- caddy
environment:
- DOMAIN=${DOMAIN}
restart: always
ports:
- "80:80"
- "443:443"
volumes:
- ./Caddyfile:/etc/caddy/Caddyfile:ro
- ./caddy_data:/data
- ./caddy_config:/config
depends_on:
- gitea
networks:
default:
driver: bridge