适用于在 VPS 上部署 Caddy 作为统一反向代理入口,配合 Docker Compose、模块化配置结构、自动 HTTPS 证书管理等最佳实践。
# Caddy 统一反向代理部署指南(Docker Compose 模板)
本项目用于在 VPS 上部署 Caddy,作为所有服务的统一入口,支持自动 HTTPS、模块化配置、反代多个容器服务(如 Portainer、Yacht、WordPress、Typecho 等)。目录结构清晰,适合长期维护和扩展。
---
## 📁 项目结构
/opt/docker-stack/
├── caddy/
├── compose.yaml # Docker Compose 主配置文件
├── Caddyfile # 主 Caddy 配置文件(引用子配置)
├── conf.d/ # 每个服务一个子配置文件
│ ├── portainer.caddy
│ ├── yacht.caddy
│ └── typecho.caddy
├── data/
├── certs-caddy/ # 自动 HTTPS 证书存储目录
└── config/ # Caddy 内部状态缓存
代码
---
## 🚀 安装步骤
### 1. 创建网络(供 Caddy 与其他容器通信)
```bash
docker network create caddy_net
2. 编写 compose.yaml
yaml
version: "3.8"
services:
caddy:
image: caddy:latest
container_name: caddy
restart: unless-stopped
ports:
- "80:80"
- "443:443"
volumes:
- ./Caddyfile:/etc/caddy/Caddyfile
- ./conf.d:/etc/caddy/conf.d
- ./data/certs-caddy:/data
- ./data/config:/config
- /var/run/docker.sock:/var/run/docker.sock # 可选:用于自动服务发现
networks:
- caddy_net
networks:
caddy_net:
external: true
3. 编写主 Caddyfile
caddyfile
# 导入所有 conf.d 子配置文件
import /etc/caddy/conf.d/*.caddy
4. 编写子配置文件(示例)
conf.d/portainer.caddy
caddyfile
portainer.example.com {
reverse_proxy portainer:9000
}
conf.d/typecho.caddy
caddyfile
blog.example.com {
root * /var/www/html
php_fastcgi typecho:9000
file_server
encode gzip
rewrite * /index.php
}
✅ 启动服务
bash
cd /opt/docker-stack/caddy
docker compose up -d
🔐 HTTPS 证书说明
所有证书自动存储在 data/certs-caddy/ 目录下,由 Caddy 自动申请和续签(使用 Let’s Encrypt)。
不建议手动修改该目录内容。
若需迁移或备份,请保留该目录以避免重新申请证书。
🧠 config 目录说明
data/config/ 用于存储 Caddy 的运行状态、配置缓存等。
若使用 Caddy API 动态配置,该目录会自动更新。
静态配置用户可忽略该目录,但仍建议保留。
🧩 服务接入建议
所有服务(如 Portainer、Yacht、WordPress)需加入 caddy_net 网络。
在各自的 Compose 文件中添加:
yaml
networks:
- caddy_net
📖 参考文档
Caddy 官方文档
Docker Compose 官方文档
Caddy Docker 镜像说明
🎯 总结
Caddy 是现代、高性能的反向代理服务器,支持自动 HTTPS 和模块化配置。
本模板结构清晰,适合长期维护和多服务扩展。
推荐配合 Portainer/Yacht 做容器管理,Prometheus/Grafana 做监控,实现完整替代 1Panel 的架构。
评论(没有评论)