SSD Nodes Learn
Gidsen Matt ConnorDoor Matt Connor · Bijgewerkt 2026-07-24

Minecraft server op VPS installeren

Leer een Paper Minecraft server draaien op Ubuntu 24.04 met Java 21 en systemd. Wij bespreken RAM-behoefte, poort 25565 en veilige backups voor uw wereld.

Wat u bouwt

Een Minecraft Java Edition server die stabiel blijft draaien: Paper op Ubuntu 24.04, draaiend als een dedicated minecraft user onder systemd met Restart=on-failure, met de whitelist ingeschakeld, poort 25565 open in beide firewalls tussen uw spelers en de JVM, en back-ups die worden gemaakt zonder de wereld te beschadigen. De server zelf bestaat uit één jar-bestand en één java command; alles wat een server die uw vrienden een jaar lang spelen onderscheidt van een server die na het eerste weekend stopt, heeft te maken met dat command. Dit is wat deze handleiding behandelt.

Twee waarschuwingen voordat u kosten maakt. Ten eerste is Minecraft zeer geheugenvreters en voornamelijk single-threaded: een VPS met 1 GB zal geen speelbare server kunnen draaien, en één snelle core is beter dan vier langzame cores. Ten tweede gaat dit om de Java Edition. Bedrock-spelers — consoles, telefoons, de Windows Bedrock app — kunnen niet deelnemen aan een Java-server; Bedrock heeft andere serversoftware nodig op UDP 19132, of de Geyser plugin, wat buiten de scope van deze handleiding valt.

U heeft een nieuwe Ubuntu 24.04 KVM VPS nodig met root- of sudo-rechten, en ongeveer dertig minuten tijd.

Sizing: wat een vriendenserver daadwerkelijk nodig heeft

RAM is de belangrijkste factor. De werkelijke vereisten liggen lager dan de cijfers op de modpack-forums suggereren:

  • 2 GB is voldoende voor vanilla met 2–5 spelers bij een bescheiden view distance. Speelbaar, maar zonder extra marge.
  • 4 GB is de ideale grootte voor een vriendenserver: ongeveer tien gelijktijdige spelers op Paper met enkele plugins, met voldoende overschot voor het OS.
  • 8 GB en hoger is nodig voor modpacks en 20+ spelers. Let hierbij ook op de single-core CPU-snelheid, omdat de hoofdgame-loop op één thread draait.

De wereld neemt ook ruimte in op de schijf naarmate spelers verkennen — een veelbezochte survival-wereld kan meerdere gigabytes groot worden. Zorg daarom voor voldoende ruimte voor de wereld en de backups.

Vanilla of Paper? Paper is een directe vervanging voor de officiële jar: dezelfde werelden, dezelfde clients, geen client-side mods nodig. Paper herschrijft de traagste serverpaden — chunk loading, entity ticking, hoppers — en voegt een plugin API toe. De enige reden om vanilla te gebruiken is als u bit-exacte vanilla-mechanieken nodig heeft voor technische redstone-farms die door de optimalisaties van Paper gewijzigd kunnen worden. Voor alle andere gebruikers biedt Paper meer spelers per gigabyte. Alle onderstaande instructies werken voor beide opties.

Stap 1: installeer Java 21

Minecraft 1.20.5 en elke latere release (alle 1.21.x versies) vereist Java 21. Ubuntu 24.04 levert dit standaard in de repositories. De headless-versie laat de desktop-libraries achterwege die een server nooit gebruikt:

sudo apt update && sudo apt install -y openjdk-21-jre-headless
java -version

Correct resultaat: de eerste regel toont openjdk version "21.0.x". Als er 17 of 11 staat, is er een andere JRE geïnstalleerd die prioriteit krijgt. Los dit op met sudo update-alternatives --config java en selecteer de vermelding met java-21.

Het overslaan van deze controle veroorzaakt later de meest gezochte Minecraft-serverfout. Met Java 17 crasht de server jar direct met:

Error: LinkageError occurred while loading main class net.minecraft.bundler.Main
	java.lang.UnsupportedClassVersionError: net/minecraft/bundler/Main has been
	compiled by a more recent version of the Java Runtime (class file version 65.0),
	this version of the Java Runtime only recognizes class file versions up to 61.0

