Caddy¶
| 项目 | 内容 |
|---|---|
| 部署位置 | cls1-gateway、jp-2 |
| 依赖 | Docker、DNS、Cloudflare API Token |
| 使用方 | Grafana、LLDAP、Headscale、DERP |
搭建¶
准备目录和凭据¶
两台主机都创建配置和数据目录。jp-2 还保存 Headscale UI 和访问日志:
ACME HTTP Challenge 需要 CA 从 80/TCP 访问验证文件。cls1-gateway 无法使用这个端口,
所以通过 Cloudflare DNS API 完成 DNS Challenge。该主机的 HTTP 和 HTTPS 入口分别使用
8080/TCP 和 8443/TCP,下面的 Caddyfile 和访问地址使用这两个端口。
将限定域名范围的 API Token 写入环境文件:
| cls1-gateway:/srv/docker/caddy/caddy.env | |
|---|---|
配置 Compose 项目¶
项目目录为 /srv/docker/caddy:
镜像包含 Cloudflare DNS 模块。Token 保存在环境文件中。
写入 Compose 文件后先检查语法:
配置入口¶
| /srv/docker/caddy/conf/Caddyfile | |
|---|---|
用 Compose 镜像检查模块和 Caddyfile,再启动容器:
维护¶
配置重载失败¶
新增入口前检查 DNS、后端地址、访问范围和 ACME DNS challenge。
迁移 Caddy¶
/srv/docker/caddy/data 包含 ACME 账户和证书。升级或迁移前备份该目录。Cloudflare Token
只授予所需域名的 DNS 权限。
TLS 失败或入口返回 502¶
- TLS 失败时,检查 DNS、系统时间、Token 权限和 ACME 日志
- 返回 502 时,检查后端地址、容器状态和
network_mode: host配置 - IPv4 和 IPv6 结果不同时,分别运行
curl -4和curl -6 - 重载失败时,修复配置并重新运行
validate