SSD Nodes Learn
Anleitungen Matt ConnorVon Matt Connor · Aktualisiert 2026-07-24

Minecraft Server auf VPS installieren

Paper Server auf Ubuntu 24.04 mit Java 21 einrichten. Anleitung zu RAM-Größen, systemd-Units, Firewall-Port 25565 und sicheren Backups für Ihre Welt.

Was Sie aufbauen

Einen stabil laufenden Minecraft Java Edition Server: Paper auf Ubuntu 24.04, ausgeführt als dedizierter minecraft User unter systemd mit Restart=on-failure, mit aktivierter Whitelist, wobei der Port 25565 in beiden Firewalls zwischen den Spielern und der JVM geöffnet ist. Zudem werden Backups so erstellt, dass die geschützten Welten nicht beschädigt werden. Der Server selbst besteht aus einer JAR-Datei und einem java Befehl; alles, was einen Server, auf dem Freunde ein Jahr lang spielen, von einem Server unterscheidet, der bereits am ersten Wochenende abstürzt, hängt von diesem Befehl ab. Dieser Leitfaden behandelt genau diesen Aspekt.

Zwei wichtige Hinweise vor dem Kauf. Erstens ist Minecraft speicherintensiv und arbeitet primär Single-Threaded: Ein 1 GB VPS reicht nicht für einen spielbaren Server aus, und ein schneller Kern ist besser als vier langsame Kerne. Zweitens handelt es sich um die Java Edition. Bedrock-Spieler (Konsolen, Smartphones, die Windows Bedrock App) können nicht einem Java-Server beitreten. Bedrock benötigt eine andere Server-Software auf UDP 19132 oder das Geyser-Plugin, welches hier nicht behandelt wird.

Sie benötigen einen frischen Ubuntu 24.04 KVM VPS mit root- oder sudo-Rechten und etwa dreißig Minuten Zeit.

Dimensionierung: Was ein Server für Freunde tatsächlich benötigt

Der RAM-Wert ist entscheidend. Die tatsächlichen Anforderungen sind niedriger als in den Modpack-Foren angegeben:

  • 2 GB reicht für Vanilla-Server mit 2–5 Spielern bei geringer Sichtweite. Spielbar, aber ohne Reserven.
  • 4 GB ist die ideale Größe für einen Server unter Freunden: etwa zehn gleichzeitige Spieler auf Paper mit einigen Plugins, wobei genügend Ressourcen für das Betriebssystem verbleiben.
  • 8 GB und mehr ist für Modpacks und 20 oder mehr Spieler erforderlich. Hier ist auch die Single-Core-CPU-Geschwindigkeit wichtig, da die Haupt-Gameschleife auf einem Thread läuft.

Die Welt wächst auf der Festplatte an, während Spieler die Welt erkunden – eine intensiv genutzte Survival-Welt erreicht mehrere Gigabyte an Größe. Planen Sie daher genügend Speicherplatz für die Welt und deren Backups ein.

Vanilla oder Paper? Paper ist ein direkter Ersatz für die offizielle jar: dieselben Welten, dieselben Clients, keine Client-Mods erforderlich. Paper optimiert die langsamsten Server-Pfade – Chunk-Laden, Entity-Ticking, Hopper – und bietet eine Plugin-API. Ein Vanilla-Server ist nur dann sinnvoll, wenn Sie exakt identische Vanilla-Mechaniken für technische Redstone-Farmen benötigen, die durch die Optimierungen von Paper verändert werden könnten. Für alle anderen bietet Paper mehr Spieler pro Gigabyte. Alle unten aufgeführten Optionen funktionieren mit beiden Versionen.

Schritt 1: Java 21 installieren

Minecraft 1.20.5 und alle darauf folgenden Versionen (alle 1.21.x) erfordern Java 21. Ubuntu 24.04 liefert dies in den Standard-Repositories aus. Die Headless-Version verzichtet auf Desktop-Bibliotheken, die ein Server nicht benötigt:

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

Korrektes Ergebnis: Die erste Zeile zeigt openjdk version "21.0.x" an. Wenn dort 17 oder 11 steht, ist eine andere JRE installiert und priorisiert; beheben Sie dies mit sudo update-alternatives --config java und wählen Sie den Eintrag mit java-21 aus.

Das Überspringen dieser Prüfung führt später zum am häufigsten gesuchten Minecraft-Server-Fehler. Mit Java 17 bricht die Server-Jar sofort mit folgendem Fehler ab:

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

