Tussenuur.info logo Tussenuur.info
Privacy Beveiliging Dashboard

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.

Overzicht Thuis hosten VPS huren Gamehosting Tunnels Opzetten

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
Verander het wachtwoord meteen na je eerste login. Een beheerpaneel met standaardgegevens is een open deur; zet er direct een sterk wachtwoord op.

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
Docker gaat langs ufw om. Een container die je publiceert, zet Docker zelf in iptables. Een 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.

Wie verantwoordelijk is. De server draait bij jullie, dus de leerlinggegevens daarop vallen onder de AVG en onder de school. Een whitelist met namen van minderjarigen is al een persoonsgegeven, en voor online diensten geldt in Nederland een leeftijdsgrens van 16 jaar. Laat de school dit schoolbreed vastleggen; zie ons privacybeleid.

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.

Terug naar het overzicht

Home· Privacybeleid· Beveiliging · Status