Home Lab

The Home Lab

A home network that deliberately mirrors a corporate one: segmented VLANs, SSO on everything, full virtualisation, and no published inbound ports.

0published inbound ports
7apps behind SSO
23containers at last count
96 GBRAM across two NUC-class hosts
Home network architecture as first documented in 2022
Home network architecture as first documented in 2022

It started in late 2022 as two stand-alone ESXi NUCs and a stated goal: be as secure as possible, because someone in information security should practise what they preach. It grew into a full vSphere stack for customer demos, then moved to Proxmox with Proxmox Backup Server. Networking consolidated from three management planes onto an all-UniFi estate, and every service sits behind Authentik single sign-on and a Cloudflare Tunnel with nothing exposed inbound.

Goals

The build log from the start lists them plainly: be as secure as possible, learn Docker, WebAuthn, OAuth and SAML hands-on, keep running costs down with cheap or free tooling, and replicate corporate-grade segmentation, visibility and single sign-on with a SIEM as the end goal.

The stack

Layer What is in it
Compute Intel NUC11PAHi7 with 64 GB RAM, NVMe plus 2 TB SATA; Asus PN61 i7 with 32 GB; Raspberry Pi 4s
Hypervisor ESXi, then vSphere under a VMUG Advantage licence for demos, now Proxmox VE with Proxmox Backup Server
Storage Synology NAS for files and the Immich photo stack
Network UniFi Dream Router, main and office switches, Flex Minis, UAP-AC-Pro, U6+ and a mesh AP, with VLAN segmentation and remote syslog
Power USB UPS exposed over the network with NUT and automatic shutdown
Guests DietPi for Pi-hole and Homebridge, minimal Debian for Docker hosts, Windows Server and Windows 10 for demo labs
Containers Docker Compose managed through Portainer, plus Cosmos Server with a private marketplace
Identity Authentik with Postgres and Redis; Nginx Proxy Manager with wildcard certificates
Services Wiki.js backed by self-hosted GitLab, Guacamole, Pi-hole, LibreNMS, Homarr, Immich, InfluxDB, Actual Budget, Home Assistant, Sonos, UniFi Protect
Edge Cloudflare Tunnel for inbound, Workers for public hosting, WARP for device enrolment

Single sign-on everywhere

WordPress, Portainer, Wiki.js and Guacamole through OAuth2 or OIDC. Pi-hole and Homarr through proxy auth in front, with the local admin login removed. LibreNMS through OIDC via Socialite, which was the hardest of the lot and needed a PHP upgrade. Each integration is written up in the build log with what worked first time and what did not.

The blog that documents it

The build log itself was WordPress and MariaDB running inside the lab, which meant a database, PHP and a public attack surface just to serve a handful of posts. In 2026 it was exported, converted to Markdown and rebuilt as a static Astro site on a Cloudflare Worker with every original permalink preserved. See the JDWLab blog project.

Patterns

Every project in the lab shares a few habits: back up before destroying, express configuration as reviewable files rather than clicks, and write down why a setting exists. The NUT installer timestamps a backup of the config directory before touching it. The Stream Deck layout is generated from code and backs up the Companion database first. The blog's URL structure is validated by a regex in both the content schema and the CMS. Small things, consistently.