ikzeizet.
← Alle verhalen

Van trage NAS naar volwaardige homelab-server - met AI als hulpmiddel

Hoe ik met basiskennis Linux en hulp van Claude mijn Synology DS918+ inruilde voor een HP EliteDesk, 50+ containers migreerde en een architectuur neerzette die echt werkt.

Op dit moment draaien er zo'n vijftig containers op een compacte mini-pc in mijn meterkast. Mijn NAS en server voelen als één systeem dankzij NFS-mounts. Alles is bereikbaar via nette domeinnamen, zowel intern (*.lan) als extern (*.sanderveldscholten.nl). Mijn laptop thuis doet AI-taken voor de server. Home Assistant praat via een USB-dongle in de server en schakelt de lampen.

Een jaar geleden wist ik net hoe ik moest SSH'en en een bestand openen in nano.

Dit is het verhaal van die migratie, en van wat AI daarin wel en niet voor me deed.

Niet zo technisch? Klik hier voor de simpele uitleg

Dit is de korte versie in gewone taal.

1. Het probleem

Ik had een netwerkschijf (NAS) waarop ik ook allerlei programma's liet draaien. Maar een NAS is eigenlijk bedoeld voor opslag, niet voor het draaien van tientallen apps tegelijk. Het werd traag en liep tegen grenzen aan.

2. De oplossing

Ik kocht een compacte mini-pc (de HP EliteDesk) die wél geschikt is als server. De NAS doet nu alleen nog opslag. De mini-pc draait alles.

3. Het probleem met de oplossing

Op zo'n server draait Linux. Ik kende Linux nauwelijks. Alles zelf uitzoeken zou maanden kosten.

4. Wat AI deed

AI hielp me bij elke stap: welke hardware te kopen, hoe Linux in te richten, hoe ik mijn apps kon overzetten. In plaats van uren zoeken op internet kreeg ik direct werkende oplossingen, en als iets fout ging, debugden we het samen.

5. Het resultaat

Een thuis-server die ik volledig begrijp en zelf kan beheren, omdat ik al doende heb geleerd.

TL;DR: Ik migreerde van een Synology DS918+ naar een HP EliteDesk 800 G5 Mini met Debian Linux. Ruim vijftig Docker-containers, NFS-mounts naar de NAS, Nginx Proxy Manager met wildcard DNS, Tailscale voor toegang vanaf overal en Home Assistant met USB ZHA-dongle. Mijn Linux-kennis bij aanvang: SSH, ls, cd, nano. De rest leerde ik al doende, met hulp van Claude.


De aanleiding

Mijn Synology DS918+ was jarenlang mijn thuisbasis. Opslag, backups, en langzaam ook steeds meer Docker-containers: Plex, Home Assistant, een arr-stack, immich. Het werkte, maar steeds minder goed.

Het probleem is structureel: een NAS draait een Linux-versie waar Synology bewust beperkingen in heeft aangebracht. Dingen die op een gewone Linux-server vanzelfsprekend zijn, zoals kernel-modules, USB-passthrough, NFS-exports en serieuze netwerkconfiguratie, zijn op een Synology omslachtig of onmogelijk. En naarmate je meer containers draait, merkt het systeem dat het eigenlijk bedoeld is voor opslag, niet voor compute.

Op een gegeven moment was de keuze duidelijk: óf accepteren wat de NAS kan, óf een echte server neerzetten en de NAS terugbrengen naar waar hij goed in is. Mag je raden wat ik ging doen.


De hardware kiezen

Ik wist dat ik een kleine, stille machine wilde die weinig stroom verbruikt maar genoeg kracht heeft voor tientallen containers.

Samen met Claude heb ik de opties doorgenomen: een NUC, een mini-pc of een refurbished zakelijke machine, welke generatie processor goed genoeg is, hoeveel RAM je nodig hebt voor dit aantal containers en waar je op moet letten bij tweedehands zakelijke hardware.

Dat gesprek leidde tot de HP EliteDesk 800 G5 Mini via V&A op tweakers.net: een refurbished zakelijke mini-pc, stil, zuinig, uitbreidbaar en met voldoende kracht voor alles wat ik wilde draaien. Hij past in één hand.


Linux installeren

Mijn Linux-kennis bij aanvang was eerlijk gezegd bescheiden. Ik SSH'te af en toe in mijn webserver bij KimSufi: ls, cd, iets aanpassen in nano. Dat was het wel zo'n beetje.

Debian installeren op de EliteDesk, de basisinrichting doen, Docker Compose opzetten, gebruikers en rechten goed instellen, NFS-mounts configureren: dat is allemaal goed uitvoerbaar als je weet wat je doet. Ik wist dat het moest en kon, maar hoe zou me veel tijd kosten.

Ik wist wat ik wilde, Claude gaf me de commando's en configs om het te doen, met uitleg erbij zodat ik begreep wat er gebeurde. Na de vijfde container begon ik de patronen te herkennen en configs zelf aan te passen.

SSH-sessie in de EliteDesk met docker ps uitvoer
SSH vanaf Windows naar de EliteDesk, gevolgd door een docker ps. Het begin van een bekende workflow.

De migratie

Container voor container, compose-file voor compose-file. Elke service had zijn eigen kleine uitdagingen: volumes goed mappen, environment variables overzetten, netwerken koppelen, poorten vrijmaken.

