在现代 Web 服务部署中,Caddy 凭借其自动 HTTPS(内置 Let’s Encrypt 证书申请与续期)、极其简单的配置语法以及高性能,成为了 Nginx 的强力替代品。
本文将介绍如何使用 Docker Compose 部署 Caddy,并通过 Cloudflare DNS 插件 来支持内网服务或隐藏真实 IP 的服务器自动签发通配符(泛域名)SSL 证书。
一. 准备工作
在开始之前,请确保您的服务器满足以下条件:
- 已安装 Docker 和 Docker Compose。
- 拥有一台域名,并且 DNS 解析托管在 Cloudflare。
- 在 Cloudflare 后台生成一个具有 DNS 编辑权限 的
API Token。
二. 编写 Docker Compose 配置文件
我们需要一个包含 Cloudflare DNS 插件的 Caddy 镜像(官方基础镜像默认不包含第三方 DNS 插件,但通常我们可以通过官方的带插件镜像,或者使用标准镜像并在构建时处理。注意: 如果使用 Cloudflare 插件自动签发证书,推荐使用专门打包了插件的镜像,例如 lucaslorentz/caddy-docker-proxy 或带有插件的自定义镜像。为了简单起见,这里提供标准的 Caddy Docker 配置模板)。
提示: 如果您的 Caddy 需要使用 Cloudflare 插件来自动签发 DNS 验证证书,标准的
caddy:latest镜像需要重新编译或使用集成插件的镜像(如hairyhenderson/caddy-dns-cloudflare或自定义 Dockerfile)。以下为您提供完整的标准配置代码。
完整 docker-compose.yml 代码
services:
caddy:
image: caddy:latest
container_name: caddy
restart: unless-stopped
ports:
- "80:80"
- "443:443"
environment:
- CLOUDFLARE_API_TOKEN=1TPfioUUdae_rG8XxaQi5rEb50Vi1WmN7kk2Yc0V
volumes:
- ./Caddyfile:/etc/caddy/Caddyfile
- ./data:/data
- ./config:/config
networks:
- caddy_network
networks:
caddy_network:
driver: bridge
三. 创建配置文件 (Caddyfile)
在 docker-compose.yml 的同级目录下创建一个名为 Caddyfile 的文件,用于编写您的反向代理规则。
Caddyfile 示例:
# 示例 1:基础反向代理
yourdomain.com {
reverse_proxy 192.168.1.100:8080
}
# 示例 2:泛域名与自动 HTTPS
*.yourdomain.com {
tls {
dns cloudflare 1TPfioUUdae_rG8XxaQi5rEb50Vi1WmN7kk2Yc0V
}
# 子域名映射
@app host app.yourdomain.com
handle @app {
reverse_proxy 192.168.1.101:3000
}
}
四. 启动与验证
- 创建目录并放好文件:在服务器上新建一个文件夹(例如
/data/caddy),将docker-compose.yml和Caddyfile放入其中。 - 启动容器:在文件所在目录下执行以下命令后台启动服务:
Bashdocker-compose up -d - 查看运行日志:通过查看日志检查 Caddy 是否成功启动以及证书申请状态:
Bashdocker-compose logs -f caddy
五. 总结
通过 Docker 部署 Caddy 能够极大地简化我们的运维流程。结合 Cloudflare API Token,我们可以轻松实现无需暴露 80 端口(通过 DNS-01 验证)的安全证书自动签发。希望这篇文章能帮助你快速搭建高效的反向代理服务!