Die Zahlen deuten auf den Versionskonflikt hin: Class-File-Version 65.0 entspricht Java 21, 61.0 entspricht Java 17 und 60.0 entspricht Java 16. Unabhängig von der angezeigten Kombination ist die Lösung identisch — installieren Sie die neuere JRE und führen Sie update-alternatives erneut aus.

Schritt 2: Ein dedizierter Benutzer, niemals root

Der Server führt Plugin-Code aus und verarbeitet Netzwerkeingaben von jedem Benutzer, der den Port erreichen kann. Ein Fehler führt dazu, dass ein Angreifer mit root-Rechten die gesamte VPS übernimmt; ein Angreifer mit minecraft übernimmt lediglich eine Spielwelt.

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

--system erstellt ein Konto ohne Passwort, das keinen SSH-Login erlaubt. Das Home- und Arbeitsverzeichnis ist /opt/minecraft. Jeder Befehl, der ab diesem Zeitpunkt auf den Server zugreift, wird unter diesem Benutzer ausgeführt.

Schritt 3: Laden Sie die Server-Jar von der offiziellen Quelle herunter

Es gibt nur zwei vertrauenswürdige Quellen für eine Server-Jar: die offizielle Server-Download-Seite auf minecraft.net für Vanilla oder die Download-Seite auf papermc.io für Paper. Drittanbieter-"Download-Hubs", die Server-Jars umverpacken, sind eine bekannte Quelle für Malware. Eine Server-Jar ist beliebiger Code, der dauerhaft auf einem internetfähigen System ausgeführt wird.

Kopieren Sie den Download-Link für den aktuellen Build von der offiziellen Seite (die URL ändert sich mit jeder Version und jedem Build, daher ist eine feste Angabe hier nicht möglich), und führen Sie dann Folgendes aus:

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

Korrektes Ergebnis: eine server.jar von etwa 50 MB von minecraft, bestätigt durch ls -lh /opt/minecraft/server.jar.

Schritt 4: Erster Start, die EULA und die Rechtevergabe

Starten Sie den Server einmal interaktiv, bevor Sie systemd verwenden. Der erste Start erfüllt zwei Aufgaben, die nur über eine Live-Konsole möglich sind.

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

Der Prozess bricht nach wenigen Sekunden ab — Paper benötigt etwas mehr Zeit, um Patches anzuwenden — und das Log endet mit der Zeile, auf die jeder stößt:

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

Dies ist kein Fehler, sondern eine Lizenzprüfung. Der Durchlauf hat eula.txt neben der jar-Datei erstellt. Lesen Sie die verlinkte EULA, falls noch nicht geschehen, und setzen Sie dann das Flag:

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

Führen Sie denselben java Befehl erneut aus. Dieses Mal wird die Welt generiert — beim ersten Start dauert dies ein bis zwei Minuten — und der Prozess stoppt bei:

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

Sie haben nun eine Live-Konsole. Nutzen Sie diese für die zweite Aufgabe: Geben Sie op YourMinecraftName (Ihr exakter In-Game-Benutzername) ein. Der Server schreibt Sie in die ops.json, sodass Sie später — wenn keine Konsole verbunden ist — alle Admin-Befehle direkt im Spiel ausführen können. Geben Sie anschließend stop ein, um zu speichern und sauber zu beenden.

Schritt 5: server.properties und die Bedeutung von online-mode=true

Beim ersten Start wurde auch server.properties erstellt. Die meisten Standardwerte sind korrekt. Diese Zeilen erfordern jedoch eine bewusste Entscheidung:

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 bewirkt, dass der Server jeden Benutzernamen beim Beitritt gegen die Session-Server von Mojang prüft. Dadurch wird der Besitz des Accounts nachgewiesen. Die Einstellung auf false (die Option für „Cracked-Server“) bedeutet, dass der Server der Identität des Clients blind vertraut. Jeder kann sich mit jedem Namen anmelden, einschließlich Ihrem eigenen. Da Operator-Rechte und Whitelists an Namen gebunden sind, kann sich ein Angreifer mit Ihren Berechtigungen anmelden. Der einzige legitime Grund für den Wert false ist der Einsatz eines Authentifizierungs-Proxys wie Velocity, der die Spieler selbst validiert. Auf einem normalen Server muss dieser Wert auf true bleiben.

view-distance ist der wichtigste Parameter für die Performance in dieser Datei. CPU- und RAM-Auslastung steigen etwa quadratisch mit diesem Wert. 8 ist ein vernünftiger Standardwert für VPS; 10 ist der Vanilla-Standard und deutlich ressourcenintensiver.

