Zum Hauptinhalt springen
S-EDV news
← Alle Anleitungen
📘 Anleitung Linux 13.06.2026 · 11 min Lesezeit

Minecraft-Server auf netcup VPS aufsetzen und dauerhaft betreiben (Purpur, systemd, Backup)

Eigenen Purpur-basierten Minecraft-Server auf dem netcup VPS 1000 G12 einrichten – mit dediziertem Linux-User, Java 21 (Azul Zulu), systemd-Autostart, täglichem tar-Backup und korrekter Port-Freigabe in der netcup SCP-Firewall.

Server-Rack in einem Rechenzentrum mit blau-grüner LED-Beleuchtung

Ein eigener Minecraft-Server gibt dir vollständige Kontrolle über Mods, Plugins, Whitelist und Spielregeln – ohne monatliche Abo-Gebühren für gemietete Slots und ohne Abhängigkeit von Drittanbietern. Der netcup VPS 1000 G12 mit 4 vCores, 8 GB DDR5-RAM und 256 GB NVMe SSD bietet genug Leistung für 15–20 gleichzeitige Spieler und kostet (Stand Juni 2026) etwa 10,37 EUR pro Monat im Jahresvertrag. Als Server-Software empfiehlt sich Purpur: ein Drop-in-Ersatz für Paper, der alle Bukkit- und Paper-Plugins unterstützt und zusätzliche Konfigurationsoptionen für Mobs und Gameplay mitbringt. Diese Anleitung führt dich von der frischen Debian/Ubuntu-Installation bis zum dauerhaft laufenden, automatisch startenden Server – inklusive Firewall-Konfiguration, Backup-Routine und Hinweisen zum Upgrade bei wachsender Spielerzahl.

Voraussetzungen

  • netcup-Account mit bestelltem VPS 1000 G12 (oder größer); Zugang zu SCP und CCP
  • Debian 12 oder Ubuntu 24.04 LTS als Betriebssystem (empfohlen)
  • Root- oder sudo-Zugang per SSH; SSH-Key-Authentifizierung empfohlen (siehe SSH-Key-Authentifizierung einrichten)
  • SSH-Client (Windows Terminal, PuTTY oder macOS Terminal)
  • Grundkenntnisse Linux-Kommandozeile
  • Optional: eigene Domain für einen SRV-Record, damit Spieler ohne Portangabe joinen können

netcup VPS-Größen im Vergleich

Wähle den VPS passend zur erwarteten Spielerzahl. Alle Modelle der G12-Generation nutzen DDR5 ECC RAM und NVMe SSD; das Netzwerk bietet 2,5 GBit/s mit Traffic-Flatrate.

ProduktvCoresRAMNVMe SSDPreis/Monat*Empfohlene Spieler
VPS 500 G1224 GB DDR5128 GBca. 5,91 EURbis 5
VPS 1000 G1248 GB DDR5256 GBca. 10,37 EUR10–20
VPS 2000 G12816 GB DDR5512 GBca. 19,25 EUR20–40
VPS 4000 G121232 GB DDR51.024 GBca. 32,41 EUR40–80
VPS 8000 G121664 GB DDR52.048 GBca. 47,95 EUR80+

*12-Monats-Vertrag, inkl. 19 % MwSt. Quelle: netcup.com/en/server/vps (Stand Juni 2026)

Purpur-Versionen und Java-Anforderungen

Minecraft-VersionPurpur-Build (ca.)Java-MindestversionBemerkung
1.21.1 – 1.21.10~2400–2560Java 21Stabil, weit verbreitet
1.21.11~2568Java 25Neueste Zwischenstufe
1.21.x aktuell2591Java 21+Aktueller Stable-Build (Juni 2026)

Schritt 1: System vorbereiten und Java 21 installieren

Starte mit einem vollständigen System-Update und installiere danach Java 21 aus dem offiziellen Azul-Repository. Azul Zulu ist die empfohlene JDK-Distribution für Minecraft-Server, weil sie langfristig gepflegt wird und als headless-Paket ohne GUI-Abhängigkeiten auskommt. Zusätzlich installierst du screen für persistente Terminal-Sessions (nötig für den Graceful-Shutdown im systemd-Service).

