Zum Inhalt springen
myvpsguide

Minecraft-Server auf einem VPS: von der Bestellung bis zum ersten Login

Welche Ressourcen ein Server wirklich braucht, Paper statt Vanilla, Java-Heap richtig setzen, systemd-Unit und Backups im laufenden Betrieb.

veröffentlicht 22.04.2026
4 min lesezeit
einsteiger

Ein Minecraft-Server ist ein gutes erstes Projekt auf einem VPS: Der Aufbau ist überschaubar, das Ergebnis sofort sichtbar, und man lernt dabei drei Dinge, die überall wiederkommen, Dienste als systemd-Unit, Speicherverwaltung und Backups im laufenden Betrieb.

Was die Maschine können muss#

Minecraft ist überwiegend einkernig. Die Hauptschleife des Servers (der „Tick“) läuft auf einem Kern; mehr Kerne helfen beim Weltgenerieren und bei Nebenaufgaben, aber nicht dabei, 20 Ticks pro Sekunde zu halten.

Daraus folgt die wichtigste Kaufregel: Einzelkernleistung vor Kernanzahl. Ein Tarif mit 4 vCPU auf einem modernen Prozessor schlägt 8 vCPU auf altem Blech deutlich. Wie man das vor dem Kauf prüft, steht in VPS auswählen.

SpielerRAM gesamtKerneHinweis
1-5, Vanilla4 GB2reicht bequem
5-15, Paper, wenige Plugins8 GB2-4der übliche Fall
15-30, viele Plugins12-16 GB4View-Distance im Blick behalten
Modpacks12 GB aufwärts4Modpacks fressen RAM, nicht Kerne

Der Heap: die Zahl, die alles bestimmt#

Ein 8-GB-Server aufgeteilt: 0,4 GB Betriebssystem, 0,8 GB Java-Overhead, 4,5 GB Heap für Welt und Entities, 1,3 GB Heap-Reserve für die Garbage Collection, 1 GB freier Puffer.
Der Java-Heap ist nicht der gesamte Speicherverbrauch. Wer -Xmx auf die volle RAM-Größe stellt, nimmt dem System den Puffer.

Auf einer 8-GB-Maschine ist -Xmx6G ein guter Wert, nicht -Xmx8G. Java braucht neben dem Heap noch Metaspace, Thread-Stacks und Puffer; das Betriebssystem will auch etwas. Ist am Ende nichts mehr frei, greift der OOM-Killer des Kernels und der beendet den Prozess mit dem größten Speicherverbrauch, also den Server.

Aufsetzen#

Grundhärtung der Maschine vorausgesetzt, siehe Die erste Stunde auf einem neuen Server.

# Java 21 (für aktuelle Minecraft-Versionen)
sudo apt update
sudo apt install -y openjdk-21-jre-headless screen curl jq

# Eigener Benutzer ohne Login-Shell — der Server läuft nie als root
sudo adduser --system --group --home /opt/minecraft minecraft
sudo mkdir -p /opt/minecraft/server
sudo chown -R minecraft:minecraft /opt/minecraft

Paper statt Vanilla. Paper ist ein optimierter Server, kompatibel zu Vanilla-Clients, mit deutlich besserem Verhalten bei vielen Entities und Unterstützung für Bukkit-Plugins. Für praktisch jeden Mehrspieler-Server die bessere Grundlage.

sudo -u minecraft bash
cd /opt/minecraft/server

# Neuesten Paper-Build für eine Version über die API holen
MCVER=1.21.4
BUILD=$(curl -s "https://api.papermc.io/v2/projects/paper/versions/$MCVER" | jq -r '.builds[-1]')
curl -o paper.jar "https://api.papermc.io/v2/projects/paper/versions/$MCVER/builds/$BUILD/downloads/paper-$MCVER-$BUILD.jar"

# Erster Lauf erzeugt die EULA-Datei und bricht ab
java -jar paper.jar --nogui
sed -i 's/eula=false/eula=true/' eula.txt
exit

systemd-Unit statt screen#

screen ist zum Ausprobieren in Ordnung. Für einen Server, der nach einem Neustart von selbst wiederkommt und bei einem Absturz neu startet, ist ein systemd-Unit die richtige Form.

# /etc/systemd/system/minecraft.service
[Unit]
Description=Minecraft (Paper)
After=network-online.target
Wants=network-online.target

[Service]
Type=simple
User=minecraft
Group=minecraft
WorkingDirectory=/opt/minecraft/server

# Aogiri-Flags: sinnvolle Voreinstellungen für den G1-Sammler.
# -Xms = -Xmx ist Absicht: Java soll den Speicher nicht ständig nachfordern.
ExecStart=/usr/bin/java -Xms6G -Xmx6G \
  -XX:+UseG1GC -XX:+ParallelRefProcEnabled -XX:MaxGCPauseMillis=200 \
  -XX:+UnlockExperimentalVMOptions -XX:+DisableExplicitGC \
  -XX:G1NewSizePercent=30 -XX:G1MaxNewSizePercent=40 \
  -XX:G1HeapRegionSize=8M -XX:G1ReservePercent=20 \
  -jar paper.jar --nogui

# Sauber herunterfahren: "stop" an die Konsole, nicht SIGKILL
ExecStop=/bin/sh -c 'echo stop > /run/minecraft.stdin'
Restart=on-failure
RestartSec=15
TimeoutStopSec=120

# Etwas Absicherung, kostet nichts
NoNewPrivileges=true
PrivateTmp=true
ProtectSystem=full
ProtectHome=true

