Minecraft-server
Server opzetten
De aanbevolen route: Crafty Controller via Docker. Je krijgt een nette webinterface waarin je servers aanmaakt, start, back-ups maakt en volgt, zonder dat je zelf Paper en systemd hoeft te beheren. Werkt zowel op een VPS als op een computer thuis.
Crafty Controller in vier stappen
Crafty Controller is een gratis, open-source beheerpaneel voor Minecraft-servers. Het draait als container naast je server en geeft je een webinterface voor starten, stoppen, de console, bestanden, plugins en automatische back-ups. Je betaalt er niets voor en je houdt volledige controle over de machine. Het is het gemak van managed gamehosting, maar dan op je eigen hardware.
1. Docker installeren
Gebruik Linux (Ubuntu Server of Debian). Docker op Windows via WSL kan werken als je de serverbestanden op een WSL2-ext4-volume zet en niet op een gemounte Windows-map, maar bestandsvergrendeling en rechten tussen Windows en de container blijven een bekend risico. Daarom is Linux de veiligere keuze.
curl -fsSL https://get.docker.com | sh
sudo usermod -aG docker $USER
# daarna uitloggen en opnieuw inloggen (of: newgrp docker)
Controleer met docker run hello-world. Lukt dat, dan werkt de installatie.
2. Crafty starten
Maak een map en een docker-compose.yml aan:
mkdir -p /srv/crafty && cd /srv/crafty
nano docker-compose.yml
services:
crafty:
container_name: crafty_container
image: registry.gitlab.com/crafty-controller/crafty-4:latest
restart: always
environment:
- TZ=Europe/Amsterdam
ports:
- "127.0.0.1:8443:8443" # paneel (HTTPS), alleen lokaal bereikbaar
- "25565:25565" # Minecraft Java (op een VPS; thuis via tunnel)
- "19132:19132/udp" # Bedrock (optioneel)
volumes:
- ./backups:/crafty/backups
- ./logs:/crafty/logs
- ./servers:/crafty/servers
- ./config:/crafty/app/config
- ./import:/crafty/import
docker compose up -d
docker compose logs -f
De container start nu automatisch mee met de machine. Wil je meerdere servers op verschillende poorten, breid dan de poortenlijst uit met bijvoorbeeld "25566:25566".
3. Inloggen op het paneel
Het paneel luistert alleen op de machine zelf, dus je opent het via een SSH-tunnel. Draai dit op je eigen computer (niet op de server):
ssh -L 8443:localhost:8443 GEBRUIKER@SERVER_IP
Laat dat venster openstaan en ga in je browser naar https://localhost:8443. Je browser waarschuwt voor het zelfondertekende certificaat; dat is normaal, keur het eenmalig goed. De gebruikersnaam is admin; het wachtwoord staat in het bestand ./config/default-creds.txt. Bekijk het (op de server) met:
cat /srv/crafty/config/default-creds.txt
4. Je eerste server aanmaken
Klik in Crafty op Servers → Create Server (of de knop +). Kies Paper als servertype, kies de Minecraft-versie, geef een poort op (bijvoorbeeld 25565) en stel het geheugen in. Crafty downloadt de jar en beheert de rest. Reken voor het serverproces op 2 tot 4 GB bij 1 tot 10 spelers, 4 tot 6 GB bij 10 tot 20 en 6 tot 8 GB bij 20 tot 50, en houd daarnaast geheugen vrij voor het systeem. Start de server en je kunt joinen.
Bedrock-spelers (tablets en iPads)
Deze gids gaat over Java Edition. Op veel scholen spelen leerlingen op een iPad of tablet, en dat is Bedrock Edition; die kan niet rechtstreeks op een Java-server. Met de Geyser-plugin (of Geyser als losse proxy) komen Bedrock-spelers toch binnen, en met Floodgate erbij hebben ze geen apart Java-account nodig. Open daarvoor UDP-poort 19132 (staat al in de docker-compose hierboven). Docker publiceert die poort zelf; host je thuis, dan loopt het via een tunnel in plaats van een open poort.
Bedrock en Java lopen niet altijd gelijk qua versie, dus test vooraf. Houd online-mode en de whitelist goed dicht: via Geyser komen spelers uit de hele wereld binnen als je niets afschermt.
Firewall en veiligheid
sudo apt update && sudo apt upgrade -y
sudo apt install -y ufw fail2ban
sudo ufw default deny incoming
sudo ufw allow OpenSSH
sudo ufw allow 25565/tcp
sudo ufw allow 19132/udp # alleen als je Geyser/Bedrock gebruikt
sudo ufw enable
ufw deny op zo'n poort heeft dus geen effect zolang de poort in de compose staat, en ufw allow 25565 is in dat geval overbodig. Daarom publiceren we het paneel hierboven alleen op 127.0.0.1 en benader je het via een SSH-tunnel. Poort 25565 (en 19132/udp voor Bedrock) publiceren we wél naar buiten, want daar komen spelers op binnen. Host je thuis, publiceer die poorten dan niet: gebruik een tunnel en bind ze op 127.0.0.1. ufw blijft nuttig voor diensten die niet in Docker draaien, zoals SSH.
Alternatief voor gevorderden: publiceer 8443 toch (draai de mapping terug naar "8443:8443") en beperk hem met de Docker-specifieke firewallchain DOCKER-USER.
# Alleen jouw IP mag bij het paneel
sudo iptables -I DOCKER-USER -p tcp --dport 8443 ! -s JOUW_THUIS_IP -j DROP
Let op: regels in DOCKER-USER verdwijnen bij een herstart van Docker; gebruik anders iptables-persistent, of kies gewoon de SSH-tunnel.
Back-ups
Crafty heeft een ingebouwde back-upfunctie met een schema per server. Stel die direct in en bewaar de back-ups buiten de machine (externe schijf of cloud). Een leuke wereld kwijtraken door één kapotte schijf of een verkeerd commando is zonde; een back-up kost je twee minuten.
Domein en DNS
Een .nl-domein kost bij de registrar zelf een paar euro per jaar. Maak een A-record dat naar je server-IP wijst. Wil je dat spelers zonder poortnummer kunnen joinen, voeg dan een SRV-record toe: een DNS-regel die vertelt naar welke hostnaam en poort spelers gaan. Zo hoeven ze alleen de naam te typen:
mc.jouwdomein.nl. IN A 203.0.113.10
_minecraft._tcp.play.jouwdomein.nl. IN SRV 0 5 25565 mc.jouwdomein.nl.
De SRV-record hoort bij het adres dat spelers intypen. Willen ze met play.jouwdomein.nl joinen, gebruik dan _minecraft._tcp.play.jouwdomein.nl. Laat je ze rechtstreeks op jouwdomein.nl joinen, dan heet de record _minecraft._tcp.jouwdomein.nl. Het doel van een SRV-record moet een hostnaam met een A-record zijn, geen IP en geen CNAME. Host je thuis via een tunnel, dan wijst je domein naar de tunnel, niet naar je huis-IP.
Liever geen paneel? Handmatig installeren
Wil je juist leren hoe Paper zonder extra laag draait, dan kan het ook handmatig. Dit is meer werk en je beheert alles zelf, maar je leert er het meest van.
Installeer eerst Java. Paper 1.20.5 tot en met 1.21.11 draait op Java 21; de jaarnummers vanaf 26.1 (de nieuwe versienummering) vragen Java 25, en oudere versies (1.18 tot 1.20.4) Java 17. Een oudere server draait meestal prima op een nieuwere Java, maar het omgekeerde niet: een 26.x-jar start niet op Java 21. Kijk altijd in de Paper-documentatie voor jouw versie.
# Java 21
sudo apt install -y openjdk-21-jre-headless
# of Java 25, afhankelijk van je Paper-versie
sudo apt install -y openjdk-25-jre-headless
Download paper.jar van papermc.io, zet eula=true in eula.txt (daarmee accepteer je de Minecraft EULA), en maak een systemd-service zodat de server na een reboot vanzelf terugkomt. Geef de JVM iets minder geheugen dan je totale RAM; bij 8 GB is 6 GB een veilige keuze.
[Unit]
Description=Minecraft Paper Server
After=network.target
[Service]
User=minecraft
WorkingDirectory=/srv/minecraft
ExecStart=/usr/bin/java -Xms6G -Xmx6G -jar paper.jar --nogui
Restart=on-failure
[Install]
WantedBy=multi-user.target
Wat je hiervan leert
Met de Crafty-route leer je hoe containers werken: een image, volumes, poorten en herstartbeleid. Je leert waarom je gegevens buiten de container bewaart en hoe je een dienst automatisch laat terugkomen. Kies je de handmatige route, dan komt daar Linux bij: SSH-sleutels, rechten, een systemd-service maken en logs lezen met journalctl.
Daar komt netwerk en performance bij. Het verschil tussen een publiek en een privé-IP, NAT, CGNAT, DNS en SRV-records, waarom latency iets anders is dan bandbreedte, en waarom meer RAM niet automatisch sneller is. En je leert dat beheer een prijs heeft: uptime, monitoring, back-ups en iemand die het oplost als het misgaat.