sudo apt-get update && sudo apt-get upgrade -y

# Azul Zulu APT-Repository einbinden
sudo apt-get install -y gnupg apt-transport-https
curl -s https://repos.azul.com/azul-repo.key | sudo gpg --dearmor \
  -o /usr/share/keyrings/azul.gpg
echo "deb [signed-by=/usr/share/keyrings/azul.gpg] \
  https://repos.azul.com/zulu/deb stable main" | \
  sudo tee /etc/apt/sources.list.d/zulu.list

sudo apt-get update && sudo apt-get install -y zulu21-jdk-headless screen wget nano

Verifizieren: java -version muss eine Zeile wie openjdk version "21.x.x" ... Zulu21... ausgeben. Taucht dort Java 17 oder 8 auf, ist ein anderes JDK aktiv – dann mit sudo update-alternatives --config java die richtige Version auswählen.

Schritt 2: Dedizierten Minecraft-User anlegen

Minecraft-Server niemals als root betreiben. Ein kompromittierter Server hätte sonst sofortigen Vollzugriff auf das System. Der System-User minecraft erhält keine Login-Shell und kann sich nicht interaktiv anmelden.

sudo useradd --system --create-home \
  --shell /usr/sbin/nologin \
  --home-dir /opt/minecraft minecraft
sudo mkdir -p /opt/minecraft/server
sudo chown -R minecraft:minecraft /opt/minecraft

Schritt 3: Purpur-JAR herunterladen und EULA akzeptieren

Die Purpur-API liefert unter https://api.purpurmc.org/v2/purpur/{version}/latest/download immer den neuesten Build für die gewünschte Minecraft-Version. Passe MC_VERSION bei Bedarf an.

MC_VERSION="1.21.4"
cd /opt/minecraft/server
sudo -u minecraft wget -O purpur.jar \
  "https://api.purpurmc.org/v2/purpur/${MC_VERSION}/latest/download"

Den Server einmalig starten, damit er die Konfigurationsdateien und eula.txt erstellt – er bricht dann ab. Danach die EULA-Datei anpassen:

sudo -u minecraft bash -c "cd /opt/minecraft/server && java -jar purpur.jar --nogui"
# Warten bis der Server stoppt und eula.txt erstellt ist, dann:
sudo -u minecraft sed -i 's/eula=false/eula=true/' /opt/minecraft/server/eula.txt

Wichtig: Ohne eula=true in der eula.txt startet der Server dauerhaft nicht. Das ist ein häufiger Fallstrick bei der Ersteinrichtung.

Schritt 4: Startskript mit Aikars G1GC-Flags anlegen

Auf dem VPS 1000 G12 mit 8 GB RAM empfehlen sich -Xms2G -Xmx6G – das lässt 2 GB Puffer für das Betriebssystem. Xms und Xmx identisch zu setzen verhindert Garbage-Collection-Stottern, weil der JVM-Heap nicht dynamisch wächst. Die Aikars G1GC-Flags sind der de-facto-Standard für Minecraft-Server-Performance.

sudo -u minecraft tee /opt/minecraft/server/start.sh << 'EOF'
#!/bin/bash
cd /opt/minecraft/server
exec java \
  -Xms2G -Xmx6G \
  -XX:+UseG1GC \
  -XX:+ParallelRefProcEnabled \
  -XX:MaxGCPauseMillis=200 \
  -XX:+UnlockExperimentalVMOptions \
  -XX:+DisableExplicitGC \
  -XX:+AlwaysPreTouch \
  -XX:G1HeapWastePercent=5 \
  -XX:G1MixedGCCountTarget=4 \
  -XX:InitiatingHeapOccupancyPercent=15 \
  -XX:G1RSetUpdatingPauseTimePercent=5 \
  -XX:SurvivorRatio=32 \
  -XX:+PerfDisableSharedMem \
  -XX:MaxTenuringThreshold=1 \
  -jar purpur.jar --nogui
EOF
sudo chmod +x /opt/minecraft/server/start.sh