[Install]
WantedBy=multi-user.target

Damit Befehle an die laufende Konsole gehen können, braucht es eine Eingabeleitung. Der bequemste Weg ist systemd-run mit einer FIFO oder, praktischer, das Werkzeug mcrcon über die eingebaute RCON-Schnittstelle:

# server.properties
enable-rcon=true
rcon.port=25575
rcon.password=EIN-LANGES-ZUFALLSPASSWORT
sudo systemctl daemon-reload
sudo systemctl enable --now minecraft
sudo journalctl -u minecraft -f
RCON gehört nicht ins Internet

Der RCON-Port ist unverschlüsselt und mit einem Passwort geschützt, das im Klartext übertragen wird. Er gehört auf 127.0.0.1 gebunden und, wenn Fernzugriff nötig ist, durch einen SSH-Tunnel: ssh -L 25575:127.0.0.1:25575 user@server. Eine Freigabe in der Firewall ist der Fehler, über den viele Server übernommen wurden.

Die Einstellungen, die Ruckler beseitigen#

Die häufigste Ursache für schlechte Tickraten ist nicht zu wenig CPU, sondern eine zu große View-Distance. Jeder geladene Chunk kostet Rechenzeit für alle Spieler.

# server.properties
view-distance=8            # Standard 10; 8 ist meist unauffällig und spürbar günstiger
simulation-distance=6      # entscheidend: nur hier laufen Mobs und Redstone
max-tick-time=60000
network-compression-threshold=256
sync-chunk-writes=false

In der Paper-Konfiguration (config/paper-world-defaults.yml) lohnen zwei weitere Werte:

chunks:
  # Chunks, in denen nichts passiert, weniger oft anfassen
  auto-save-interval: 6000
entities:
  spawning:
    # Weniger Mobs pro Chunk — der größte Einzelhebel bei vielen Spielern
    per-player-mob-spawns: true

Nachmessen statt raten:

/tps          # Ticks pro Sekunde: 20.0 ist das Ziel
/timings on   # bzw. /spark profiler start — zeigt, was Zeit frisst

Ein Wert unter 18 bedeutet, dass Spieler Verzögerungen spüren. Meist steckt ein einzelnes Plugin oder eine Mob-Farm dahinter, nicht die Maschine.

Backups, ohne den Server anzuhalten#

Eine Welt im laufenden Betrieb zu kopieren erzeugt einen Zustand, den es nie gab. Der Trick besteht darin, das automatische Speichern kurz anzuhalten:

#!/bin/bash
# /usr/local/bin/mc-backup.sh
set -euo pipefail
RCON="mcrcon -H 127.0.0.1 -P 25575 -p $(cat /etc/minecraft-rcon.pass)"
ZIEL=/var/backups/minecraft
mkdir -p "$ZIEL"

$RCON "say Sicherung startet" "save-all flush" "save-off"
sleep 3
tar czf "$ZIEL/welt-$(date +%F-%H%M).tar.gz" -C /opt/minecraft/server world world_nether world_the_end
$RCON "save-on" "say Sicherung fertig"

# Ältere Stände aufräumen, Rest übernimmt restic
find "$ZIEL" -name 'welt-*.tar.gz' -mtime +7 -delete
restic backup "$ZIEL" --tag minecraft

save-off hält das Schreiben an, save-all flush schreibt vorher alles raus. Zwischen beiden Befehlen ist die Welt auf der Platte konsistent. Das save-on am Ende darf unter keinen Umständen fehlen, sonst speichert der Server bis zum nächsten Neustart nicht mehr, und ein Absturz kostet den ganzen Tag.

Der Rest der Backup-Kette, verschlüsselt, an einen zweiten Ort, einmal zurückgespielt, steht in Backup-Strategie 3-2-1.

Erreichbarkeit und Schutz#

sudo ufw allow 25565/tcp comment 'Minecraft'

Zwei weitere Punkte, die man beim ersten Server übersieht:

Whitelist statt Online-für-alle, wenn der Server privat ist:

white-list=true
enforce-whitelist=true
/whitelist add SpielerName

DDoS ist real und trifft Gameserver häufiger als Webseiten. Ein VPS-Tarif ohne Filterung ist bei Angriffen schnell offline. Wenn der Server öffentlich beworben wird, lohnt es sich, vorher zu klären, was der Anbieter an Schutz mitbringt und im Zweifel einen Anbieter zu nehmen, bei dem das ein benanntes Merkmal ist und keine Fußnote.

Wenn etwas nicht geht#

SymptomErste Prüfung
Server startet nichtjournalctl -u minecraft -n 50, meist EULA oder Java-Version
Spieler kommen nicht reinss -tulpn | grep 25565, dann Firewall, dann Portfreigabe des Anbieters
Ruckler bei mehreren Spielern/tps, dann view-distance und simulation-distance senken
Server stirbt nach StundenRAM: -Xmx zu hoch gesetzt, journalctl -k | grep -i oom
Welt springt zurücksave-off ohne save-on, Backup-Skript prüfen

Die vorletzte Zeile ist die, die am längsten unentdeckt bleibt: Ein Server, der nachts still vom OOM-Killer beendet und von systemd neu gestartet wird, sieht morgens völlig normal aus.

MRMedia

Geschrieben aus dem laufenden Betrieb: MRMedia betreibt eigene Proxmox- Hosts, einen Backup-Server und Kundendienste in der EU. Fehler in einer Anleitung sind Fehler im eigenen Betrieb. Korrekturen bitte über Discord.