Ik wilde m’n Minecraft-server vanaf m’n telefoon kunnen beheren. SSH kon dat natuurlijk al. Maar blijkbaar vond ik dat niet genoeg. Dus heb ik Helm gebouwd.
Het probleem
M’n Minecraft-server draait op een oude computer die hier thuis als homeserver dienstdoet. Hij hoeft eigenlijk alleen aan te staan wanneer we Minecraft spelen.
In theorie is dat geen probleem. In de praktijk betekende het vooral dat ik eerst naar de computer moest lopen om hem aan te zetten, vervolgens de server moest starten en na het spelen alles weer moest afsluiten.
Allemaal dingen die prima via SSH kunnen. Maar ik wilde gewoon een knop. Dus kreeg die knop er een hele applicatie omheen.
Helm
Helm is een kleine PWA waarmee ik m’n Minecraft-servers kan beheren. Het uitgangspunt was simpel: alleen bouwen wat ik zelf nodig heb.
Vanaf m’n telefoon kan ik onder andere:
- de homeserver wakker maken middels Wake-on-LAN;
- Minecraft-servers starten en stoppen;
- nieuwe servers aanmaken;
- servers verwijderen;
- commando’s naar de Minecraft-console sturen;
- automatische back-ups beheren.
Een volledige Minecraft-console heb ik bewust niet gebouwd. Op een telefoon werkt zo’n console toch voor geen meter en voor de keren dat ik hem echt nodig heb, kan ik gewoon via SSH inloggen.
De Minecraft-servers draaien achter een reverse proxy, zodat m’n IP-adres niet de wereld ingeslingerd wordt.
Hoe het werkt
Onder de motorkap is Helm eigenlijk verrassend klein.
┌─ Raspberry Pi 3B+ · de app ─────────────────┐
│ serveert de PWA en stuurt opdrachten door │
│ maakt de homeserver wakker (Wake-on-LAN) │
└─────────────────────────────────────────────┘
│
▼
┌─ Homeserver · de agent ─────────────────────┐
│ voert de opdrachten uit in de shell │
│ (Podman-containers met Minecraft) │
└─────────────────────────────────────────────┘
De PWA draait op een Raspberry Pi 3B+; hij staat altijd aan en ligt in de meterkast.
Wanneer ik Helm gebruik terwijl de homeserver uit staat, stuurt de Pi eerst een Wake-on-LAN-pakketje. Zodra de server wakker is, kunnen de opdrachten worden doorgestuurd.
Op de homeserver draait vervolgens een kleine agent. Die ontvangt de opdrachten van de Pi en voert ze uit in de shell.
De communicatie loopt volledig via Tailscale. Helm is daardoor alleen bereikbaar vanaf apparaten in m’n eigen Tailscale-netwerk en staat niet publiek op internet.
Waarom zelf bouwen?
Er bestaan natuurlijk al prima oplossingen hiervoor. Pterodactyl bijvoorbeeld kan veel meer dan Helm ooit zal doen. Het kan complete Minecraft-servers beheren en is gemaakt voor meerdere servers en gebruikers tegelijk.
Maar dat is precies het probleem. Ik heb helemaal geen hostingplatform nodig. Ik wilde een paar knoppen om een computer aan te zetten, een Minecraft-container te starten en af en toe een commando uit te voeren.
Een compleet platform installeren voor iets dat uiteindelijk zo klein is, voelde een beetje alsof ik een hijskraan nodig had om een IKEA-kast in elkaar te zetten. Dus heb ik het zelf gebouwd.
Waarom een PWA?
Omdat ik Helm op m’n telefoon wilde gebruiken. De PWA kan geïnstalleerd worden en verschijnt daardoor tussen m’n andere apps. Geen browser openen, geen URL intikken en geen gedoe.
Gewoon Helm openen, op een knop drukken en m’n Minecraft-server doet wat hij moet doen. En mocht ik ooit besluiten dat ik toch iets extra’s nodig heb, is hij gemakkelijk uit te breiden.