Tipp für den VPS 2000 G12 mit 16 GB RAM: Erhöhe -Xmx auf 12G oder 13G; der Rest bleibt unverändert.

Schritt 5: systemd-Service einrichten und aktivieren

Der systemd-Service startet den Server beim Booten automatisch und startet ihn bei unerwarteten Abstürzen neu. SuccessExitStatus=143 verhindert Fehlalarme, weil Minecraft beim sauberen Stop den Exit-Code 143 zurückgibt. Der Graceful-Shutdown sendet über screen zuerst eine Ankündigung an Spieler, dann save-all und schließlich stop – der Server hat 90 Sekunden Zeit, die Weltdaten zu schreiben.

sudo tee /etc/systemd/system/minecraft.service << 'EOF'
[Unit]
Description=Purpur Minecraft Server
After=network.target
Wants=network-online.target

[Service]
User=minecraft
Group=minecraft
WorkingDirectory=/opt/minecraft/server
ExecStart=/bin/bash /opt/minecraft/server/start.sh
ExecStop=/usr/bin/screen -p 0 -S minecraft -X eval 'stuff "say SERVER WIRD HERUNTERGEFAHREN...\n"'
ExecStop=/bin/sleep 3
ExecStop=/usr/bin/screen -p 0 -S minecraft -X eval 'stuff "save-all\n"'
ExecStop=/bin/sleep 5
ExecStop=/usr/bin/screen -p 0 -S minecraft -X eval 'stuff "stop\n"'
TimeoutStopSec=90
SuccessExitStatus=143
Restart=on-failure
RestartSec=10
ProtectSystem=full
ProtectHome=true
PrivateTmp=true

[Install]
WantedBy=multi-user.target
EOF

sudo systemctl daemon-reload
sudo systemctl enable minecraft.service
sudo systemctl start minecraft.service

Verifizieren: sudo systemctl status minecraft muss Active: active (running) zeigen. Live-Logs verfolgen: sudo journalctl -u minecraft -f. Die Server-Konsole ist über sudo -u minecraft screen -r minecraft erreichbar; mit Ctrl+A, dann D die Session verlassen, ohne den Server zu stoppen.

Schritt 6: netcup SCP-Firewall konfigurieren

Die netcup SCP-Firewall greift auf Netzwerk-Ebene vor dem Server. Kritischer Hinweis: Sobald du die erste eigene Regel anlegst, wechselt die Default-Policy zu DROP – alle nicht explizit erlaubten Verbindungen werden geblockt. Stelle deshalb zuerst die SSH-Regel sicher, bevor du die Minecraft-Regeln hinzufügst. Andernfalls sperrst du dich aus dem Server aus.

Minecraft benötigt drei Regeln:

  • TCP INGRESS Port 25565 – normales Java-Edition-Spielprotokoll
  • UDP INGRESS Port 25565 – Query-Protokoll und Bedrock-Kompatibilität
  • UDP EGRESS Port 25565 – Pflicht, weil die netcup-Firewall UDP nicht stateful behandelt (im Gegensatz zu TCP)

Vorgehen im SCP (vservercontrolpanel.de):

  1. Server auswählen → „Firewall" im Menü
  2. „Firewall Policies" → „Create Firewall Policy" → Name z. B. Minecraft
  3. Regel 1: Direction INGRESS, Protocol TCP, Destination Ports 25565, Action ACCEPT
  4. Regel 2: Direction INGRESS, Protocol UDP, Destination Ports 25565, Action ACCEPT
  5. Regel 3: Direction EGRESS, Protocol UDP, Source Ports 25565, Action ACCEPT
  6. SSH-Regel sicherstellen: Direction INGRESS, Protocol TCP, Destination Ports 22, Action ACCEPT
  7. Policy dem Server zuweisen: Server → Firewall → „Edit Policies" → Policy aktivieren → Speichern

Regeln greifen sofort, ein Server-Neustart ist nicht nötig. Optionale Defense-in-Depth auf dem VPS selbst:

sudo ufw allow 22/tcp
sudo ufw allow 25565/tcp
sudo ufw allow 25565/udp
sudo ufw enable

