{"slug": "through-the-tunnel-ep-5-of-the-0-cloud", "title": "Through the Tunnel(Ep-5 of The $0 cloud)", "summary": "A developer successfully hosted a website from their own server behind CGNAT using Cloudflare Tunnel, achieving their goal of zero-cost hosting. The project involved learning Linux, Docker, networking, and Cloudflare, and the developer plans to buy a domain for a permanent URL.", "body_md": "After searching for a solution (I just GPT'd my way through it lol), I found that Cloudflare was the way to go.\n\nThe thing about CGNAT (Carrier-Grade Network Address Translation) is that it allows outgoing requests. Things like opening YouTube, calling an external API, downloading files, or even my server pulling code from GitHub all work just fine.\n\nCloudflare creates a secure tunnel that lets it communicate with my server even though it's sitting behind CGNAT.\n\nThe flow is roughly:\n\n**Visitor → Cloudflare → Tunnel → My Server**\n\nAnd the response follows the same path back.\n\nBut the cool part is, Cloudflare isn't actually punching through CGNAT.\n\nIt uses an already-existing connection that my server made to Cloudflare, and routes the incoming requests through that connection.\n\nSo I created an account on Cloudflare, tried installing Cloudflare Tunnel, and found out they provide stable Docker images for it.\n\nSo obviously, I installed it through Docker because at this point, I'm doing nearly everything with Docker—Postgres, Nginx, and even my database storage!\n\nAnd I was able to test the tunnel quickly with a temporary tunnel and URL. I opened the URL using my phone's mobile data.\n\nAnd oh boy... I finally did it.\n\nA website, hosted from my own server, running behind my own network, and accessible to anyone on the internet.\n\nThat feeling was awesome.\n\nThe problem was, I definitely needed a domain—or maybe I didn't, but buying one seemed like the most feasible option.\n\nCloudflare's temporary tunnel gave me HTTPS and a random URL, but that URL wasn't something I could properly control or use as a permanent address.So there was no permanent URL that I could actually control.\n\nAll that's left now is to buy a domain, configure it, and point it to my server.\n\nAnd that's it.\n\nI started this whole thing with one simple goal: **host a website from my own server without spending a penny.**\n\nAnd somehow, along the way, I ended up learning about Linux, Docker, networking, CGNAT, Nginx, SSH, Cloudflare, and a whole lot of things I never expected to touch.\n\nBut hey... I actually did it.\n\nI hosted my own website. From my own server. Without paying for hosting.", "url": "https://wpnews.pro/news/through-the-tunnel-ep-5-of-the-0-cloud", "canonical_source": "https://dev.to/adhithyan_b_5d2daadc216e4/through-the-tunnelep-5-of-the-0-cloud-mm0", "published_at": "2026-08-11 13:40:47+00:00", "updated_at": "2026-08-11 13:47:02.257362+00:00", "lang": "en", "topics": ["developer-tools", "ai-infrastructure"], "entities": ["Cloudflare", "Docker", "CGNAT", "Nginx", "Postgres", "GitHub"], "alternates": {"html": "https://wpnews.pro/news/through-the-tunnel-ep-5-of-the-0-cloud", "markdown": "https://wpnews.pro/news/through-the-tunnel-ep-5-of-the-0-cloud.md", "text": "https://wpnews.pro/news/through-the-tunnel-ep-5-of-the-0-cloud.txt", "jsonld": "https://wpnews.pro/news/through-the-tunnel-ep-5-of-the-0-cloud.jsonld"}}