De getallen duiden de mismatch aan: class file version 65.0 is Java 21, 61.0 is Java 17, 60.0 is Java 16. Welk paar u ook ziet, de oplossing is hetzelfde — installeer de nieuwere JRE en voer update-alternatives opnieuw uit.

Stap 2: een toegewezen gebruiker, nooit root

De server voert plugin-code uit en verwerkt netwerkinput van iedereen die de poort kan bereiken. Als dit misgaat, krijgt een aanvaller met root-rechten de volledige controle over uw VPS; een aanvaller met minecraft heeft slechts controle over een spelwereld.

sudo adduser --system --group --home /opt/minecraft minecraft

--system maakt een account aan zonder wachtwoord dat niet via SSH kan inloggen, met /opt/minecraft als home- en werkmap. Elke opdracht die vanaf dit punt de server aanraakt, wordt uitgevoerd als deze gebruiker.

Stap 3: download de server jar van de officiële bron

Alleen twee locaties mogen een server jar leveren: de officiële downloadpagina op minecraft.net voor vanilla, en de downloadpagina op papermc.io voor Paper. Derde partij "download hubs" die server jars verpakken zijn een bekende bron van malware — een server jar is willekeurige code die u 24/7 uitvoert op een machine die verbonden is met het internet.

Kopieer de downloadlink van de huidige build van de officiële pagina (de URL verandert bij elke versie en build, dus een vaste link hier zou verouderd raken), en doe dan het volgende:

cd /opt/minecraft
sudo -u minecraft wget -O server.jar 'PASTE-THE-COPIED-URL-HERE'

Correct resultaat: een server.jar van ongeveer 50 MB van minecraft, bevestigd met ls -lh /opt/minecraft/server.jar.

Stap 4: de eerste run, de EULA, en jezelf als admin instellen

Voer de server één keer interactief uit voordat u systemd gebruikt — de eerste run heeft twee taken die alleen via een actieve console goed verlopen.

cd /opt/minecraft
sudo -u minecraft java -Xms1G -Xmx1G -jar server.jar nogui

Het proces stopt binnen enkele seconden — Paper heeft iets meer tijd nodig om patches toe te passen — en het logboek eindigt met de regel waar iedereen tegenaan loopt:

[ServerMain/INFO]: You need to agree to the EULA in order to run the server. Go to eula.txt for more info.

Dit is geen fout; het is een licentiecontrole. De run heeft eula.txt naast de jar geschreven. Lees de gekoppelde EULA als u dat nog niet heeft gedaan, en zet daarna de flag aan:

sudo -u minecraft sed -i 's/eula=false/eula=true/' /opt/minecraft/eula.txt

Voer hetzelfde java commando opnieuw uit. Deze keer wordt de wereld gegenereerd — dit duurt een minuut of twee bij de eerste start — en het proces stopt bij:

[Server thread/INFO]: Done (9.204s)! For help, type "help"

U heeft nu een actieve console. Gebruik deze voor de tweede taak: typ op YourMinecraftName (uw exacte in-game gebruikersnaam) en de server schrijft u in ops.json, zodat u later — wanneer er geen console is gekoppeld — alle admin-commando's vanuit het spel kunt uitvoeren. Typ vervolgens stop om op te slaan en netjes af te sluiten.

Stap 5: server.properties, en waarom online-mode op true blijft staan

De eerste uitvoering heeft ook server.properties geschreven. De meeste standaardinstellingen zijn correct; dit zijn de regels waarover u een bewuste keuze moet maken:

online-mode=true
white-list=true
enforce-whitelist=true
view-distance=8
max-players=10
motd=A private server for people I actually know

online-mode=true zorgt ervoor dat de server elke gebruikersnaam die verbinding maakt controleert bij de session servers van Mojang. Hiermee wordt bewezen dat de speler de eigenaar van het account is. De instelling op false — de "cracked server" optie — betekent dat de server de identiteit van een client simpelweg aanneemt. Iedereen kan deelnemen onder elke naam, inclusief die van u. Omdat ops en whitelists op basis van naam werken, kan een indringer met uw operator-rechten deelnemen. De enige legitieme reden om dit op false te zetten is achter een authenticerende proxy zoals Velocity, die spelers zelf verifieert. Op een normale server blijft dit op true staan.