Het verrassendste moment was Home Assistant. Ik had verwacht dat de combinatie van een USB ZHA-dongle (SkyConnect), device passthrough in Docker en het overzetten van een bestaande configuratie een dagklus zou zijn. Het was het niet. USB passthrough in een Docker Compose-file bleek een kwestie van één regel, en de HA-configuratie die op de NAS stond was direct bruikbaar op de nieuwe server. Alles, lampen, schakelaars en automatiseringen, werkte meteen.

Home Assistant energiedashboard met verbruik en zonne-energie
Home Assistant draait op de EliteDesk en houdt het energieverbruik bij, inclusief zonnepanelen en netbalans.

Naarmate de migratie vorderde merkte ik dat ik steeds minder hoefde te vragen. Ik herkende de structuur van een compose-file, wist welke dingen ik moest aanpassen en ging zelf aan de slag. AI werd minder een instructeur en meer een klankbord en een assistent die de code voor me snel kon schrijven.


De architectuur

De migratie was ook een kans om dingen beter in te richten dan op de Synology. Ik heb daarom niet alles één op één overgezet.

NAS als pure opslag

De DS918+ doet nu alleen nog wat hij goed kan: opslag. Alle media, Docker-volumes en projectbestanden staan op de NAS, gemount via NFS op de EliteDesk. Voor containers zijn de mappen gewoon beschikbaar alsof ze lokaal zijn. De twee machines voelen als één systeem.

Nginx Proxy Manager + wildcard DNS

Dit is waar ik het meest trots op ben. Nginx Proxy Manager als centrale reverse proxy, gecombineerd met AdGuard Home voor lokale DNS. Elke container krijgt een nette domeinnaam: plex.lan, immich.lan, git.lan. Geen poortnummers onthouden, geen uitzonderingen.

Diezelfde setup werkt ook naar buiten: via *.sanderveldscholten.nl zijn een aantal diensten bereikbaar vanaf internet, met SSL via Let's Encrypt. Nextcloud draait zo bijvoorbeeld gewoon op een eigen subdomein.

Nginx Proxy Manager dashboard met lijst van proxy hosts
Nginx Proxy Manager: elke container heeft een eigen domeinnaam, allemaal groen.

Tailscale

De EliteDesk is een Tailscale-exitnode en subnet-router voor mijn thuisnetwerk. Waar ik ook ben, ik kom via Tailscale op mijn thuis-omgeving alsof ik er zit. Mijn laptop met RTX 4070 doet AI-taken voor services op de server. Immich gebruikt de GPU van de laptop voor machine learning terwijl de container zelf op de EliteDesk draait.

Homepage, Forgejo, Uptime Kuma en thuiswiki

Homepage geeft me één overzicht van alles wat draait, met statussen en snelkoppelingen. Forgejo is mijn eigen git-server voor persoonlijke projecten, van mij geen GitHub voor privécode. Uptime Kuma houdt bij of alles bereikbaar is en stuurt een melding op Telegram als dat niet zo is. En DokuWiki draait als thuiswiki: recepten, handleidingen en aantekeningen, alleen bereikbaar binnen het thuisnetwerk.

DokuWiki thuiswiki bereikbaar op wiki.lan
De thuiswiki draait op wiki.lan.

Wat AI hier wel en niet deed

Ik wil hier geen reclamepraatje van maken, dus even eerlijk.

Wat AI goed deed

  • Architectuur meedenken. Van "ik wil een server" naar een concrete inrichting met afgewogen keuzes: welke hardware, hoe NFS opzetten, hoe DNS en proxy samenwerken.
  • Scripts en configs leveren. In plaats van uren zoeken op Stack Overflow kreeg ik direct werkende compose-files en bash-commando's. Ik leer al doende; dat ging hier heel snel.
  • Foutmeldingen debuggen. Ik gooide foutmeldingen in de chat en we kwamen samen tot oplossingen. Dat scheelt enorm veel tijd en frustratie.
  • Geduldig uitleggen. Dezelfde vraag op drie manieren stellen werkt prima. Geen Stack Overflow-commentaar dat je de documentatie had moeten lezen.

Wat AI niet deed

  • Foutloos werken. Claude draait soms vast in een oplossingsrichting die niet werkt. Een welgemikte extra opmerking, "je maakt iets simpels nu wel héél complex, kan het niet aan # liggen?", haalt hem daar meestal uit.
  • De beslissingen nemen. Welke services ik wilde draaien, hoe ik mijn netwerk wilde inrichten en wat ik belangrijk vond: dat bleef mensenwerk.
  • Het idee bedenken. "Ik wil een eigen server" is geen AI-idee.

De tijdswinst zat niet in de snelheid per stap. Die zat in het wegvallen van de drempel "hoe voer ik dit uit". Zonder AI had ik maanden kunnen studeren voordat ik ook maar één container goed had draaien. Nu was ik vanaf dag één aan het bouwen en na twee weken avondwerk was ik vrijwel klaar.


Resultaat

Op de EliteDesk draaien nu ongeveer vijftig containers: media, foto's, muziek, recepten, boeken, home automation, AI, git, monitoring, backups en eigen projecten zoals de sprookjesspeler en de leesapp voor mijn zoontje. De NAS staat er (letterlijk) stil naast en levert opslag. Tailscale verbindt alles, ook onderweg. NPM maakt alles bereikbaar met een nette naam.

Wat me het meest bijblijft: ik begrijp wat er draait. Ik kan een nieuwe container opzetten zonder het te hoeven vragen, ik herken foutmeldingen en weet waar ik moet kijken. Ik had niet verwacht dat ik na twee weken avondwerk zelf een compose-file zou kunnen lezen. Toch is dat wat er gebeurde.

Vragen over de stack of een onderdeel ervan? Stuur me een bericht via het contactformulier.