Verifizieren: Von einem anderen Rechner aus mit einem Minecraft-Client verbinden (DEINE-SERVER-IP:25565) oder den Server-Status mit einem Online-Tool wie mcsrvstat.us prüfen.

Schritt 7: Automatisches Backup per cron einrichten

Das Backup-Skript pausiert zunächst den automatischen Speichervorgang des Servers (save-off), erzwingt ein letztes vollständiges Speichern (save-all) und erstellt dann ein konsistentes tar-Archiv der Welt-Verzeichnisse. Backups älter als 7 Tage werden automatisch gelöscht.

sudo -u minecraft tee /opt/minecraft/backup.sh << 'EOF'
#!/bin/bash
BACKUP_DIR="/opt/minecraft/backups"
SERVER_DIR="/opt/minecraft/server"
DATE=$(date +%Y-%m-%d_%H-%M)
RETENTION_DAYS=7

mkdir -p "$BACKUP_DIR"

# Saves pausieren (falls Server laeuft)
screen -p 0 -S minecraft -X eval 'stuff "save-off\n"' 2>/dev/null
screen -p 0 -S minecraft -X eval 'stuff "save-all\n"' 2>/dev/null
sleep 5

# Backup erstellen
tar -czf "${BACKUP_DIR}/backup_${DATE}.tar.gz" \
  -C "$SERVER_DIR" world world_nether world_the_end

# Saves wieder aktivieren
screen -p 0 -S minecraft -X eval 'stuff "save-on\n"' 2>/dev/null

# Alte Backups loeschen
find "$BACKUP_DIR" -name "backup_*.tar.gz" -mtime +"$RETENTION_DAYS" -delete

echo "Backup abgeschlossen: backup_${DATE}.tar.gz"
EOF
sudo chmod +x /opt/minecraft/backup.sh

# Cron-Job fuer taeglich 04:00 Uhr einrichten
(crontab -u minecraft -l 2>/dev/null; echo "0 4 * * * /opt/minecraft/backup.sh >> /opt/minecraft/backup.log 2>&1") \
  | crontab -u minecraft -

Verifizieren: Skript einmalig manuell ausführen: sudo -u minecraft /opt/minecraft/backup.sh. Danach muss in /opt/minecraft/backups/ eine Datei wie backup_2026-06-11_04-00.tar.gz liegen. Den Inhalt prüfen: tar -tzf /opt/minecraft/backups/backup_*.tar.gz | head -20 – die Ausgabe muss die Welt-Ordner zeigen.

Purpur aktualisieren

Das Update-Verfahren ist bewusst einfach gehalten: Service stoppen, neues JAR herunterladen, Service starten. Wichtig ist, vorher ein Backup zu erstellen und die Kompatibilität der neuen Minecraft-Version mit bestehenden Plugins zu prüfen. Ein Downgrade (z. B. von 1.21 zurück auf 1.20) ist ohne Datenverlust nicht möglich.

MC_VERSION="1.21.4"   # gewuenschte Version eintragen
sudo systemctl stop minecraft
# Altes JAR sichern
sudo -u minecraft cp /opt/minecraft/server/purpur.jar \
  /opt/minecraft/server/purpur.jar.bak
# Neues JAR herunterladen
sudo -u minecraft wget -O /opt/minecraft/server/purpur.jar \
  "https://api.purpurmc.org/v2/purpur/${MC_VERSION}/latest/download"
sudo systemctl start minecraft
sudo journalctl -u minecraft -f

Troubleshooting / Typische Fehler

Server startet nicht – „Failed to bind to port"

Port 25565 ist bereits belegt. Prüfe mit sudo ss -tlnp | grep 25565, welcher Prozess den Port hält. Häufig ist ein zweiter java-Prozess aus einem vorherigen Startversuch aktiv. Mit sudo -u minecraft pkill -u minecraft java beenden und den Service neu starten.

Server startet nicht – EULA-Fehler

In /opt/minecraft/server/eula.txt muss exakt eula=true stehen. Mit cat /opt/minecraft/server/eula.txt prüfen, ob die Änderung übernommen wurde.

Out-of-Memory-Kill (OOM)