view-distance is de belangrijkste instelling voor de prestaties in dit bestand — de CPU- en RAM-belasting schaalt ongeveer met het kwadraat van deze waarde. 8 is een verstandige standaard voor een VPS; 10 is de vanilla-standaard en is merkbaar zwaarder.

white-list=true plus enforce-whitelist=true sluit de server af voor vreemden. De onderstaande sectie over beveiliging stelt dat dit niet optioneel is. Voeg spelers toe met /whitelist add TheirName in-game als een op.

Stap 6: memory flags — waarom -Xms en -Xmx gelijk moeten zijn

De JVM reserveert de heap tussen -Xms (startgrootte) en -Xmx (maximumgrootte). Stel deze op een dedicated gameserver in op dezelfde waarde: de heap bereikt sowieso het maximum, en het stapsgewijs vergroten zorgt alleen voor extra belasting van de garbage-collector tijdens het spelen. Voor een 4 GB VPS is de juiste combinatie:

/usr/bin/java -Xms3G -Xmx3G -jar server.jar nogui

-Xmx is niet het totale geheugen dat het proces gebruikt. De JVM gebruikt extra off-heap geheugen — thread stacks, JIT caches, direct buffers — van ongeveer een half gigabyte of meer, en Ubuntu heeft zelf ook ruimte nodig. De vuistregel: stel -Xmx in op maximaal VPS RAM minus 1 GB. Als u dit overschrijdt, krijgt u een van de volgende twee fouten. Als de toewijzing direct mislukt, start de server niet met:

Error: Could not reserve enough space for object heap

Dit is een duidelijke en directe foutmelding. De ernstigere variant start wel, maar crasht uren later wanneer de heap vol raakt onder belasting en de OOM killer van de kernel het grootste proces op het systeem kiest — de JVM. Er verschijnt niets in het serverlog; het bewijs staat in sudo dmesg | grep -i oom, bijvoorbeeld een regel als Out of memory: Killed process 1234 (java). Als uw service "willekeurig" herstart, controleer dan eerst daar en verlaag -Xmx.

Voor Paper raadt het project Aikar's flags aan — een geoptimaliseerde G1GC-set (-XX:+UseG1GC -XX:MaxGCPauseMillis=200 en diverse andere flags) die de pauzes van de garbage-collection op grotere heaps vermindert. Genereer de volledige regel via de Paper-documentatie; bij een heap van 2–4 GB is de winst beperkt, maar de flags zijn veilig te gebruiken.

Stap 7: een systemd unit met Restart=on-failure

Een handmatig gestarte server stopt zodra de SSH-sessie eindigt en blijft uitgeschakeld na een reboot. Schrijf /etc/systemd/system/minecraft.service:

[Unit]
Description=Minecraft server (Paper)
After=network-online.target
Wants=network-online.target

[Service]
User=minecraft
Group=minecraft
WorkingDirectory=/opt/minecraft
ExecStart=/usr/bin/java -Xms3G -Xmx3G -jar server.jar nogui
Restart=on-failure
RestartSec=10
TimeoutStopSec=120

[Install]
WantedBy=multi-user.target
sudo systemctl daemon-reload
sudo systemctl enable --now minecraft
systemctl status minecraft
journalctl -u minecraft -f

Correct resultaat: status toont active (running), en de journal — die nu de console-output van de server bevat — eindigt weer bij de Done regel.

Er zijn twee bewuste keuzes in deze unit. Restart=on-failure start de server opnieuw na een crash, maar niet na een nette stop, zodat onderhoud mogelijk blijft. En TimeoutStopSec=120 is belangrijker dan het lijkt: systemctl stop stuurt een SIGTERM, de Minecraft server vangt dit op en slaat elk wereldbestand op voordat hij afsluit. Bij een grote wereld duurt dit opslaan tijd. De standaard timeout van systemd kan de JVM halverwege het opslaan met een SIGKILL beëindigen, wat precies de oorzaak is van corruptie van region-bestanden. Geef het proces twee minuten.

Als de service herhaaldelijk start en stopt (flapping) en de journal het volgende toont:

[Server thread/WARN]: **** FAILED TO BIND TO PORT!
[Server thread/WARN]: The exception was: io.netty.channel.unix.Errors$NativeIoException: bind(..) failed: Address already in use
[Server thread/WARN]: Perhaps a server is already running on that port?

