Waarom een homelab
Mijn homelab is mijn proeftuin. Wat ik op het werk tegenkom (high availability, monitoring, GitOps, security, AI), probeer ik thuis eerst zelf uit, zonder dat er iets kan breken wat niet van mij is. Tegelijk draait er van alles dat thuis echt gebruikt wordt: media, foto's, bestanden, wachtwoorden, mail, energie en verwarming. Dat houdt me scherp: als het stuk is, merkt het hele huishouden het.
Hardware
| Rol | Hardware |
|---|---|
| Hypervisor | Zelfbouw met AMD Ryzen 5 5500GT, 128 GB RAM, NVIDIA RTX 3060 12 GB |
| Opslag hypervisor | Proxmox zelf op twee NVMe-schijven in een ZFS-mirror; VM-opslag op een ZFS-pool van 8 TB |
| Edge en NAS | Raspberry Pi 4 in een Argon-behuizing, met ruim 7 TB opslag die via NFS wordt gedeeld |
| Netwerk | Glasvezel, een segment voor het thuisnetwerk en WireGuard voor toegang van buiten |
Opbouw
internet ─► edge (Pi, Argon-behuizing): reverse proxy · DNS-filter · WireGuard · NFS-opslag
│
▼
Proxmox VE (ZFS-mirror op 2× NVMe, VM-opslag op ZFS)
├─ AI en media llama.cpp op de RTX 3060, Open WebUI, Jellyfin
├─ monitoring Prometheus, Alertmanager, Grafana, Loki, meldingen
├─ database PostgreSQL met Patroni (2 nodes + witness)
├─ identiteit Zitadel (single sign-on)
├─ ontwikkeling Gitea met Actions-runners
├─ cloud en mail bestanden, foto's, wachtwoordmanager, mailserver
└─ canary testmachine voor wijzigingen
Elke VM heeft één taak. Dat maakt het overzichtelijk: een probleem in de mediastack raakt de database niet, en een update aan de monitoring raakt de AI niet.
Ontwerpkeuzes
- Geheugen statisch toegewezen. Ballooning staat op vrijwel alle VM's uit. Een host met weinig elasticiteit kun je het best voorspelbaar maken. Ik meet het werkelijke gebruik en pas de toewijzing daarop aan, en niet op de RSS van qemu: die laat zien welke pagina's ooit zijn aangeraakt, niet wat nu nodig is.
- Database met een echte witness. PostgreSQL draait met Patroni op twee nodes, met een aparte witness-VM als derde etcd-lid. Niet op de Pi: etcd heeft een lage fsync-latency nodig, en zonder SSD zet één filmavond met veel I/O het cluster in read-only.
- De Pi doet al genoeg. Reverse proxy, DNS-filter, VPN en NFS voor de mediabibliotheek. Monitoring gaat er bewust niet bij: met 4 GB RAM pakt de OOM-killer dan de DNS-filter, en zonder DNS valt het hele huis stil.
- CPU-discipline. Builds en batchjobs op de AI-VM krijgen een cgroup-quota van vier cores. Anders loopt de steal time op en voelt de hele host het.
Single sign-on met Zitadel
Zitadel is de identity provider voor de webapplicaties, waaronder de AI-omgeving. Eén account, één keer inloggen, en tweestapsverificatie op één plek. Wat ik daarvan leerde:
- De issuer-URL zit overal. In elke client en in elk token. Kies het domein van je issuer dus zorgvuldig: verhuizen is duur.
- Een DNS-filter kan je SSO breken, ook als de applicatie zelf bereikbaar is. Zie Waarom mijn SSO overal werkte, behalve op kantoor.
- API's los van SSO. Voor machine-tot-machine-verkeer (mijn CLI, de editor) gebruik ik API-sleutels via een aparte ingang, zodat automatisering niet afhangt van een browserlogin.
Alles als code
- Gitea is de bron van waarheid, met Gitea Actions-runners voor CI/CD.
- De reverse proxy: een vhost per dienst in Git. Een merge naar
mainvalideert en rolt uit. Beheerinterfaces staan opallow <thuisnetwerk>; deny all;. - Monitoring: alertregels met unittests en een runbook per alert. Zie Monitoring als code.
- Agents op alle hosts staan als Ansible-inventory en -rollen in Git. De automatische uitrol lag een tijd stil en zet ik opnieuw op. Daarna geldt weer: met de hand aanpassen op een host wordt bij de volgende run overschreven, en dat is de bedoeling.
- Deze website is net zo opgezet: een push naar
development, een groene pipeline met lint, typecheck, contentcontrole en een containerscan, een pull request naarmain, en een reconciler op de server rolt hem uit met rollback bij een mislukte nacontrole.
Lokale AI
Het pronkstuk: een 35B-model op de RTX 3060 met ~40 tokens per seconde, bereikbaar vanuit de browser, de terminal en VS Code. Het hele verhaal staat in Mijn eigen AI-platform op een RTX 3060.
Huis en energie
Zonnepanelen, een thuisaccu, de slimme meter en de verwarming staan allemaal in Prometheus. Zie Energie en verwarming in Grafana.
Beveiliging
- Alleen de reverse proxy staat aan internet; al het andere is intern of via WireGuard.
- PHP-applicaties kregen bij een kritiek lek binnen een dag een tussenmaatregel en hardening op de proxy. Zie php2shell.
- Geheimen staan in bestanden met beperkte rechten op de host, niet in Git.