Overview
A tiny Compose stack that turns any homelab service into a publicly reachable HTTPS endpoint without opening ports on a home router. Tailscale handles the network layer (mesh VPN, MagicDNS, ACL routing). Caddy fronts the services and provisions Let’s Encrypt certificates automatically. The whole setup is one `docker compose up` away.
Why it exists
Why this exists
Most home ISPs put residential connections behind carrier-grade NAT, which makes the textbook “forward port 443” approach impossible. Tailscale Funnel and HTTPS termination on a public node sidestep that — your traffic enters via Tailscale’s infra, gets routed over the mesh, and Caddy is the only thing that needs to know about certificates.
Why Caddy over nginx
Caddy provisions and renews ACME certificates without any extra cron jobs, certbot, or sidecar containers. The config syntax is short enough to fit a homelab use case in fewer than 30 lines, and the binary ships every batteries-included middleware (compression, security headers, HTTPS-by-default) on.