Hardware & homelab

My setup.

The desktop I build on, and the homelab I learn in.

01 / My PC

The machine on my desk.

A look at my personal setup.

Personal workstation

My PC

Windows 11
64-bit

Hardware snapshot · October 2026
Case
Corsair 7000D AIRFLOWFull-tower ATX
Processor
Intel Core i7-13700K13th generation · 16 cores / 24 threads
Graphics
Gigabyte GeForce RTX 4090 OC24 GB GDDR6X · PCIe 4.0 ×16
Memory
64 GB G.Skill DDR52 × 32 GB · Configured at 6,400 MT/sModule model: F5-6400J3239G32G
Motherboard
ASUS PRIME Z790-P WIFIIntel Z790 · LGA1700 · DDR5PCIe 5.0 ×16 expansion slot
Primary · C:
1 TB WD_BLACK SN850M.2 NVMe · PCIe 4.0 ×4Model: WDS100T1X0E-00AFY0
SSD · L:
500 GB Samsung 970 EVOM.2 NVMe · PCIe 3.0 ×4Model: MZ-V7E500
HDD · D:
4 TB Seagate IronWolf ProSATA 6 Gb/s · 7,200 RPMModel: ST4000NT001-3M2101

02 / Homelab

The homelab.

One rack server. A lot to learn.

My lab brings together the things I work on: virtual machines, storage, networking, self-hosted applications, and local AI. Some services are part of daily life; others are experiments I’m still building.

01 / Hardware

Inside the rack.

Silicon Mechanics rack server, built around a Supermicro X10DRG-HT GPU motherboard.

Host
Proxmox VE 9.2IPMI with onboard ASPEED graphics
Processors
2 × Intel Xeon E5-2690 v324 cores / 48 threads
Memory
128 GB DDR4 ECC registered · 2,133 MT/s8 × 16 GB · 8 of 16 slots populated
Power
Dual 2,000 W redundant power supplies
Boot & VM storage
4 × 500 GB WD VelociRaptor · 10,000 RPM SATATwo ZFS mirrors · approximately 862 GB usable
NAS storage
21 drives · 9 mirrored pairs and 3 hot sparesApproximately 20.7 TB usable · Broadcom / LSI SAS2308 HBA
Networking
Intel X540 dual-port 10GBASE-T + Intel 82599 dual-port 10 Gb SFP+
GPUs
NVIDIA Tesla V100 · 16 GB2 × Tesla P100 · 16 GB each
Tesla M40 · 24 GB
02 / Virtual machines

What runs here.

Eleven defined VMs, ten running at the time of this snapshot. Expand a machine for its role and dedicated hardware.

aiLocal AI and developer tools8 vCPU · 16 GiB

Runs local language models through llama.cpp and llama-swap, OpenCode, ComfyUI, SearXNG, Tinyauth, and PostgreSQL. Services use systemd user units and rootless Podman Quadlets.

Tesla V100 16 GB, Tesla P100 16 GB, and Tesla M40 24 GB. The M40 is installed but idle.

k3s-1Kubernetes learning node2 vCPU · 4 GiB
Provisioned · k3s planned

Ubuntu Server VM provisioned for a future three-node k3s cluster. The operating system is installed; k3s is not installed yet.

Virtual disk and network interface

k3s-2Kubernetes learning node2 vCPU · 4 GiB
Provisioned · k3s planned

Second provisioned Ubuntu Server VM for the planned k3s cluster with embedded etcd. A Talos Linux cluster is a later learning project.

Virtual disk and network interface

k3s-3Kubernetes learning node2 vCPU · 4 GiB
Provisioned · k3s planned

Third provisioned Ubuntu Server VM for the planned k3s cluster. No Kubernetes workloads are running yet.

Virtual disk and network interface

mediaMedia, files, and personal cloud8 vCPU · 16 GiB

Hosts the Podman media stack, including Jellyfin, Seerr, Navidrome, Nextcloud, FileBrowser Quantum, and Tdarr. A shared NAS path supports hardlinks; container state stays on the VM disk. An HLS proxy supports shared playback in VRChat.

