--- name: caddy slug: caddy-reverse-proxy version: 1.0.0 description: Add, manage, and troubleshoot Caddy reverse proxy routes for local apps via wildcard subdomains. compatibility: macOS (LaunchDaemon) or Linux (systemd). Requires Caddy, Tailscale, Vercel DNS account. --- # Caddy — Wildcard Reverse Proxy for Local Apps Routes `*.YOUR_DOMAIN` subdomains to local services over HTTPS via Caddy reverse proxy with automatic Let's Encrypt certificates. Designed for Tailscale-only access (no public exposure). > **DNS provider:** This skill uses **Vercel DNS** for DNS-01 ACME challenges. If you use a different DNS provider, swap the `caddy-dns/vercel` plugin and TLS snippet for your provider's equivalent (see [caddy-dns](https://github.com/caddy-dns)). ## Add a New App 1. **Create a background service** (LaunchAgent on macOS, systemd on Linux) — see `reference.md` for templates 2. **Add to Caddyfile** (`~/.config/caddy/Caddyfile`): ```caddy appname.YOUR_DOMAIN { import vercel_tls reverse_proxy localhost:31XX } ``` Also add a `
  • ` entry in the dashboard HTML block at the top. 3. **Reload Caddy:** ```bash ~/.local/bin/caddy reload --config ~/.config/caddy/Caddyfile --address localhost:2019 ``` TLS cert provisioning takes 30–60 seconds (DNS-01 challenge). 4. **If it connects to OpenClaw Gateway** — see `OPENCLAW.md` in this folder for gateway-specific config. ## Quick Dev Servers Companion skill: [dev-serve](https://clawhub.com/skills/dev-serve) — one-command dev server + Caddy routing. ```bash dev-serve up ~/projects/myapp # → https://myapp.YOUR_DOMAIN dev-serve down myapp dev-serve ls ``` ## Reload / Restart ```bash # Reload config (no restart, no sudo) ~/.local/bin/caddy reload --config ~/.config/caddy/Caddyfile --address localhost:2019 # Full restart # macOS: sudo launchctl unload /Library/LaunchDaemons/com.caddyserver.caddy.plist sudo launchctl load /Library/LaunchDaemons/com.caddyserver.caddy.plist # Linux: systemctl --user restart caddy ``` ## Troubleshoot - **Cert not issuing:** `tail -50 /var/log/caddy-error.log | grep -i error` — likely expired Vercel API token - **DNS not resolving:** `dig +short appname.YOUR_DOMAIN` — should return your Tailscale IP - **TLS error (curl exit 35):** Cert hasn't provisioned yet, wait 30-60s For full reference (example apps, key files, build instructions): see `reference.md`. For OpenClaw gateway integration: see `OPENCLAW.md`.