About this project

Behind the
infrastructure.

A proper look at the hardware, software, and slightly questionable decisions that keep this lab ticking over.

// Why self-host

It started, as these things tend to, with mild frustration at a cloud bill and the nagging feeling that running a few containers on someone else's hardware was a bit daft when you've got perfectly good kit sitting at home. One Proxmox node became two, two became four, and somewhere along the way it turned into a proper homelab with strong opinions about networking.

"The cloud is just someone else's computer — and I'd rather it be mine."

Everything here is self-hosted, self-maintained, and occasionally self-inflicted. pfSense handles routing virtualised inside Proxmox, Pi-hole takes care of DNS and DHCP across the network, and a GPS-disciplined Pi 3 keeps time honest as a Stratum 1 NTP server. It's the kind of setup that's genuinely useful and deeply unnecessary in equal measure — which is exactly how it should be.

The workflow

Code lives in a self-hosted Gitea instance, written in Zed, and deployed via Ansible from a Pi 5 with an NVMe and a HyperPixel 4 touchscreen that makes the whole thing look far more professional than it has any right to. Services register themselves to this dashboard automatically via the WINT registry module — so if something shows as stale, it's probably mid-deployment rather than anything to worry about.

The NAS runs on a Compute Module 4 and keeps 20TB of data organised and accessible across the network. It's not glamorous, but it's reliable — which is more than can be said for most things.

// The hardware
Proxmox Node 1
Intel N100
32GB DDR4
General workloads & services
Proxmox Node 2
Intel N150
32GB DDR5
Hosts pfSense (virtualised)
Proxmox Node 3
Intel i5-6500
32GB DDR4
Heavier compute workloads
Proxmox Node 4
Intel i7-4770S
16GB DDR3
Legacy services & testing
NAS
Raspberry Pi CM4
20TB storage
Network attached storage
Ansible Controller
Raspberry Pi 5
HyperPixel 4 + NVMe
Deployments & automation
Time Server
Raspberry Pi 3
GPS module
Stratum 1 NTP for the network
// The stack
  • Proxmox VEHypervisor — 4 nodes
  • pfSenseRouter / Firewall
  • Pi-holeDNS / DHCP
  • AnsibleConfiguration Management
  • GiteaSelf-hosted Git
  • CaddyReverse Proxy
  • Node.jsRuntime
  • SQLiteDatabase
  • GPS / NTPStratum 1 Time Source
  • tar1090 / ADS-BAircraft Tracking
  • ZedEditor
  • DockerContainers