Caddy — 本地应用的泛域名反向代理
用途 该技能用于将 *.YOUR_DOMAIN 形式的子域名通过 Caddy 反向代理路由到本地服务,并自动使用 Let's Encrypt 证书提供 HTTPS。它专为仅通过 Tailscale 访问的场景设计,不进行公网暴露。
DNS 提供商说明 本技能使用 Vercel DNS 完成 DNS-01 ACME 挑战。如果使用其他 DNS 提供商,需要将 caddy-dns/vercel 插件和 TLS 片段替换为该提供商对应的等价方案(参见 caddy-dns)。
添加新应用
- 创建后台服务(macOS 使用 LaunchAgent,Linux 使用 systemd),模板见 reference.md。
- 在 Caddyfile(~/.config/caddy/Caddyfile)中添加:
appname.YOUR_DOMAIN { import vercel_tls reverse_proxy localhost:31XX }
- 同时在顶部仪表盘 HTML 块中添加一个 <li> 条目。
- 重载 Caddy:
~/.local/bin/caddy reload --config ~/.config/caddy/Caddyfile --address localhost:2019
TLS 证书签发需要 30–60 秒(DNS-01 挑战)。
如果连接到 OpenClaw Gateway,请参阅本文件夹中的 OPENCLAW.md 获取网关专用配置。
快速开发服务器 配套技能:dev-serve — 一条命令启动开发服务器并完成 Caddy 路由。
dev-serve up ~/projects/myapp # → https://myapp.YOUR_DOMAIN dev-serve down myapp dev-serve ls
重载 / 重启
重载配置(无需重启,无需 sudo)
~/.local/bin/caddy reload --config ~/.config/caddy/Caddyfile --address localhost:2019
完全重启
macOS:
sudo launchctl unload /Library/LaunchDaemons/com.caddyserver.caddy.plist sudo launchctl load /Library/LaunchDaemons/com.caddyserver.caddy.plist
Linux:
systemctl --user restart caddy
故障排查
- 证书未签发:tail -50 /var/log/caddy-error.log | grep -i error — 可能是 Vercel API 令牌过期。
- DNS 未解析:dig +short appname.YOUR_DOMAIN — 应返回你的 Tailscale IP。
- TLS 错误(curl 退出码 35):证书尚未签发完成,等待 30–60 秒。
完整参考(示例应用、关键文件、构建说明)见 reference.md。 OpenClaw 网关集成见 OPENCLAW.md。
适用场景 适用于需要为本地运行的多个应用提供 HTTPS 访问、且仅通过 Tailscale 内网访问的开发与自托管场景。
限制
- 默认依赖 Vercel DNS 进行 DNS-01 挑战,更换 DNS 提供商需自行替换插件与 TLS 片段。
- 证书签发存在 30–60 秒等待时间。
- 面向 Tailscale-only 访问,不用于公网暴露。
- 其他未在资料中说明的功能、收费、价格、平台或效果暂未提供。