I run a small pile of self-hosted services from a single machine in my house, tunnelled out to the internet through Cloudflare and a Caddy reverse proxy. Everything on one box.

Architecture

At the centre of it is a Proxmox server I built myself: a Gigabyte X570 board, an AMD Ryzen 9 3900X (12 cores, 24 threads, in case you're counting), 64GB of RAM, and a handful of NVMe and SSD drives in ZFS pools. Nothing exotic, just enough power to run everything below without breaking a sweat.

On top of that I run 16 LXC containers and 2 VMs. Most services live in Docker, each in its own container, so I can nuke and rebuild one without touching anything else. A few (Caddy, Hermes, CUPS) run natively, no Docker required.

Getting traffic in without opening a single port on my router is Cloudflare Tunnel's job. It runs in its own container (CT 126) and connects outward to Cloudflare, so there's no port forwarding and no dynamic DNS to fuss over. Cloudflare also handles DDoS protection and, for anything sensitive, the login wall.

Once traffic is inside, Caddy (CT 127) takes it from there: one config file, automatic Let's Encrypt certificates, routed to whichever backend needs to answer. So the path a request takes looks like this:

Cloudflare DNS → Cloudflare Tunnel (CT 126) → Caddy (CT 127) → backend service

The rest of the network is refreshingly boring. A FritzBox 7590 AX does router duty, and an old Raspberry Pi 3B runs Pi-hole for DNS and DHCP, blocking ads for every device in the house. All of it sits on a 192.168.144.0/23 subnet.

Curious how any of this is actually wired together? It's all in homelab-docker on GitHub.

Services

Here's what's actually running:

Service URL Description
n8n https://n8n.janvv.nl Workflow automation platform (Docker, CT 120)
SearXNG https://search.janvv.nl Privacy-respecting metasearch engine (Docker, CT 121)
Planka https://tasks.janvv.nl Self-hosted Kanban project management board (Docker, CT 122)
Grav CMS https://opa.janvv.nl Personal website and blog, flat-file Grav CMS (Docker, CT 123)
Status Monitor https://status.janvv.nl Homelab service uptime monitoring dashboard, hosted on Grav CT (CT 123)
Broodwiki https://brood.janvv.nl Bread-baking wiki with AI chat assistant, Sphinx + Claude Code backend (Docker, CT 123)
qBittorrent https://torrent.janvv.nl Torrent downloader (Docker, CT 124)
Jellyfin https://kijkdoos.janvv.nl Media server for movies, series, and collections (Docker, CT 125)
WordPress — jokegoudriaan.nl https://jokegoudriaan.nl Joke Goudriaan personal blog (Docker, CT 129)
WordPress — piowij.nl https://piowij.nl Website for PioWij, Pioniersgroep Wijdemeren, which Jan maintains for them (Docker, CT 129)
Hermes Agent Dashboard https://hermes.janvv.nl AI assistant management dashboard and kanban board (Native, CT 130)
Hermes Web UI https://ai.janvv.nl Chat and kanban board interface (Native, CT 130)
Planning Triage https://planning.janvv.nl Personal planning task triage web app (Native Python, CT 130)
CUPS Print Server https://printer.janvv.nl CUPS print server admin for HP ENVY Inspire 7900 (Native, CT 131)
Print Upload https://print.janvv.nl Web-based file upload for printing (CT 131)
Nextcloud https://cloud.janvv.nl Self-hosted file sync and collaboration, Dropbox replacement (Docker, CT 132)
CouchDB https://couchdb.janvv.nl Database backend for Obsidian LiveSync (Docker, CT 133)
Vaultwarden https://vault.janvv.nl Self-hosted Bitwarden-compatible password vault (Docker, CT 134)
Forgejo https://git.janvv.nl Self-hosted Git service (Docker, CT 135)
Immich https://photos.janvv.nl Self-hosted photo and video backup/management (VM 108)
Home Assistant https://assistant.janvv.nl Home automation platform for lights, climate, blinds, and sensors (VM 114)
Pi-hole https://pihole.janvv.nl Network-wide DNS sinkhole and ad blocker, DHCP server (Raspberry Pi 3B)
Proxmox VE https://proxmox.janvv.nl Virtualization host management UI (bare metal)
Proxmox Terminal https://terminal.janvv.nl ttyd web terminal on Proxmox host
Laptop1 Terminal https://laptop1.janvv.nl ttyd web terminal on Jan's primary laptop
Laptop2 Terminal https://laptop2.janvv.nl ttyd web terminal on Jan's secondary laptop

Last updated: 2026-07-17