Brandon Seamer
software engineer · a home estate run to production standards
This site is served from the homelab it describes. Everything on it is the architecture, on purpose: how the estate is put together and why, not where anything lives.
The estate
Three nodes: two in a house, and one rented at the edge of the internet. The primary node is a Dell PowerEdge R930 running Proxmox, with every service in its own container on a filtered internal bridge. The auxiliary node, an ASUS ROG G11CD, holds the third backup copy, watches the primary node, and doubles as the living-room television. The edge node, a small rented machine in a data centre, fronts the one public game server and nothing else, and is rebuilt from code rather than repaired.
The two nodes at home, the desktop and the phone talk over a private mesh network. Management surfaces are reachable across it, and from inside the house; never from the internet. Public pages, this one included, leave through an outbound-only tunnel, so nothing at home ever has to accept a connection. The estate walks through the pieces and how they relate.
Principles it is built on
- Private by default. A service is on the mesh unless there is a written reason for it to be public, and public means the edge or the tunnel, never a hole in the router.
- Least privilege, always. Every automated process holds the narrowest credential that works, and nothing shares a credential with the operator.
- Three copies, one elsewhere. Nightly backups land on the primary node, on the auxiliary node, and encrypted in object storage off-site. Restores are rehearsed monthly by a machine, not remembered by a person.
- Watched in both directions. Each node pages the phone if the other goes quiet, and the alert path has its own fallback so "the server is down" can still arrive when the server is down.
- Documented as built. Every decision, every rejected alternative and every mistake that cost an hour is written down the same day, and a commit that changes the infrastructure without touching the docs is refused.