dan wordt poort 25565 al gebruikt — bijna altijd door een eerdere sessie die nog actief is in een andere SSH-sessie. Zoek dit proces met sudo ss -tlnp | grep 25565 en stop deze kopie; draai nooit twee servers op dezelfde poort.

Stap 8: open 25565 op beide firewalls

Minecraft Java gebruikt uitsluitend TCP 25565 (UDP is alleen voor het optionele query-protocol en staat standaard uit). Op de VPS:

sudo ufw allow OpenSSH
sudo ufw allow 25565/tcp
sudo ufw enable

Dit is de eerste firewall. De meeste VPS-providers gebruiken een tweede firewall op netwerkniveau in het controlepaneel; dit is de firewall die vaak wordt vergeten. Open daar ook TCP 25565. Het symptoom wanneer slechts één van de twee firewalls open is, is zeer onduidelijk: de client blijft hangen op "Connecting to the server..." en geeft Connection timed out: no further information — geen weigering, geen serverfout, geen vermelding in de journal, omdat de pakketten nooit zijn aangekomen. Controleer dit vanaf een machine buiten de VPS met nc -vz your.server.ip 25565; succeeded betekent dat beide firewalls open zijn, een hangende verbinding betekent dat er minstens één gesloten is.

Terwijl u met ufw bezig bent: dezelfde machine draait SSH op een publiek IP-adres. Brute-force logs verschijnen al binnen enkele uren — set up Fail2ban for SSH on Ubuntu 24.04 voordat u het vergeet.

Maak nu verbinding: Multiplayer, Direct Connection, het server IP. Omdat u uzelf in stap 4 hebt toegevoegd, werken in-game commands direct — /whitelist add FriendName voor elke speler, /gamemode creative als dat de bedoeling is.

Stap 9: whitelist instellen, omdat het internet poort 25565 vindt

Een Minecraft-server openstellen voor het internet is geen theoretisch risico. Massale scanners scannen continu de volledige IPv4-ruimte op poort 25565. Projecten gericht op griefing hebben op deze manier honderdduizenden openstaande servers in kaart gebracht. Een server zonder whitelist krijgt binnen enkele dagen, soms zelfs uren, ongewenste bezoekers. De whitelist uit stap 5 is de oplossing: online-mode=true bevestigt de identiteit, en de whitelist beperkt de toegang tot de door u gekozen identiteiten. Deze combinatie vormt het volledige beveiligingsmodel en is voldoende voor een server voor vrienden.

Voor console-toegang zonder de game — zoals geautomatiseerde backups of een cron job — kunt u RCON inschakelen in server.properties (enable-rcon=true, een sterke rcon.password, poort 25575). Bouw de kleine mcrcon client direct op de VPS vanuit de GitHub-broncode; deze zit niet in de Ubuntu-repos. Open poort 25575 niet in een firewall: RCON verzendt het wachtwoord in cleartext, dus de poort moet uitsluitend via loopback beschikbaar zijn.

Stap 10: backups die de wereld niet beschadigen

De enige regel: kopieer nooit een world-directory terwijl de server deze schrijft. Region-bestanden worden continu herschreven tijdens het spelen; een tar die een schrijfproces overschrijft, resulteert in een archief met half geschreven chunks. Wanneer u dit uiteindelijk herstelt — het enige moment dat een backup moet werken — staat het logboek vol met chunk-loading errors en bevat het terrein gaten. Twee methoden voorkomen dit.

Stop-copy-start is de eenvoudige methode, met een minuut downtime als gevolg:

sudo systemctl stop minecraft
sudo mkdir -p /opt/backups
sudo tar czf /opt/backups/world-$(date +%F-%H%M).tgz \
  -C /opt/minecraft world world_nether world_the_end
sudo systemctl start minecraft

(Paper splitst de dimensies op in world, world_nether en world_the_end; een vanilla server bewaart alles in world, dus verplaats de andere twee naar die map.)

Save-off maakt een backup van een actieve server: stuur via RCON save-off (stop de autosaver), voer daarna save-all flush uit (forceer alles naar de disk en wacht), maak het tar-bestand aan, en voer vervolgens save-on uit. Dit is de methode voor een cronjob om 5:00 uur 's nachts.