white-list=true plus enforce-whitelist=true schließt den Server für fremde Benutzer. Der untenstehende Sicherheitsabschnitt beschreibt dies als zwingend erforderlich. Fügen Sie Spieler mit /whitelist add TheirName im Spiel als Operator hinzu.

Schritt 6: Memory-Flags — warum -Xms und -Xmx identisch sein sollten

Die JVM reserviert ihren Heap zwischen -Xms (Startgröße) und -Xmx (Obergrenze). Setzen Sie diese Werte auf einem dedizierten Game-Server auf denselben Wert: Der Heap wird ohnehin die Obergrenze erreichen. Ein schrittweises Vergrößern verursacht während des Spielbetriebs lediglich unnötige Last durch den Garbage Collector. Für einen 4 GB VPS ist dies die richtige Kombination:

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

-Xmx entspricht nicht dem gesamten Speicherverbrauch des Prozesses. Die JVM benötigt zusätzlichen Off-Heap-Speicher — Thread-Stacks, JIT-Caches, Direct Buffers — von etwa einem halben Gigabyte oder mehr; zudem benötigt Ubuntu selbst Arbeitsspeicher. Die Faustregel lautet: -Xmx maximal VPS-RAM minus 1 GB. Überschreiten Sie diesen Wert, treten einer der folgenden Fehler auf. Wenn die Zuweisung sofort fehlschlägt, startet der Server mit dieser Meldung nicht:

Error: Could not reserve enough space for object heap

Dieser Fehler tritt sofort auf. Die schwerwiegendere Variante startet korrekt, stürzt aber Stunden später ab, wenn der Heap unter Last voll läuft und der OOM-Killer des Kernels den größten Prozess auf dem System auswählt — die JVM. In den Server-Logs erscheint nichts; die Ursache liegt in sudo dmesg | grep -i oom, etwa in einer Zeile wie Out of memory: Killed process 1234 (java). Wenn Ihr Dienst "zufällig" neu startet, prüfen Sie zuerst dort und reduzieren Sie -Xmx.

Für Paper werden Aikar's flags empfohlen — ein optimierter G1GC-Satz (-XX:+UseG1GC -XX:MaxGCPauseMillis=200 und weitere), der die Garbage-Collection-Pausen bei größeren Heaps glättet. Generieren Sie die vollständige Befehlszeile aus der Paper-Dokumentation; bei einem 2–4 GB Heap ist der Gewinn gering, aber die Flags sind unbedenklich.

Schritt 7: eine systemd unit mit Restart=on-failure

Ein manuell gestarteter Server beendet sich mit Ihrer SSH-Sitzung und bleibt nach einem Neustart offline. Erstellen Sie /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

Korrektes Ergebnis: status zeigt active (running), und das Journal — welches nun die Konsolenausgabe des Servers enthält — endet wieder an der Done Zeile.

Diese Unit enthält zwei bewusste Entscheidungen. Restart=on-failure startet den Server nach einem Absturz neu, aber nicht nach einem sauberen stop, wodurch Wartungsarbeiten weiterhin möglich bleiben. Und TimeoutStopSec=120 ist wichtiger als es scheint: systemctl stop sendet SIGTERM, der Minecraft-Server empfängt dieses Signal und speichert alle Welten vor dem Beenden; bei einer großen Welt benötigt dieser Speichervorgang Zeit. Das Standard-Timeout von systemd kann die JVM während des Speicherns mit SIGKILL beenden, was die Region-Dateien beschädigt. Setzen Sie das Timeout auf zwei Minuten.

Falls der Dienst ständig abstürzt (flapping) und das Journal Folgendes anzeigt:

[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?

dann belegt bereits ein Prozess den Port 25565 — fast immer ist dies Ihr früherer Foreground-Prozess, der in einer anderen SSH-Sitzung noch läuft. Finden Sie diesen Prozess mit sudo ss -tlnp | grep 25565 und beenden Sie diese Kopie; führen Sie niemals zwei Server auf demselben Port aus.

Schritt 8: Port 25565 in beiden Firewalls öffnen

Minecraft Java verwendet ausschließlich TCP 25565 (UDP wird nur für das optionale Query-Protokoll verwendet und ist standardmäßig deaktiviert). Auf dem VPS:

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

Dies ist die erste Firewall. Die meisten VPS-Anbieter nutzen eine zweite Firewall auf Netzwerkebene im Control Panel; diese wird oft vergessen. Öffnen Sie dort ebenfalls TCP 25565. Das Symptom, wenn nur eine der beiden Firewalls offen ist, ist sehr unpräzise: Der Client bleibt bei „Connecting to the server...“ hängen und bricht mit Connection timed out: no further information ab — keine Ablehnung, kein Serverfehler, keine Einträge im Journal, da die Pakete nie angekommen sind. Prüfen Sie dies von einem Gerät außerhalb des VPS mit nc -vz your.server.ip 25565; succeeded bedeutet, dass beide Firewalls offen sind. Ein Timeout bedeutet, dass mindestens eine Firewall geschlossen ist.

Während Sie ufw konfigurieren: Der Server läuft ebenfalls mit SSH auf einer öffentlichen IP, und Brute-Force-Log-Einträge beginnen bereits nach wenigen Stunden — Fail2ban für SSH auf Ubuntu 24.04 einrichten, bevor Sie es vergessen.

Jetzt verbinden: Multiplayer, Direct Connection, die Server-IP. Da Sie sich in Schritt 4 selbst als Operator hinzugefügt haben, funktionieren In-Game-Befehle sofort — /whitelist add FriendName für jeden Spieler, /gamemode creative, falls dies geplant ist.

Schritt 9: Whitelist nutzen, da das Internet Port 25565 scannt

Einen Minecraft-Server offen im Internet zu lassen, stellt ein reales Risiko dar: Massen-Scanner durchsuchen kontinuierlich den gesamten IPv4-Raum nach Port 25565. Durch diese Methode haben verschiedene Griefing-Projekte bereits Hunderttausende offene Server erfasst. Ein Server ohne Whitelist erhält innerhalb von Tagen oder sogar Stunden unerwünschte Besucher. Die Whitelist aus Schritt 5 löst dieses Problem: online-mode=true bestätigt die Identität, während die Whitelist den Zugriff auf die von Ihnen gewählten Identitäten beschränkt. Dieses Modell bildet das vollständige Sicherheitskonzept und reicht für einen Server unter Freunden aus.

Für den Konsolenzugriff ohne das Spiel – etwa für automatisierte Backups oder Cron-Jobs – aktivieren Sie RCON in server.properties (enable-rcon=true, ein starker rcon.password, Port 25575). Kompilieren Sie den kleinen mcrcon-Client direkt auf dem VPS aus dem GitHub-Quellcode; er ist nicht in den Ubuntu-Repositories enthalten. Öffnen Sie den Port 25575 nicht in einer Firewall: Da RCON das Passwort im Klartext überträgt, muss der Zugriff auf Loopback beschränkt bleiben.

Schritt 10: Backups ohne Datenkorruption

Die wichtigste Regel: Kopieren Sie niemals ein World-Verzeichnis, während der Server Daten schreibt. Region-Dateien werden während des Spielbetriebs kontinuierlich neu geschrieben. Ein tar, das gleichzeitig mit einem Schreibvorgang erfolgt, erzeugt ein Archiv mit unvollständigen Chunks. Wenn Sie dieses wiederherstellen – dem Moment, in dem ein Backup funktionieren muss – füllt sich das Log mit Fehlern beim Laden von Chunks und das Terrain weist Lücken auf. Zwei Methoden verhindern dies.

Stop-copy-start ist die einfache Methode, verursacht jedoch eine Ausfallzeit von einer Minute:

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 unterteilt die Dimensionen in world, world_nether und world_the_end; ein Vanilla-Server speichert alles in world. Kopieren Sie die anderen beiden Dimensionen daher ebenfalls dorthin.)

Save-off sichert den Live-Betrieb: Senden Sie über RCON save-off (Autosave stoppen), dann save-all flush (Schreibvorgang auf Disk erzwingen und warten), erstellen Sie das tar-Archiv und nutzen Sie dann save-on. Dies ist die Methode für Cronjobs um 05:00 Uhr morgens.

In jedem Fall ist ein Backup, das auf demselben VPS wie der Server liegt, kein echtes Backup – übertragen Sie die Archive mit scp oder rclone auf ein anderes System und bewahren Sie mehrere Kopien auf. Da Sie bei einem Systemfehler nicht auf die Konsole schauen, sollten Sie eine externe Port-Überprüfung einrichten: Uptime Kuma auf einem anderen System führt einen TCP-Check gegen Port 25565 durch. So bemerken Sie einen Serverausfall, bevor es Ihre Spieler tun.

Plugins und Upgrades

