← back

About this server

What this is

A self-hosted home server running my personal projects. Reachable at christiaanhub.com over HTTPS, with no router ports forwarded and my home IP address hidden from the public internet.

Hardware

Network architecture

Visitor's browser
       |
       | HTTPS (port 443)
       v
Cloudflare edge network
       |
       | Cloudflare Tunnel (outbound from server)
       v
cloudflared (Docker container)
       |
       | HTTP, internal Docker network
       v
Caddy reverse proxy (Docker container)
       |
       | HTTP, internal Docker network
       v
+-------------------+     +-------------------+
| nginx             |     | c2c marketpalce   |
| static site       |     | coming soon       |
+-------------------+     +-------------------+

Software stack

How a request flows

  1. Browser resolves christiaanhub.com to a Cloudflare IP via DNS.
  2. Browser opens HTTPS connection to Cloudflare's nearest data centre.
  3. Cloudflare looks up the hostname, finds it routed to my tunnel.
  4. The cloudflared container in my home, which holds an outbound connection to Cloudflare, receives the request through that tunnel.
  5. cloudflared forwards the request to Caddy on the internal Docker network.
  6. Caddy reads the Host header, decides which container should handle it (nginx for the main site, project1-app for the subdomain), and proxies the request.
  7. The response flows back the same way.

Security choices

What's running

Domain