THE HOUSE AS INFRASTRUCTURE
Homelab
The hypervisor sits on a network I specced, on cable labelled the same at both ends, on a panel that was upgraded before any of it went in. This page goes from the breaker box up. It is architecture, not an address book: the content schema refuses IPs, hostnames and ports, and camera counts and placement are left out on purpose.
The most useful thing here is a failure: eighteen months of hard lockups that turned out to be the RAM. Read the postmortem.
Layers, top to bottom
The homelab as six layers, from services at the top down to power at the bottom. Each layer links to the system that carries it.
House network
Project recordThe physical layer under everything else: the electrical panel, thirteen Cat6 home runs to one rack, and UniFi on top.
What runs here6
| SERVICE | ROLE | STATE |
|---|---|---|
| Power | A 200A panel with arc-fault and GFCI breakers, the knob-and-tube gone, and dedicated circuits for the office and the rack. | running |
| Structured cabling | Thirteen Cat6 home runs in a star to one rack, through a keystone patch panel and a brush panel, every run labelled with one ID at both ends. | running |
| Gateway and switching | A UniFi gateway and a 24-port PoE switch that powers the access points and cameras. | running |
| Wi-Fi | Three ceiling access points inside and a mesh point outside, each on its own home run. | running |
| UniFi Protect | Cameras and doorbell on PoE, recorded locally. Counts and placement are deliberately not published. | running |
| Homebridge | On a Raspberry Pi, bridging Protect into HomeKit. | running |
- Labelling both ends of a cable with the same ID is free while it is in your hand and expensive forever after.
Media pool
Project recordFour spinning disks pooled into one tree with mergerfs, one of them given over to SnapRAID parity. Where the lossless library and the backups live.
What runs here2
| SERVICE | ROLE | STATE |
|---|---|---|
| mergerfs | Pools the data disks so the library is one tree. Its create policy now picks the disk with the most free space, not the one where the folder already exists, which would have filled one disk while the others sat empty. | running |
| SnapRAID parity | Recovery for a dead data disk. The scheduled sync was the crash trigger on bad memory, so it was switched off until the RAM was replaced, and the parity resync is the open item. | building |
- Parity that has not been synced protects nothing added since. This page says so rather than calling the array healthy.
Proxmox node
Project recordThe one machine everything self-hosted runs on. A single node, not a cluster: a consumer board, a 4-core APU, NVMe for guests, and the media pool hanging off it.
What runs here8
| SERVICE | ROLE | STATE |
|---|---|---|
| Plex | In a container, with the APU's integrated GPU passed through for hardware transcode. Serves the lossless library to Plexamp. | running |
| Samba | Exports the media pool to the rest of the house. | running |
| Guest backups | vzdump on a schedule, restored from rather than merely configured. Written to the parity disk so they add no load to the array. | running |
| Host config backup | A nightly tarball of the hypervisor's own configuration, because vzdump backs up guests and nothing else. | running |
| Alert relay | Outbound mail through Resend, so the box can tell someone it is failing. It spent eighteen months unable to. | running |
| Hardware watchdog | The chipset's own timer, which fires even when the kernel is wedged. The default software watchdog could not. | running |
| Offsite backup | Restic to object storage, so a dead house is not a dead library. | planned |
| Minecraft server | A container for the kids' world. Capacity is not the problem; the RAM swap came first. | planned |
- Conceptual only. Addresses, ports and hostnames are refused by the content schema rather than left to a reviewer to notice.
- It ran on failing non-ECC memory for eighteen months without a single machine check exception. The postmortem is in the notes.