My Homelab

Page content

Overview

I’m a firm believer in experience gained by breaking things, working through failures, and solving problems under real constraints, with real ownership of the decisions.

The homelab idea was introduced to me by r/homelab and a few other forums, including Tom Lawrence’s, a very technical community.

For context: my current setup is a rework of a previous build. Below I’ll detail the actual hardware choices, the struggles along the way, and the real-world constraints behind them.

The homelab isn’t static. I’m always iterating on power consumption, physical footprint, efficiency, and performance.

Hardware

Router: Lenovo M720q with a quad-port Intel NIC, running OPNsense. Upgraded from an HP T620 running pfSense

NAS: Synology DS220+, upgraded to 20 GB DDR4, with 2x 6 TB Toshiba HDDs. A capacity upgrade is on hold for now, I simply can’t justify the cost with current drive prices.

Main server (custom build):

  • Case: Jonsbo N4, with a custom 3D-printed front intake for two extra fans, improving airflow and cooling for the HDD bay
  • CPU: Ryzen 5 5660 PRO APU (6C/12T). Specifically chose the PRO variant for ECC support
  • Cooler: Noctua NH-L9x65
  • Motherboard: ASRock B550 Pro4, known and proven to work with unbuffered ECC RAM
  • RAM: 2x 32 GB DDR4
  • Boot/OS drive: Crucial MX500 250 GB, running Proxmox VE
  • PVE storage: 1.8 TB Kioxia Exceria Plus G2 SSD
  • TrueNAS OS drive: WD SN730 1 TB, passed through to the TrueNAS VM
  • TrueNAS storage: 4x 4 TB Toshiba N300 HDDs, passed through to the TrueNAS VM
  • PSU: Seasonic Gold 550W, roughly 50W idle draw
  • NICs: Intel I225-V (vmbr0) and Intel I226-V (dedicated backup NIC, vmbr1). Both added after disabling the onboard Realtek chip, which proved unreliable on Proxmox and isn’t worth the risk in a real testing environment
  • HBA: LSI SAS2008, passed through to the TrueNAS VM
  • Zigbee: Sonoff USB MG24 controller, passed through to Home Assistant

In this post, i explain all hardware choice and how it all came togheter.

Virtualization & Orchestration

Proxmox is my hypervisor of choice, close to the default choice for a homelab. I may pick up some hardware down the line to experiment with XCP-ng, but for now it’s Proxmox all the way.

VM/LXC templates are built with my own published template-creation script.

Networking

VLANNameSubnetPurpose
10MGMT192.168.11.0/24Proxmox host, DS220+ DSM, OPNsense management, last segment to migrate
21SERVERS192.168.21.0/24All LXCs and service VMs
30STORAGE192.168.30.0/24TrueNAS VM, PBS
40IOT192.168.40.0/24Home Assistant, Zigbee devices
50MEDIA192.168.50.0/24Jellyfin, Heimdall, Portainer, Unifi
60VPNWIFI192.168.60.0/24Guest Wi-Fi, forced through WireGuard
100GUEST—Pre-existing, reused

Storage & Backups

The DS220+ NAS runs constantly and, now upgraded to 20 GB RAM, hosts a VM running Proxmox Backup Server. Its storage pool is a slice of the NAS’s RAID1 volume, and it backs up all Proxmox LXCs and VMs.

The TrueNAS VM also mirrors its ZFS pool, over Tailscale, to a remote HP ProLiant MicroServer G8 running TrueNAS Scale, the offsite third copy. Adding S3 storage on Scaleway to the backup chain is on the backlog.

Monitoring & Observability

I started with Zabbix in the homelab, broke it, and relearned it more than once. On a recent job, I deployed it in real infrastructure and cut incident response time from hours or days down to minutes, that result only sharpened my interest further. CheckMK was next, already deployed on a client project after some homelab dabbling. Up next: OpenTelemetry, Netdata, and Datadog.

Services Running

Most LXCs below also run node_exporter for Prometheus scraping; that’s omitted from individual rows to keep the tables short.

Proxmox Host (zeus)

ServiceSolves
Proxmox VEHypervisor: VM/LXC management, hardware isolation, snapshots, backup integration
QEMU Guest AgentClean shutdown, IP reporting, filesystem freeze during snapshots
NUT client (upsmon)Graceful shutdown of all VMs/LXCs then host, triggered by UPS events via the DS220+ NUT server

