This site runs on my own machine — here’s how
This site doesn't live on some managed hosting platform. It runs on my own machine, in Docker, and reaches the internet through a Cloudflare Tunnel. I set it up that way on purpose, and figuring it out taught me a ton.
The moving parts
- The Next.js app, built into a Docker image and running on an internal port.
- Cloudflared as a second little container that opens an outbound tunnel to Cloudflare — no open ports, no messing with my router.
- Cloudflare handles HTTPS and points
icelegends.cloudat that tunnel.
Why a tunnel instead of opening ports
I didn't want to expose my home IP or punch holes in my firewall. A tunnel makes the connection outbound, so my machine stays private while the site is still reachable from anywhere over HTTPS. It just felt like the safe, clean way to do it.
Shipping an update
docker compose up -d --build
That rebuilds the image and swaps in the new container. The tunnel keeps running the whole time. And if a build fails, the old version just keeps serving — so I've never taken the site down with a bad deploy.
Doing this end to end taught me more about how the web actually works than anything else I've tried.