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.

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.
| Produkt | vCores | RAM | NVMe SSD | Preis/Monat* | Empfohlene Spieler |
|---|---|---|---|---|---|
| VPS 500 G12 | 2 | 4 GB DDR5 | 128 GB | ca. 5,91 EUR | bis 5 |
| VPS 1000 G12 | 4 | 8 GB DDR5 | 256 GB | ca. 10,37 EUR | 10–20 |
| VPS 2000 G12 | 8 | 16 GB DDR5 | 512 GB | ca. 19,25 EUR | 20–40 |
| VPS 4000 G12 | 12 | 32 GB DDR5 | 1.024 GB | ca. 32,41 EUR | 40–80 |
| VPS 8000 G12 | 16 | 64 GB DDR5 | 2.048 GB | ca. 47,95 EUR | 80+ |
*12-Monats-Vertrag, inkl. 19 % MwSt. Quelle: netcup.com/en/server/vps (Stand Juni 2026)
Purpur-Versionen und Java-Anforderungen
| Minecraft-Version | Purpur-Build (ca.) | Java-Mindestversion | Bemerkung |
|---|---|---|---|
| 1.21.1 – 1.21.10 | ~2400–2560 | Java 21 | Stabil, weit verbreitet |
| 1.21.11 | ~2568 | Java 25 | Neueste Zwischenstufe |
| 1.21.x aktuell | 2591 | Java 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):
- Server auswählen → „Firewall" im Menü
- „Firewall Policies" → „Create Firewall Policy" → Name z. B.
Minecraft - Regel 1: Direction
INGRESS, ProtocolTCP, Destination Ports25565, ActionACCEPT - Regel 2: Direction
INGRESS, ProtocolUDP, Destination Ports25565, ActionACCEPT - Regel 3: Direction
EGRESS, ProtocolUDP, Source Ports25565, ActionACCEPT - SSH-Regel sicherstellen: Direction
INGRESS, ProtocolTCP, Destination Ports22, ActionACCEPT - 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
- netcup vServer bestellen: vom CCP bis zum ersten SSH-Login
- netcup SCP-Firewall einrichten: Policies, Regeln und Zusammenspiel mit ufw
- VPS absichern und härten: UFW, SSH-Keys und Fail2Ban
- systemd-Service selbst erstellen und verwalten
- Cron und crontab richtig nutzen – die Grundlagen
- PurpurMC offizielle Dokumentation: purpurmc.org/docs/purpur/installation
- netcup Firewall-Dokumentation: netcup.com Helpcenter
- Minecraft Wiki – Server Startup Script: minecraft.wiki