TrueNAS VM

ServiceSolves
TrueNAS SCALEZFS pool management, datasets, NFS/SMB shares, snapshots, replication
ZFSData integrity via checksums, copy-on-write, compression, deduplication, snapshots
Replication taskReceives incremental ZFS snapshots from the DS220+ over the dedicated storage network
ZFS sendSends incremental snapshots offsite to the remote TrueNAS box via Tailscale

hestia — Home Assistant VM

ServiceSolves
Home Assistant OSIoT control, automations, dashboards, Zigbee coordinator via USB passthrough
Zigbee coordinatorLocal Zigbee mesh, no cloud dependency

phpIPAM VM

ServiceSolves
phpIPAMIP address management, subnet tracking, network discovery, host inventory
Nginx + PHP 8.4 + MariaDBServes and runs the phpIPAM app and stores its data
fping / nmapHost and port discovery for subnet scanning

forge — CI/CD VM

ServiceSolves
Docker EngineRuns job containers for Gitea Actions
Gitea Actions runnerPicks up and executes CI jobs from Cadmus (Gitea), in isolated containers

argus — Zabbix LXC

ServiceSolves
Zabbix ServerInfrastructure monitoring, alerting, thresholds, SNMP polling
Nginx + PHP 8.4 + MariaDBServes and runs the Zabbix web UI and stores history/config

cadmus — Gitea LXC

ServiceSolves
GiteaSelf-hosted Git: source control, PRs, issues, wikis
Gitea ActionsGitHub Actions-compatible CI/CD engine
Container RegistryStores Docker images built by CI pipelines

bookstack

ServiceSolves
BookStackWiki/documentation platform, organized as Books/Chapters/Pages

NPM — Nginx Proxy Manager LXC

ServiceSolves
Nginx Proxy ManagerReverse proxy, SSL termination, cert automation via DuckDNS DNS-01
CertbotRequests and renews Let’s Encrypt wildcard certs

Tailscale LXC

ServiceSolves
TailscaleWireGuard mesh VPN, exit node, tunnel for offsite ZFS replication

step-ca LXC

ServiceSolves
Smallstep CAIssues TLS certs for internal .gallactic.lan hostnames that public CAs can’t validate
ACME endpointAutomated cert requests, same protocol as Let’s Encrypt

kronos LXC

ServiceSolves
PrometheusScrapes all hosts via node_exporter every 5s, stores time series data
GrafanaDashboards across all scraped metrics (Node Exporter Full, ID 1860)

daedalus LXC

ServiceSolves
AnsibleOrquestration, configuration management, playbook provisioning
srv_ansible userDedicated unprivileged user, SSH key auth, passwordless sudo across all hosts

DS220+ — olympus

ServiceSolves
Synology DSM 7Storage management, Docker/VM host, auto power-on after outage
PBS VMProxmox Backup Server, receives and deduplicates all Proxmox backups
NUT server (bsnmpd)Monitors the CyberPower UPS over USB, exposes state to NUT clients
HeimdallDashboard linking to all internal services
PortainerDocker container management, webhook endpoints for CI/CD
Unifi ControllerManages the Ubiquiti AC-Lite AP, SSIDs, client visibility
JellyfinLocal media streaming

OPNsense — starship

ServiceSolves
OPNsenseRouting, NAT, firewall rules, inter-VLAN routing, WAN gateway
Unbound DNSLocal resolution, host overrides for .gallactic.lan
DHCP serverPer-VLAN IP assignment
bsnmpdSNMP metrics exposed to Zabbix
NUT client (upsmon)Graceful shutdown on UPS power event
VLAN interfacesMGMT / SERVERS / STORAGE / IOT / MEDIA / VPNWIFI, six segments in progress

Local AI Stack (on Proxmox)

ServiceSolves
OllamaLocal inference for open-weight LLMs (Llama, Mistral, etc.), no data leaves the network
Open WebUIOpenAI-compatible chat interface for local Ollama models

Planned / Not Yet Deployed

ServiceTargetSolves
AutheliaDS220+ (Docker)SSO and MFA in front of all NPM-proxied services
SemaphoredaedalusWeb UI for Ansible playbook management and scheduling
LokikronosLog aggregation into Grafana
Ntfy / GotifyTBDPush notifications for Grafana alerts and Zabbix triggers
WireGuardVPSVPN gateway for VPNWIFI VLAN traffic