Minecraft server draaien op Ubuntu 24.04 VPS
Leer hoe u een stabiele Paper Minecraft server opzet op Ubuntu 24.04. Wij behandelen Java 21 installatie, systemd configuratie, firewall regels en veilige back-up methoden.
Wat u bouwt
Een Minecraft Java Edition-server die stabiel blijft draaien: Paper op Ubuntu 24.04, uitgevoerd als een toegewezen minecraft-gebruiker onder systemd met Restart=on-failure, whitelist ingeschakeld, poort 25565 open in beide firewalls die zich tussen uw spelers en de JVM bevinden, en back-ups die worden gemaakt op een manier die de wereld die ze moeten beschermen niet beschadigt. De server zelf bestaat uit één jar-bestand en één java-commando; alles wat een server waar uw vrienden een jaar op spelen onderscheidt van een server die het eerste weekend al crasht, draait om dat commando, en dat is wat deze handleiding behandelt.
Twee eerlijke waarschuwingen voordat u geld uitgeeft. Ten eerste: Minecraft is geheugenintensief en grotendeels single-threaded; een VPS met 1 GB RAM zal geen speelbare server draaien, en één snelle core is beter dan vier langzame. Ten tweede: dit is Java Edition. Bedrock-spelers, consoles, telefoons en de Windows Bedrock-app kunnen niet deelnemen aan een Java-server; Bedrock vereist andere serversoftware op UDP 19132, of de Geyser-plugin, wat buiten de scope van deze handleiding valt.
U heeft een verse Ubuntu 24.04 KVM VPS nodig met root- of sudo-toegang, en ongeveer dertig minuten tijd.
Sizing: wat een server voor vrienden werkelijk nodig heeft
RAM is de doorslaggevende factor, en de realistische cijfers liggen lager dan de forums voor modpacks suggereren:
- 2 GB is voldoende voor vanilla met 2–5 spelers op een bescheiden render-afstand. Speelbaar, maar zonder enige reserve.
- 4 GB is de ideale omvang voor een server met vrienden: ongeveer tien gelijktijdige spelers op Paper met een handvol plugins, en voldoende ruimte over voor het besturingssysteem.
- 8 GB en meer is bedoeld voor modpacks en meer dan 20 spelers. Hierbij is ook de single-core CPU-snelheid van belang, omdat de hoofd-game-loop op één thread draait.
De wereld groeit ook op de schijf naarmate spelers deze verkennen. Een intensief verkende survival-wereld bereikt al snel enkele gigabytes, dus houd rekening met voldoende ruimte voor de wereld en de bijbehorende back-ups.
Vanilla of Paper? Paper is een directe vervanger voor de officiële jar: dezelfde werelden, dezelfde clients, en er zijn geen client-side mods vereist. Het herschrijft de traagste serverprocessen, zoals het laden van chunks, entity-ticking en hoppers, en voegt een plugin-API toe. De enige reden om vanilla te draaien is als u bit-exacte vanilla-mechanica nodig heeft voor technische redstone-farms die door de optimalisaties van Paper kunnen veranderen; voor alle andere gevallen biedt Paper meer spelers per gigabyte. Alles hieronder werkt voor beide.
Stap 1: Java 21 installeren
Minecraft 1.20.5 en elke release daarna (alle 1.21.x-versies) vereisen Java 21. Ubuntu 24.04 levert dit in de standaard repositories, en de headless-build slaat de desktopbibliotheken over die een server nooit zal gebruiken:
sudo apt update && sudo apt install -y openjdk-21-jre-headless
java -versionCorrect resultaat: de eerste regel bevat openjdk version "21.0.x". Als hier 17 of 11 staat, is een andere JRE geïnstalleerd en actief; corrigeer dit met sudo update-alternatives --config java en kies het item dat java-21 bevat.
Het overslaan van deze controle leidt later tot de meest gegoogelde Minecraft-serverfout. Met Java 17 stopt het server-jar direct met de volgende melding:
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.0De getallen decoderen het verschil: 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 plug-incode uit en verwerkt netwerkinvoer van iedereen die de poort kan bereiken. Als dit ooit misgaat, heeft een aanvaller die als root draait volledige controle over uw VPS; een proces dat draait als minecraft heeft alleen controle over een spelwereld.
sudo adduser --system --group --home /opt/minecraft minecraft--system maakt een account zonder wachtwoord aan dat niet via SSH kan inloggen, met /opt/minecraft als home- en werkdirectory. Elk commando dat vanaf dit punt de server raakt, wordt uitgevoerd als deze gebruiker.
Stap 3: download het server-jar-bestand van de officiële bron
Er zijn slechts twee locaties waar u een server-jar-bestand mag downloaden: de officiële downloadpagina op minecraft.net voor vanilla, of de downloadpagina op papermc.io voor Paper. "Downloadhubs" van derden die server-jar-bestanden opnieuw verpakken, zijn een bekend kanaal voor malware. Een server-jar-bestand is willekeurige code die u 24/7 op een server met internetverbinding gaat uitvoeren.
Kopieer de downloadlink voor de huidige build van de officiële pagina (de URL verandert bij elke versie en build, dus het hardcoderen van een link hier zou snel verouderen), en voer daarna het volgende uit:
cd /opt/minecraft
sudo -u minecraft wget -O server.jar 'PASTE-THE-COPIED-URL-HERE'Correct resultaat: een server.jar van ongeveer 50 MB in eigendom van minecraft, bevestigd met ls -lh /opt/minecraft/server.jar.
Stap 4: eerste uitvoering, de EULA en uzelf op-rechten geven
Start de server eenmalig interactief voordat u systemd configureert; de eerste uitvoering heeft twee taken die alleen via een live console goed verlopen.
cd /opt/minecraft
sudo -u minecraft java -Xms1G -Xmx1G -jar server.jar noguiDe server stopt binnen enkele seconden. Paper besteedt eerst wat tijd aan het toepassen van patches en het logbestand eindigt met de melding die iedereen ziet:
[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 foutmelding; het is een licentiebeperking. De uitvoering heeft eula.txt aangemaakt naast het jar-bestand. Lees de gelinkte EULA als u dat nog niet heeft gedaan en wijzig vervolgens de vlag:
sudo -u minecraft sed -i 's/eula=false/eula=true/' /opt/minecraft/eula.txtVoer hetzelfde java-commando opnieuw uit. Deze keer wordt de wereld gegenereerd, wat bij de eerste keer opstarten een minuut of twee duurt, en stopt het proces bij:
[Server thread/INFO]: Done (9.204s)! For help, type "help"U heeft nu een live console. Gebruik deze voor de tweede taak: typ op YourMinecraftName (uw exacte in-game gebruikersnaam) en de server voegt u toe aan ops.json. Zo kunt u later, wanneer er geen console is gekoppeld, elk beheercommando vanuit het spel uitvoeren. Typ daarna stop om de server op te slaan en correct af te sluiten.
Stap 5: server.properties, en waarom online-mode op true blijft
De eerste uitvoering heeft ook server.properties geschreven. De meeste standaardinstellingen zijn in orde; deze regels zijn het overwegen waard:
online-mode=true
white-list=true
enforce-whitelist=true
view-distance=8
max-players=10
motd=A private server for people I actually knowonline-mode=true zorgt ervoor dat de server elke inloggende gebruikersnaam verifieert bij de sessieservers van Mojang, waarmee wordt bewezen dat de speler de eigenaar van het account is. Het instellen op false, de schakelaar voor "cracked servers", betekent dat de server blind vertrouwt op de identiteit die een client opgeeft: iedereen kan inloggen onder elke naam, inclusief die van u. Aangezien ops en whitelists op naam werken, krijgt een imitator direct uw operator-rechten. De enige legitieme reden om dit op false te zetten is achter een authenticerende proxy zoals Velocity, die zelf de spelers verifieert. Op een normale server blijft dit true, zonder uitzondering.
view-distance is de belangrijkste prestatiefactor in het bestand; de belasting voor CPU en RAM schaalt ongeveer kwadratisch mee. 8 is een verstandige standaardwaarde voor een VPS; 10 is de standaardwaarde van vanilla en merkbaar zwaarder.
white-list=true plus enforce-whitelist=true sluit de server af voor onbekenden, wat volgens de beveiligingssectie hieronder niet optioneel is. Voeg spelers toe met /whitelist add TheirName in het spel als een op.
Stap 6: geheugenvlaggen, waarom -Xms en -Xmx gelijk moeten zijn
De JVM wijst zijn heap toe tussen -Xms (startgrootte) en -Xmx (maximum). Stel deze op een dedicated gameserver in op dezelfde waarde: de heap bereikt het maximum toch wel, en het stapsgewijs vergroten zorgt alleen voor extra werk voor de garbage collector tijdens het spelen. Op een 4 GB VPS is het juiste paar:
/usr/bin/java -Xms3G -Xmx3G -jar server.jar nogui-Xmx is niet het totale geheugen dat het proces gebruikt. De JVM voegt overhead buiten de heap toe, zoals thread stacks, JIT-caches en direct buffers, van ongeveer een halve gigabyte of meer, en Ubuntu zelf heeft ook ruimte nodig. De vuistregel: -Xmx is maximaal het VPS-RAM minus 1 GB. Bij overschrijding treden een van de twee volgende fouten op. Als de toewijzing direct mislukt, weigert de server te starten met:
Error: Could not reserve enough space for object heapDie melding is eerlijk en direct. De vervelendere variant start normaal op en crasht uren later, wanneer de heap onder belasting volloopt en de OOM-killer van de kernel het grootste proces op de machine kiest: de JVM. Er verschijnt niets in het serverlogboek; het bewijs staat in sudo dmesg | grep -i oom, een regel zoals Out of memory: Killed process 1234 (java). Als uw service "willekeurig" herstart, controleer dan eerst daar en verlaag -Xmx.
Voor Paper documenteert het project de Aikar's flags, een getunede G1GC-set (-XX:+UseG1GC -XX:MaxGCPauseMillis=200 en een dozijn verwante vlaggen) die garbage-collection-pauzes bij grotere heaps versoepelt. Genereer de volledige regel vanuit de Paper-documentatie; bij een heap van 2–4 GB is de winst bescheiden, maar de vlaggen zijn onschadelijk.
Stap 7: een systemd unit met Restart=on-failure
Een server die handmatig wordt gestart, stopt zodra uw SSH-sessie wordt beëindigd en blijft na een reboot uitgeschakeld. 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.targetsudo systemctl daemon-reload
sudo systemctl enable --now minecraft
systemctl status minecraft
journalctl -u minecraft -fCorrect resultaat: status toont active (running), en het journal, dat nu de console-output van de server bevat, eindigt wederom bij de Done regel.
Er zijn twee bewuste keuzes gemaakt in deze unit. Restart=on-failure brengt de server terug na een crash, maar niet na een schone stop, waardoor onderhoud mogelijk blijft. En TimeoutStopSec=120 is belangrijker dan het lijkt: systemctl stop verstuurt een SIGTERM, de Minecraft server vangt dit op en slaat elke wereld op voordat het proces wordt beëindigd. Bij een grote wereld kost dit opslaan tijd. De standaard timeout van systemd kan de JVM tijdens het opslaan een SIGKILL sturen, wat precies de manier is waarop regiobestanden corrupt raken. Geef het twee minuten de tijd.
Als de service blijft flapperen en het journal 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 houdt iets anders poort 25565 al bezet. Dit is bijna altijd uw eerdere handmatige sessie die nog op de achtergrond draait in een ander SSH-venster. Zoek dit proces met sudo ss -tlnp | grep 25565 en stop die kopie; draai nooit twee servers op dezelfde poort.
Stap 8: open 25565 op beide firewalls
Minecraft Java gebruikt uitsluitend TCP 25565 (UDP is slechts het optionele query-protocol, dat standaard is uitgeschakeld). Op de VPS:
sudo ufw allow OpenSSH
sudo ufw allow 25565/tcp
sudo ufw enableDat is de eerste firewall. De meeste VPS-providers hanteren een tweede firewall op netwerkniveau in het configuratiescherm, en dat is de firewall die men vaak vergeet. Open ook daar TCP 25565. Het symptoom van het slechts openen van één van de twee is frustrerend vaag: de client blijft hangen op "Connecting to the server..." en faalt met Connection timed out: no further information, zonder weigering, zonder serverfout, en zonder enige melding in de journal, omdat de pakketten simpelweg nooit aankomen. Controleer dit vanaf een machine buiten de VPS met nc -vz your.server.ip 25565; succeeded betekent dat beide firewalls openstaan, een time-out betekent dat er ten minste één gesloten is.
Nu u toch in ufw bent: dezelfde server draait SSH op een publiek IP-adres en de logbestanden zullen binnen enkele uren volstaan met brute-force-pogingen. Stel Fail2ban in voor SSH op Ubuntu 24.04 voordat u dit vergeet.
Maak nu verbinding: Multiplayer, Direct Connection, het server-IP. Omdat u uzelf in stap 4 tot operator heeft benoemd, werken in-game commando's direct, /whitelist add FriendName voor elke speler, /gamemode creative als dat het plan is.
Stap 9: whitelist, omdat het internet poort 25565 vindt
Een Minecraft-server openstellen voor het internet is geen theoretisch risico: massascanners scannen continu de volledige IPv4-ruimte op poort 25565. Hobbyprojecten voor griefing hebben op deze manier honderdduizenden open servers in kaart gebracht, en een server zonder whitelist krijgt binnen enkele dagen, soms zelfs uren, onuitgenodigde bezoekers. De whitelist uit stap 5 is de oplossing: online-mode=true bewijst de identiteit, de whitelist beperkt de toegang tot identiteiten die u heeft gekozen. Dat duo vormt het volledige beveiligingsmodel, en het is voldoende voor een server voor vrienden.
Voor consoletoegang zonder het spel, gescripte back-ups of een cron job, schakelt u RCON in via server.properties (enable-rcon=true, een sterk rcon.password, poort 25575) en bouwt u de kleine mcrcon-client vanaf de GitHub-broncode op de VPS zelf; deze bevindt zich niet in de Ubuntu-repositories. Open poort 25575 niet in een firewall: RCON verstuurt het wachtwoord in leesbare tekst (cleartext), dus het moet beperkt blijven tot loopback-verkeer.
Stap 10: backups die de wereld niet beschadigen
De belangrijkste regel: kopieer nooit een wereldmap terwijl de server erin schrijft. Regiobestanden worden tijdens het spelen continu herschreven; een tar die sneller is dan een schrijfactie, levert een archief op met half geschreven chunks. Wanneer u dit uiteindelijk terugzet – het enige moment waarop een backup moet werken – stroomt het logboek vol met fouten bij het laden van chunks en vertoont het terrein gaten. Twee methoden voorkomen dit.
Stoppen-kopiëren-starten is de eenvoudige methode, ten koste van een minuut downtime:
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 in world, world_nether en world_the_end; een vanilla server bewaart alles in world, dus laat de andere twee daar weg.)
Save-off maakt live backups: verstuur via RCON save-off (stop de automatische opslag), daarna save-all flush (forceer alles naar de schijf en wacht), maak de tar-bestanden aan en voer daarna save-on uit. Dit is de versie die u om 05:00 uur in cron plaatst.
Hoe dan ook, een backup die op dezelfde VPS staat als de server is geen backup. scp of rclone de archieven van de server af en bewaar er meer dan één. En aangezien u niet naar de console kijkt wanneer er iets misgaat, kunt u een externe controle op de poort instellen: Uptime Kuma op een andere machine die een TCP-controle uitvoert op 25565, laat u weten dat de server offline is voordat uw spelers dat merken.
Plugins en upgrades
Op Paper is een plugin een jar-bestand dat u in /opt/minecraft/plugins/ plaatst, gevolgd door een herstart; dat is de volledige installatie. Download plugins uitsluitend van hun officiële projectpagina's (Hangar, Modrinth, SpigotMC), om dezelfde reden als de server-jar: elk bestand is willekeurige code die wordt uitgevoerd als de minecraft-gebruiker.
Het upgraden van de server verloopt als volgt: stop de server, maak een back-up, vervang server.jar door de build voor de nieuwe Minecraft-versie en start de server opnieuw. Twee waarschuwingen. Wereld-upgrades zijn eenrichtingsverkeer; een wereld die is geopend met een nieuwere versie, zal niet openen in een oudere versie, wat nog een reden is om back-ups te maken. Bovendien lopen plugins vaak dagen of weken achter op een nieuwe Minecraft-release; controleer daarom de compatibiliteit voordat u op de dag van release direct overstapt.
Als u dit liever beheert als een container, met versie-pinning, EULA-acceptatie en geheugen-flags als omgevingsvariabelen, dan draait de veelgebruikte itzg/minecraft-server-image dezelfde Paper-server onder Docker Compose op uw VPS met dezelfde firewall- en back-updiscipline.
FAQ
Hoeveel RAM heeft een Minecraft-server nodig?
2 GB is voldoende voor een vanilla-server voor 2–5 spelers; 4 GB is comfortabel voor een server met ongeveer tien vrienden op Paper met enkele plugins; voor modpacks en meer dan 20 spelers is 8 GB of meer gewenst. Ongeacht de grootte van de VPS, stel -Xmx in op maximaal het totale RAM-geheugen minus 1 GB. De JVM gebruikt geheugen buiten de heap, en overschrijding 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 wijst bijna altijd op een firewall, en er zijn er twee: ufw op de VPS en de netwerkfirewall van uw provider in het configuratiescherm. TCP 25565 moet in beide openstaan. Controleer of de server daadwerkelijk luistert met sudo ss -tlnp | grep 25565 op de machine en test 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. Iedereen kan dan deelnemen onder elke gebruikersnaam, inclusief de naam van een operator, waardoor ze diens rechten overnemen. Bovendien werken skins en stabiele UUID's niet meer. Het enige legitieme gebruik is achter een authenticerende proxy zoals Velocity die zelf spelers verifieert. Voor een normale server blijft dit true.
Is Paper beter dan de vanilla Minecraft-server?
Voor bijna iedereen wel: Paper is een drop-in 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 bit-exact vanilla-gedrag vereisen, wat sommige Paper-optimalisaties kunnen wijzigen. Op een kleine VPS is de efficiëntie van Paper in feite gratis extra RAM.
Hoe maak ik een back-up van een Minecraft-wereld zonder deze te beschadigen?
Archiveer nooit de wereldmap terwijl de server ernaar schrijft; een kopie die gelijktijdig met een region-file-schrijfactie plaatsvindt, produceert beschadigde chunks die u pas bij het herstellen ontdekt. Stop de server, tar de wereldmappen en start deze opnieuw, of houd de server live met save-off, save-all flush, tar, save-on via RCON. Verplaats het archief vervolgens van de VPS af.