Wenn journalctl -u minecraft einen OOM killer-Eintrag zeigt, ist -Xmx zu hoch gesetzt. Auf dem VPS 1000 G12 nie über -Xmx6G gehen – die verbleibenden 2 GB braucht das Betriebssystem. Im Zweifel auf -Xmx5G reduzieren.

SSH-Verbindung nach Firewall-Konfiguration verloren

Du hast die erste Firewall-Regel angelegt und dabei vergessen, SSH (Port 22 TCP INGRESS) explizit zu erlauben. Die Default-Policy wechselt zu DROP. Lösung: Über die netcup SCP-Notfallkonsole (VNC/Serial) einloggen und die SSH-Regel im SCP nachtragen.

Minecraft UDP nicht erreichbar (Query-Protokoll)

Falls externe Tools den Server-Status nicht abfragen können: Prüfe, ob die UDP-EGRESS-Regel für Port 25565 in der SCP-Firewall gesetzt ist. Die netcup-Firewall behandelt UDP nicht stateful – ohne EGRESS-Regel kommen UDP-Antworten nicht beim Client an.

Falsches Java

Purpur 1.21.x benötigt Java 21. Läuft noch ein älteres Java (z. B. 17), erscheint beim Start ein Fehler wie UnsupportedClassVersionError. Mit java -version prüfen und ggf. über sudo update-alternatives --config java die richtige Version aktivieren.

Häufige Fragen

Wie viele Spieler passen auf den VPS 1000 G12?

Mit -Xmx6G und Purpur sind realistisch 15–20 gleichzeitige Spieler in einer Vanilla-artigen Welt ohne schwere Modpacks möglich. Bei Minigame-Servern oder intensiver Redstone-Nutzung kann die Grenze früher erreicht werden. Für 20–40 Spieler ist der VPS 2000 G12 die nächste Stufe.

Kann ich den VPS upgraden ohne Datenverlust?

Ja. Im netcup CCP (Customer Control Panel) lässt sich ein laufender VPS jederzeit auf eine größere Variante hochstufen. Die Weltdaten auf der NVMe SSD bleiben erhalten. Nach dem Upgrade den Server neu starten und -Xmx in start.sh entsprechend erhöhen.

Was ist der Unterschied zwischen Purpur und Paper oder Spigot?

Purpur ist ein Fork von Paper und erweitert diesen um eine eigene Konfigurationsdatei (purpur.yml) für Mobs, Spielerverhalten und Gameplay-Details. Alle Paper- und Bukkit-Plugins funktionieren ohne Änderung. Für reine Stabilität ohne Extras ist Paper ausreichend; wer maximale Konfigurierbarkeit sucht, greift zu Purpur.

Wie verbinde ich mich mit der Minecraft-Server-Konsole?

Mit sudo -u minecraft screen -r minecraft öffnest du die laufende Server-Konsole. Mit Ctrl+A, dann D verlässt du die Session, ohne den Server zu stoppen. Alternativ zeigt sudo journalctl -u minecraft -f den Log-Stream, erlaubt aber keine Eingaben.

Brauche ich ufw zusätzlich zur netcup SCP-Firewall?

Die SCP-Firewall reicht für den Grundschutz aus. Eine zusätzliche ufw-Konfiguration auf dem VPS selbst ist freiwillig, aber als Defense-in-Depth sinnvoll – insbesondere wenn später weitere Dienste auf dem VPS laufen.

Fazit

Ein eigener Purpur-Minecraft-Server auf dem netcup VPS 1000 G12 ist in etwa einer Stunde betriebsbereit. Die Kombination aus dediziertem System-User, systemd-Autostart mit Graceful-Shutdown, täglichem tar-Backup und korrekter SCP-Firewall-Konfiguration (inklusive UDP-EGRESS) legt eine solide Grundlage für den Dauerbetrieb. Der größte Fallstrick ist die UDP-Bidirektionalität in der netcup-Firewall und der Firewall-Lockout beim Erstanlegen der ersten Regel. Wächst die Spielerzahl über 20 hinaus, reicht ein Online-Upgrade im CCP auf den VPS 2000 G12 – ohne Datenverlust und ohne Neueinrichtung.

Weiterführende Anleitungen und Quellen