In beide gevallen is een backup die op dezelfde VPS staat als de server geen echte backup — verplaats de archieven naar scp of rclone en bewaar meerdere kopieën. Omdat u niet naar de console kijkt wanneer er iets misgaat, is het verstandig om een externe controle op de poort in te stellen: Uptime Kuma op een andere machine die een TCP-check uitvoert op poort 25565, meldt u dat de server offline is voordat uw spelers dat doen.

Plugins en upgrades

Bij Paper is een plugin een jar-bestand dat in /opt/minecraft/plugins/ wordt geplaatst, gevolgd door een herstart — dat is de volledige installatie. Download plugins uitsluitend van de officiële projectpagina's (Hangar, Modrinth, SpigotMC). Dit is even belangrijk als bij de server jar: elke plugin bevat willekeurige code die wordt uitgevoerd onder de minecraft user.

Het upgraden van de server verloopt als volgt: stoppen, een back-up maken, server.jar vervangen door de build voor de nieuwe Minecraft-versie, en starten. Let op twee zaken. World upgrades zijn eenrichtingsverkeer — een wereld die is geopend door een nieuwere versie kan niet worden geopend in een oudere versie. Gebruik hiervoor uw back-ups. Daarnaast lopen plugins vaak dagen of weken achter op een nieuwe Minecraft-release. Controleer de compatibiliteit voordat u direct na een release overstapt.

Als u dit liever als een container beheert — inclusief version pinning, EULA-acceptatie en memory flags als environment variables — dan gebruikt u de veelgebruikte itzg/minecraft-server image. Deze draait dezelfde Paper-server via Docker Compose op uw VPS met dezelfde firewall- en back-updiscipline.

FAQ

Hoeveel RAM heeft een Minecraft server nodig?

2 GB is voldoende voor vanilla met 2–5 spelers; 4 GB is comfortabel voor een server met ongeveer tien vrienden op Paper met enkele plugins; modpacks en 20+ spelers vereisen 8 GB of meer. Stel ongeacht de grootte van de VPS de -Xmx in op maximaal het totale RAM minus 1 GB — de JVM gebruikt geheugen buiten de heap, en te veel verbruik leidt tot Error: Could not reserve enough space for object heap of een stille OOM kill.

Waarom kunnen mijn vrienden geen verbinding maken met mijn Minecraft server?

Een client hang die eindigt in Connection timed out: no further information betekent bijna altijd een firewall, en er zijn er twee: ufw op de VPS en de netwerkfirewall van uw provider in het controlepaneel. TCP 25565 moet in beide open staan. Controleer of de server daadwerkelijk luistert met sudo ss -tlnp | grep 25565 op de machine, en test dit vervolgens van buitenaf met nc -vz your.server.ip 25565.

Moet ik online-mode=false instellen in server.properties?

Nee. Met online-mode=false slaat de server de Mojang-authenticatie volledig over. Hierdoor kan iedereen deelnemen onder elke gebruikersnaam — inclusief de naam van een op, waardoor zij de rechten overnemen — en werken skins en stabiele UUID's niet meer. Het enige legitieme gebruik is achter een authenticerende proxy zoals Velocity die spelers zelf verifieert. Voor een normale server blijft dit op true staan.

Is Paper beter dan de vanilla Minecraft server?

Voor bijna iedereen: ja. Paper is een vervangende jar die vanilla werelden laadt, ongewijzigde clients accepteert, entiteiten en chunks veel efficiënter verwerkt en het plugin-ecosysteem toevoegt. De uitzondering zijn technische redstone-communities die exact vanilla-gedrag nodig hebben, aangezien sommige Paper-optimalisaties dit gedrag wijzigen. Op een kleine VPS levert de efficiëntie van Paper effectief extra RAM op.

Hoe maak ik een back-up van een Minecraft wereld zonder corruptie?

Archiveer de wereldmap nooit terwijl de server er gegevens naar schrijft — een kopie die concurreert met een schrijfactie naar een region-file veroorzaakt corrupte chunks die u pas bij het herstellen ontdekt. Stop de server, tar de wereldmappen en start de server opnieuw, of houd de server actief met save-off, save-all flush, tar, en save-on via RCON. Verplaats het archief daarna van de VPS weg.

#minecraft#game-server#java#ubuntu#self-hosting