The lab lives in two places: a rack at home and a rack in a datacenter. It is where I try things before they reach production anywhere else, and it runs this site.

Hardware

Five Proxmox VE nodes, each with one job. The full story is in How I set up Proxmox in my homelab.

The front of the rack at home
The rack at home: the PoE switch on top and three of the nodes under it. More photos in the Proxmox post.

NodeJobLocationCPURAMStorage
pve-worldstreamCompute, productionDatacenterAMD EPYC 7402P, 24c/48t256 GB DDR42x 1 TB NVMe RAID 1, 4 TB NVMe
pve-antonCompute, homelabHomeAMD Ryzen 5 4600G, 6c/12t128 GB DDR41 TB NVMe
pve-fwFirewall, OPNsenseHomeIntel Core i3-N305, 8c16 GB DDR5500 GB NVMe
pve-hassioHome Assistant, DNSHomeIntel Celeron N3450, 4c4 GB LPDDR4128 GB NVMe
pve-storageStorage, TrueNASHomeIntel N100, 4c16 GB DDR4500 GB NVMe, 8x 500 GB SSD on LSI SAS2008

Network

WhereDevicePorts
Rack, coreOmada 24-port 2.5GBASE-T L2+24x 2.5G, 4x SFP+ 10G
Rack, PoEOmada 8-port 2.5GBASE-T L2+ PoE+8x 2.5G PoE+, 2x SFP+ 10G
CabinetMikroTik CRS305-1G-4S+IN4x SFP+ 10G, 1x 1G
Every floorUbiquiti U7 Lite, 3 in totalWi-Fi 7, PoE

Platform

  • Talos Linux managed with Omni: three control planes, four workers, running as VMs on the Proxmox compute nodes.
  • Cilium as CNI and load balancer, with L2 announcements for the ingress VIP.
  • Longhorn for persistent storage.
  • BunkerWeb as the public ingress and web application firewall, with Let’s Encrypt handled centrally.
  • Traefik for internal .local services.
  • Argo CD in an app-of-apps layout. Every component is one Application in Git, and nothing is applied by hand after bootstrap.
  • Prometheus, Alertmanager and Grafana via kube-prometheus-stack.

Tooling around it

  • GitLab self-hosted for source, CI and the container registry.
  • Terraform for provisioning and Ansible (with AWX) for configuration.
  • Coder for cloud development workspaces, which is where this post was written.