Seit ich Minecraft spiele, betreibe ich einen eigenen Minecraft-Server auf einem dedizierten Windows-PC. Und weil Linux – und im speziellen Ubuntu – mein neues Steckenpferd ist, dachte ich mir, was würde sich besser eignen, als einen Minecraft-Server unter diesem OS aufzusetzen.
Für die Hardware-Interessierten: Ubuntu läuft als Serverversion 20.04 in einer virtuellen Umgebung auf einem Synology NAS-Server 1621+ mit 32 GB RAM. Alle virtuellen Maschinen liegen auf einem 1 TB grossem SSD-RAID 1. Die Minecraft-Umgebung weist folgende technische Merkmale auf:
- 2 CPUs (1 CPU für Minecraft, die andere für Ubuntu)
- 6 GB RAM (4 GB für Minecraft, der Rest für Ubuntu)
- 100 GB Festplattenspeicher (Die empfohlene Grösse beträgt ca. 15 GB. Da ich aber verschiedene Minecraft-Serverversionen vorhalte und regelmässig meine Minecraft-Welt sichere, brauche ich etwas mehr Speicherplatz.)
Installationsschritte
Über das macOS-Terminalprogramm oder Windows-Terminalprogramm PuTTY stellst du eine SSH-Verbindung zu deinem Ubuntu-Server her und installierst den Minecraft-Server wie folgt:
- Zuerst aktualisierst du die Paketquellen, weil du weitere Programme installieren musst.
sudo apt update
- Ohne Java kannst du Minecraft nicht ausführen. Darum installierst du die Standard-Java-Laufzeitumgebung.
sudo apt install default-jdk
- Installiere den Fenstermanager
screen
, um den Minecraft-Server später im Hintergrund laufen zu lassen. Somit kannst du das Terminalprogramm schliessen, ohne dass der Server beendet wird.sudo apt install screen
- Installiere das Programm
wget
, um die Minecraft-Serverdatei über das Web herunterzuladen.sudo apt install wget
- Erstelle den Benutzer
minecraft
, unter diesem der Minecraft-Server ausgeführt wird. Dabei wird das Verzeichnis/opt/minecraft
als Home-Verzeichnis angelegt.sudo useradd -m -r -d /opt/minecraft minecraft
- Erstelle ein Verzeichnis, unter dem der Minecraft-Server installiert wird. Ich bevorzuge als Verzeichnisname die Minecraft-Version, weil ich verschiedene Versionen im Einsatz habe.
sudo mkdir /opt/minecraft/1.16.5
- Jetzt lädst du die Minecraft-Serverdatei herunter. Am einfachsten öffnest du die offizielle Minecraft-Website und kopierst die Link-Adresse in die Zwischenablage.
- Füge die kopierte Link-Adresse dem Programm
wget
hinzu.
Wenn du eine andere Version installieren möchtest, rufe die Website mcversion.net auf.sudo wget -O /opt/minecraft/1.16.5/minecraft_server.jar https://launcher.mojang.com/v1/objects/1b557e7b033b583cd9f66746b7a9ab1ec1673ced/server.jar
- Optionaler Schritt: Da ich Minecraft mit Mods spiele, die die Programmbibliothek Minecraft Forge benötigen, muss diese Bibliothek zusätzlich installiert werden.
Gehe dafür zur Minecraft Forge-Website , kopiere die entsprechende Link-Adresse und füge sie dem Programmwget
hinzu.
Da diese Link-Adresse über den Redirection-Dienst AdFoc.us läuft, musst du den AdFoc.us-Teil aus der Adresse löschen. Wenn beispielsweise die kopierte Link-Adressesudo wget -O /opt/minecraft/1.16.5/minecraft_forge.jar https://maven.minecraftforge.net/net/minecraftforge/forge/1.16.5-36.1.0/forge-1.16.5-36.1.0-installer.jar
https://adfoc.us/serve/sitelinks/?id=271228&url=https://maven.minecraftforge.net/net/minecraftforge/forge/1.16.5-36.1.0/forge-1.16.5-36.1.0-installer.jar
lautet, dann entferne den AdFoc.us-Teilhttps://adfoc.us/serve/sitelinks/?id=271228&url=
- Bevor du den Minecraft-Server installieren resp. starten kannst, musst du den Endbenutzer-Lizenzvertrag (engl. End User License Agreement, abgek. EULA) akzeptiert. Dazu erstellst du die Datei
eula.txt
mit dem Inhalteula=true
.sudo bash -c "echo eula=true > /opt/minecraft/1.16.5/eula.txt"
- Zum Schluss musst du dem Benutzer
minecraft
die Besitzrechte am Minecraft-Serververzeichnis geben.sudo chown -R minecraft /opt/minecraft/1.16.5
Minecraft-Server starten und konfigurieren
Da wir nun alles beisammen haben, starten wir den Minecraft-Server und konfigurieren ihn.
- Als Erstes wechselst du zum Benutzer
minecraft
.sudo su minecraft
- Als Nächstes musst du zum Verzeichnis des Minecraft-Servers gehen.
cd /opt/minecraft/1.16.5 oder cd ~/1.16.5
- Jetzt kannst du den Server starten, indem du das Programm
minecraft_server.jar
ausführst.java -Xms1G -Xmx4G -jar minecraft_server.jar nogui
- Sobald der Minecraft-Server läuft, stoppst du ihn wieder, damit du die Konfigurationsdatei
server.properties
anpassen kannst. Übrigens findest du alle Minecraft-Befehle im Minecraft-Wiki .
Der Inhalt dieser Konfigurationsdatei siehst du unten. Ich werde auf einige Einstellungen eingehen. Eine Beschreibung der Einstellungen findest du ebenfalls im Minecraft-Wiki .nano server.properties
~/1.16.5/server.properties#Minecraft server properties #Thu Jun 24 19:45:08 CEST 2021 enable-jmx-monitoring=false rcon.port=25575 level-seed= gamemode=survival enable-command-block=false enable-query=false generator-settings= level-name=world motd=A Minecraft Server query.port=25565 pvp=true generate-structures=true difficulty=easy network-compression-threshold=256 max-tick-time=60000 use-native-transport=true max-players=20 online-mode=true enable-status=true allow-flight=false broadcast-rcon-to-ops=true view-distance=10 max-build-height=256 server-ip= allow-nether=true server-port=25565 enable-rcon=false sync-chunk-writes=true op-permission-level=4 prevent-proxy-connections=false resource-pack= entity-broadcast-range-percentage=100 rcon.password= player-idle-timeout=0 force-gamemode=false rate-limit=0 hardcore=false white-list=false broadcast-console-to-ops=true spawn-npcs=true spawn-animals=true snooper-enabled=true function-permission-level=2 level-type=default text-filtering-config= spawn-monsters=true enforce-whitelist=false resource-pack-sha1= spawn-protection=16 max-world-size=29999984
Minecraft Forge installieren (optional)
Wie ich weiter oben erwähnt habe, verwende ich verschiedene Mods. Dafür musst du zusätzlich Minecraft Forge ausführen resp. zuerst installieren.
Wichtig: Der Minecraft Vanilla-Server darf nicht ausgeführt sein! Gegebenenfalls beende ihn, bevor du mit der Forge-Installation fortfährst.
- Führe den folgenden Befehl aus, um mit der Installation zu beginnen.
java -jar minecraft_forge.jar --installServer
- Nach erfolgreicher Installation kannst du die Forge-Installationsdatei, die Log-Datei wie auch die Minecraft-Serverdatei
minecraft_server.jar
löschen. Forge hat eine neue Serverdatei namensminecraft_server.1.16.5.jar
erstellt und verwendet diese.rm minecraft_forge.jar minecraft_forge.jar.log minecraft_server.jar
- Nun sind alle Arbeiten abgeschlossen und du kannst den Minecraft Forge-Server starten.
java -Xms1G -Xmx4G -jar forge-1.16.5-36.1.0.jar nogui
Minecraft-Server im Hintergrund laufen lassen
Um den Minecraft-Server ohne Terminalprogramm betreiben zu können, müssen wir ihn im Hintergrund mithilfe des Fenstermanager screen
ausführen. Die nächsten Schritte zeigen dir, wie dies zu bewerkstelligen ist.
- Starte eine neue Sitzung mit dem Namen «server1». Der Name – den du übrigens frei wählen kannst – identifiziert die Sitzung, die du später wieder aufrufen kannst.
screen -S server1
- Wechsle zuerst zum Benutzer
minecraft
.sudo su minecraft
- Nun gehst du zum Minecraft-Serververzeichnis.
cd ~/1.16.5
- Starte den Minecraft-Server oder optional den Minecraft Forge-Server, wenn du Mods verwendest.
java -Xms1G -Xmx4G -jar minecraft_server.jar nogui oder bei optionaler Verwendung von Minecraft Forge java -Xms1G -Xmx4G -jar forge-1.16.5-36.1.0.jar nogui
- Abschliessend kannst du diese Sitzung verlassen resp. mittels der Tastenkombination Ctrl + A + D trennen (engl. detach) und das Terminalprogramm schliessen. Der Minecraft-Server läuft im Hintergrund weiter.
Weitere screen
-Befehle kurz erklärt
Wie rufst du eine bestehende screen
-Sitzung wieder auf oder beendest sie? Dafür gibt es weitere Befehle, die ich nachfolgend kurz beschreibe.
- Nimmt eine bestehende Sitzung wieder auf, falls nur diese eine im Hintergrund läuft.
screen -r
- Nimmt die Sitzung mit dem Namen «server1» wieder auf.
screen -r server1
- Listet alle laufenden Sitzungen auf.
screen -ls
- Beendet die Sitzung mit dem Namen «server1».
Vorsicht: Du solltest den Minecraft-Server vorher ordentlich herunterfahren, bevor du die Sitzung beendest.screen -S server1 -X quit
- Sendet einen Befehl durch die Sitzung mit dem Namen «server1» an den Minecraft-Server.
Gibt im Chat-Fenster des Minecraft-Clients «Hallo» aus.screen -S server1 -X stuff "say Hallo\n"
- Der gleiche Befehl wie oben, sendet die Nachricht aber immer an das erste Sitzungsfenster (0).
Wenn eine Sitzung im sogenannten «detached»-Modus gestartet wird, ist kein Fenster vorhanden und Nachrichten würden ins Leere gesendet. Darum muss bei solchen Sitzungen, wo Nachrichten verschickt werden, immer die Befehlszeilenoptionscreen -p 0 -S server1 -X stuff "say Hallo\n"
-p 0
angegeben werden.
Minecraft-Server als Dienst ausführen
Wenn wir den Minecraft-Server als Dienst starten, vereinfacht es die Verwaltung des Servers. Sei es beispielsweise, dass er automatisch beim Starten von Ubuntu auch gestartet wird oder, wenn wir ihn wegen Wartungen herunterfahren müssen, er automatisch eine entsprechende Meldung an die Minecraft-Clients sendet.
Für diese Aufgabe setzen wir den System- und Dienstmanager systemd
ein. Er ist unter anderem verantwortlich für alle unter einem Linux-System wie Ubuntu laufenden Dienste vom Startvorgang bis zum Herunterfahren.
- Für die korrekte Dienstausführung müssen wir eine sogenannte Konfigurationsdatei erstellen.
Gib folgenden Befehl ein, um eine neue Konfigurationsdatei zu erstellen und sie für die Bearbeitung zu öffnen.sudo nano /etc/systemd/system/minecraft@.service
- Erfasse folgenden Text in der geöffneten Konfigurationsdatei.
/etc/systemd/system/minecraft@.service
[Unit] Description=Minecraft-Server %i After=network.target [Service] WorkingDirectory=/opt/minecraft/%i User=minecraft Group=minecraft Restart=always KillSignal=SIGCONT ExecStart=/usr/bin/screen -DmS mc-%i /usr/bin/java -Xms1G -Xmx4G -jar minecraft_server.jar nogui ExecStop=/usr/bin/screen -p 0 -S mc-%i -X eval 'stuff "say Der Server wird in 30 Sekunden heruntergefahren. Begib dich an einen sicheren Ort."\015' ExecStop=/bin/sleep 5 ExecStop=/usr/bin/screen -p 0 -S mc-%i -X eval 'stuff "say Noch 25 Sekunden bis der Server heruntergefahren wird."\015' ExecStop=/bin/sleep 5 ExecStop=/usr/bin/screen -p 0 -S mc-%i -X eval 'stuff "say Noch 20 Sekunden bis der Server heruntergefahren wird."\015' ExecStop=/bin/sleep 5 ExecStop=/usr/bin/screen -p 0 -S mc-%i -X eval 'stuff "say Noch 15 Sekunden bis der Server heruntergefahren wird."\015' ExecStop=/bin/sleep 5 ExecStop=/usr/bin/screen -p 0 -S mc-%i -X eval 'stuff "say Noch 10 Sekunden bis der Server heruntergefahren wird."\015' ExecStop=/bin/sleep 5 ExecStop=/usr/bin/screen -p 0 -S mc-%i -X eval 'stuff "say Noch 5 Sekunden bis der Server heruntergefahren wird."\015' ExecStop=/bin/sleep 1 ExecStop=/usr/bin/screen -p 0 -S mc-%i -X eval 'stuff "say Noch 4 Sekunden bis der Server heruntergefahren wird."\015' ExecStop=/bin/sleep 1 ExecStop=/usr/bin/screen -p 0 -S mc-%i -X eval 'stuff "say Noch 3 Sekunden bis der Server heruntergefahren wird."\015' ExecStop=/bin/sleep 1 ExecStop=/usr/bin/screen -p 0 -S mc-%i -X eval 'stuff "say Noch 2 Sekunden bis der Server heruntergefahren wird."\015' ExecStop=/bin/sleep 1 ExecStop=/usr/bin/screen -p 0 -S mc-%i -X eval 'stuff "say Noch 1 Sekunden bis der Server heruntergefahren wird."\015' ExecStop=/bin/sleep 1 ExecStop=/usr/bin/screen -p 0 -S mc-%i -X eval 'stuff "save-all"\015' ExecStop=/usr/bin/screen -p 0 -S mc-%i -X eval 'stuff "stop"\015' [Install] WantedBy=multi-user.target
- Nachdem du die Konfigurationsdatei erstellt hast, lädst du den System- und Dienstmanager neu.
sudo systemctl daemon-reload
- Jetzt startest du den Minecraft-Serverdienst und aktivierst ihn, damit er beim Booten von Ubuntu automatisch ausgeführt wird.
sudo systemctl start minecraft@1.16.5 sudo systemctl enable minecraft@1.16.5
- Den Dienststatus rufst du wie folgt auf.
sudo systemctl status minecraft@1.16.5
- Um den Dienst zu stoppen, gibst du folgenden Befehl ein.
sudo systemctl stop minecraft@1.16.5
- Wenn du nachträglich die Konfigurationsdatei änderst, musst du den System- und Dienstmanager neu laden.
sudo systemctl daemon-reload