Dedicated Tesla P100 16 GB for media processing

omada-controllerWi-Fi management4 vCPU · 4 GiB

Manages three TP-Link Omada access points: two EAP720 units and one EAP725-Outdoor. Wireless clients use a separate network from server workloads.

Virtual disk and network interface

opnsenseRouter and firewall4 vCPU · 8 GiB

Routes IPv4 and IPv6 traffic between home devices, VLAN 10 (VMLAN) for virtual machines, and VLAN 20 (WLAN) for wireless clients. Provides firewall rules, DHCP with network-boot options, and IPv6 prefix delegation.

Intel 82599 dual-port 10 Gb SFP+ card passed through directly

pxeNetwork boot and deployment4 vCPU · 8 GiB

Serves an iPXE installation menu for Windows 11, Arch, Debian, Ubuntu, and Rocky Linux. Boot entries are generated from JSON definitions, and install media is served from a read-only NAS folder.

Virtual disk and network interface

tankZFS storage server8 vCPU · 32 GiB

Manages 18 data drives in nine mirrored pairs, with three hot spares and approximately 20.7 TB usable capacity. Shares storage over NFS and SMB, with monthly ZFS scrubs.

Broadcom / LSI SAS2308 HBA and all 21 attached drives passed through directly

testScratch environment4 vCPU · 8 GiB
Stopped

A stopped VM reserved for experiments. It does not start automatically with the host.

Virtual hardware

webWeb hosting and reverse proxy2 vCPU · 2 GiB

Runs nginx with HTTP/2 and HTTP/3, TLS termination, and reverse proxying. Configuration comes from Git; deployment validates it before reloading. Tinyauth provides sign-in gating for administrative applications.

Virtual disk and network interface

03 / Architecture

How it fits together.

Hardware where it matters

The router owns its physical network card. The NAS owns the SAS controller and its disks so ZFS sees the storage directly. The AI VM receives a V100, P100, and M40; the media VM receives the second P100.

Separate networks, a shared host

OPNsense separates home devices, server VMs, and wireless clients. VLAN 10 (VMLAN) carries the virtual-machine network, while VLAN 20 (WLAN) carries wireless clients. A VLAN-aware Proxmox bridge connects the virtual workloads. The network supports both IPv4 and IPv6, with OPNsense handling routing, firewall rules, and IPv6 prefix delegation. nginx on the web VM provides the entry point for web applications.

Storage shared across services

The NAS exposes its dataset through NFS and SMB. Media applications share a consistent folder layout so imports can use hardlinks. The deployment VM reads only its own installation-media folder.

Local AI, with mixed hardware

llama.cpp and llama-swap serve local models, with the V100 as the everyday card and the P100 available for split models. ComfyUI handles image generation. The driver and CUDA versions are deliberately pinned to support the older GPU generations.

04 / Operations

Keeping it running.

  • Configuration in Git. nginx configuration, container definitions, deployment scripts, and runbooks live together.
  • Updates with boundaries. Containers update weekly; GPU drivers, model tooling, and selected major application versions are maintained deliberately.
  • Database backups first. PostgreSQL is dumped daily and before updates. An unsuccessful pre-update backup stops the update.
  • Recovery is documented. Scripts restore containers after interrupted processes or power loss, and bulk file renames have reversal logs.
  • Still learning. The three Ubuntu Kubernetes nodes are provisioned. Installing k3s, then exploring Talos, is planned work.
05 / Around the rack

The rest of the setup.

TP-Link Omada access points

Two EAP720 units and one EAP725-Outdoor, managed by the Omada controller VM.

Unmanaged PoE switch

Connects the access points.

Unmanaged SFP+ switch

Provides SFP+ connectivity for the lab. I'm looking to upgrade to a managed Layer 3 switch with more ports.

Intel Arc B580 streaming PC

A separate Linux computer running Sunshine for game streaming, connected privately to the desktop.

Separate system
Back to my PC