Bei Paper besteht die Installation eines Plugins lediglich daraus, eine jar-Datei in /opt/minecraft/plugins/ zu kopieren und den Server neu zu starten. Laden Sie Plugins nur von den offiziellen Projektseiten herunter (Hangar, Modrinth, SpigotMC). Dies gilt aus demselben Grund wie für die Server-jar: Jedes Plugin ist beliebiger Code, der unter dem Benutzer minecraft ausgeführt wird.

Ein Server-Upgrade erfolgt in diesen Schritten: Stoppen, Backup erstellen, server.jar durch die Build für die neue Minecraft-Version ersetzen, starten. Beachten Sie zwei Punkte: Welten-Upgrades sind unidirektional – eine Welt, die mit einer neueren Version geöffnet wurde, lässt sich nicht mehr mit einer älteren Version öffnen. Nutzen Sie daher regelmäßig Backups. Zudem hinken Plugins neuen Minecraft-Releases oft Tage oder Wochen hinterher. Prüfen Sie die Kompatibilität, bevor Sie direkt nach einem Release ein Update durchführen.

Falls Sie dies lieber containerbasiert verwalten möchten – Version Pinning, EULA-Zustimmung und Memory-Flags als Umgebungsvariablen – ermöglicht das weit verbreitete itzg/minecraft-server-Image den Betrieb desselben Paper-Servers unter Docker Compose auf Ihrem VPS mit identischer Firewall- und Backup-Struktur.

FAQ

Wie viel RAM benötigt ein Minecraft-Server?

2 GB reichen für Vanilla-Server mit 2–5 Spielern; 4 GB sind komfortabel für einen Server mit etwa zehn Freunden auf Paper inklusive einiger Plugins; Modpacks und 20 oder mehr Spieler benötigen 8 GB oder mehr. Unabhängig von der VPS-Größe sollte -Xmx auf maximal den Gesamtspeicher minus 1 GB eingestellt werden — die JVM nutzt Speicher außerhalb des Heaps, und eine Überschreitung führt zu Error: Could not reserve enough space for object heap oder einem silent OOM kill.

Warum können sich meine Freunde nicht mit meinem Minecraft-Server verbinden?

Ein Client-Absturz, der in Connection timed out: no further information endet, deutet fast immer auf eine Firewall hin. Es gibt zwei: ufw auf der VPS und die Netzwerk-Firewall des Providers im Control Panel. TCP 25565 muss in beiden offen sein. Bestätigen Sie, dass der Server auf der Box mit sudo ss -tlnp | grep 25565 tatsächlich lauscht, und testen Sie die Verbindung von außen mit nc -vz your.server.ip 25565.

Sollte ich online-mode=false in der server.properties setzen?

Nein. Mit online-mode=false überspringt der Server die Mojang-Authentifizierung vollständig. Dadurch kann sich jeder mit jedem Benutzernamen verbinden — einschließlich des Namens eines Operators, wodurch dessen Berechtigungen übernommen werden — zudem funktionieren Skins und stabile UUIDs nicht mehr. Der einzige legitime Anwendungsfall ist der Betrieb hinter einem authentifizierenden Proxy wie Velocity, der die Spieler selbst verifiziert. Für einen normalen Server bleibt dieser Wert auf true.

Ist Paper besser als der Vanilla Minecraft-Server?

Für fast alle Nutzer: Ja. Paper ist eine Drop-in-Jar, die Vanilla-Welten lädt, unveränderte Clients akzeptiert, Entities tickt und Chunks wesentlich effizienter lädt sowie das Plugin-Ökosystem hinzufügt. Die Ausnahme sind Technical-Redstone-Communities, die ein exaktes Vanilla-Verhalten benötigen, da einige Paper-Optimierungen dieses verändern. Auf einer kleinen VPS bedeutet die Effizienz von Paper effektiv kostenlosen zusätzlichen RAM.

Wie sichere ich eine Minecraft-Welt, ohne sie zu beschädigen?

Archivieren Sie das Verzeichnis der Welt niemals, während der Server Daten schreibt — ein Kopierprozess, der gleichzeitig in eine Region-Datei schreibt, erzeugt beschädigte Chunks, die erst beim Wiederherstellen auffallen. Stoppen Sie entweder den Server, archivieren Sie die Verzeichnisse mit tar und starten Sie ihn neu, oder lassen Sie ihn mit save-off, save-all flush, tar und save-on über RCON live. Verschieben Sie das Archiv anschließend von der VPS weg.

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