Fachschaftsminecraftserver
Maintainer: Tobias Müller tmueller@cl.uni-heidelberg.de
Dieses Image basiert auf der Arbeit von https://github.com/Phyremaster/papermc-docker und wurde um Sicherheitsanpassungen und weiteren Funktionen erweitert.
🐳 Setup mit Docker
Die Anwendung ist dockerisiert. Images werden manuell vom Maintainer gebaut und in die Container Registry hochgeladen.
Wir empfehlen, docker-compose
zu verwenden, um die Anwendung zu deployen, zum Beispiel mit der folgenden docker-compose.yml
:
version: "3"
services:
papermc:
image: gitlab.cl.uni-heidelberg.de:5050/tmueller/clspigot-docker:latest
ports:
- "25565:25565" # <Host-Port>:<Container-Port>, letzterer ist immer 25565
restart: on-failure
Um den Container zum Laufen zu bringen, muss man sich an dem Server mit dem folgenden Befehl erst mal an der Docker-Registry anmelden:
# docker login gitlab.cl.uni-heidelberg.de:5050
Das hier verwendete Passwort (bzw. Authorization Token) wird irgendwo im Klartext gespeichert, wenn man das Image also auf einen geteilten Server deployt, sollte man dafür einen geteilten Account verwenden (und nicht seinen persönlichen).
Volumes und Host-Binds
Standardmäßig werden Volumes verwendet um keine Angriffsflächen für das Hostsystem zu erzeugen. Falls notwendig kann man dennoch eigene Verzeichnisse an den Container durchgeben, jedoch muss man hierzu die untenstehenden Befehle eingeben da der User des Containers mit einer GUID läuft, die in den allermeisten Linux-Distros nicht automatisch vergeben ist, um kein versehentlichen Zugriff auf andere Bereiche des Hostsystems zu ermöglichen.
# mkdir -p /hosts/location/of/papermc/{data,backups}
# chown -R 61000:61000 /hosts/location/of/papermc
61000
ist die UID des papermc
-Nutzers innerhalb des Containers.
Zusätzlich muss natürlich die docker-compose.yml
eine Volume-Direktive enthalten wie in diesem Beispiel:
version: "3"
services:
papermc:
image: gitlab.cl.uni-heidelberg.de:5050/tmueller/clspigot-docker:latest
ports:
- "25565:25565" # <Host-Port>:<Container-Port>, letzterer ist immer 25565
volumes:
- /hosts/location/of/papermc/data:/papermc
- /hosts/location/of/papermc/backups:/backup
restart: on-failure
Anmerkungen
- Sofern die DynMap über den internen Webserver des Plugins ausgeliefert werden soll, muss auch noch der Container-Port 8123 nach außen gemappt werden. Der Maintainer rät allerdings dazu, den aktuellen Nginx-Container stattdessen zu nutzen (und DynMap entsprechend anzupassen). Dabei können selbst bei rund 10 Aufrufen pro Minute erheblich ressourcen gespart werden – ein Java-basierter Webserver ist keine gute Idee.
🌳 Umgebungsvariablen
Umgebungsvariablen können über environment
festgelegt werden, z.B. so:
...
services:
papermc:
image: gitlab.cl.uni-heidelberg.de:5050/tmueller/clspigot-docker:latest
environment:
NAME_DER_VARIABLE: "Wert der Variable"
...
Der Platzhalter NAME_DER_VARIABLE
wird durch den Namen der Umgebungsvariable erstetzt, der Platzhalter Wert der Variable
durch den Wert, der zugewiesen werden soll.
Name der Variable | Kurzbeschreibung | Beispiel | Anmerkung |
---|---|---|---|
MC_VERSION |
Zu verwendende Minecraft-Version | 1.16.4 |
Die spezifizierte Version muss auch einen PaperMC Release haben, da sonst der Build fehlschlägt, siehe Liste der aktuellen PaperMC-Builds |
PAPER_BUILD |
Nummer des zu verwendenden PaperMC-Builds | #355 |
Normalerweise irrelevant (kann bei „latest“ belassen werden) |
MC_RAM |
Speichermenge in Mega- oder Gigabyte | 4G |
Für die Flags der Java VM, die der Maintainer aktuell nutzt, empfiehlt es sich 6GB minimum zuzuweisen oder maximal 10GB |
JAVA_OPTS |
Javaspezifische Parameter | siehe unten | Nur ändern, wenn es notwendig ist und man weiß, was man tut! Ausnahme: Wenn der Server mit weniger RAM laufen soll, kann man hier die für Spigot üblichen Flags (siehe SpigotMC-Docs) einsetzen, um Aikars Flags zu überschreiben |
TM_BASE_AUTH |
Passwort für tarball mit vorkonfigurierten Minecraftserver (Nur Uniintern) | passwort | Falls Tarball nicht per .htaccess gesichert (nicht Empfohlen kann diese variable leergelassen werden |
TM_BASE_URL |
URL unter der, der Tarball heruntergeladen werden kann | https://example.tld/... | Wird zusammen mit TM_BASE_AUTH bei bedarf in docker-compose im Abschnitt environment: spezifiziert |
Beispiel für javaspezifische Parameter
-XX:+UseG1GC -XX:+ParallelRefProcEnabled -XX:MaxGCPauseMillis=200 -XX:+UnlockExperimentalVMOptions -XX:+DisableExplicitGC -XX:+AlwaysPreTouch -XX:G1NewSizePercent=30 -XX:G1MaxNewSizePercent=40 -XX:G1HeapRegionSize=8M -XX:G1ReservePercent=20 -XX:G1HeapWastePercent=5 -XX:G1MixedGCCountTarget=4 -XX:InitiatingHeapOccupancyPercent=15 -XX:G1MixedGCLiveThresholdPercent=90 -XX:G1RSetUpdatingPauseTimePercent=5 -XX:SurvivorRatio=32 -XX:+PerfDisableSharedMem -XX:MaxTenuringThreshold=1 -Dusing.aikars.flags=https://mcflags.emc.gs -Daikars.new.flags=true
💾 Backups
Jeden Tag um 7:30 wird ein Backup des Servers gemacht und unter /backups
im Container gespeichert. Backups
wird als eigenes Volume gespeichert.
Um manuell ein Backup zu initieren geht das entweder (Falls EssentialsX installiert und konfiguriert ist) von minecraft aus per /backup
Zum wiederherstellen eines backups muss folgende befehle vom Haost-System ausgeführt werden:
# docker exec -it papermc_papermc_1 /bin/bash
$ bash restore.sh
Ihr bekommt die verfügbaren Backups angezeigt und könnt dann das Datum als Auswahl eingeben zum wiederherstellen.
📋 Befehle
- Innerhalb von Minecraft kann per
/backup
der Server gesichert werden. - Zum Stoppen des Servers einfach über Docker den Container stoppen.
Um zur Konsole des Minecraft-Servers zu gelangen (papermc_papermc_1
muss ggfs. abgeändert werden, wenn der Container einen anderen Namen hat):
# docker exec -it papermc_papermc_1 /bin/bash
$ screen -r mc
🐛 Bekannte Probleme
Es kann sein, dass nach docker-compose up
der folgende Output erscheint (immer wieder wiederholend, die Nummern zählen dabei hoch, allerdings in unregelmäßigen Abständen):
Creating network "papermc_default" with the default driver
Creating papermc_papermc_1 ... done
Attaching to papermc_papermc_1
papermc_1 | No screen session found.
papermc_1 | There is a screen on:
papermc_1 | 17.mc (02/28/21 11:58:36) (Detached)
papermc_1 | 1 Socket in /run/screen/S-papermc.
papermc_1 | No screen session found.
papermc_1 | There is a screen on:
papermc_1 | 26.mc (02/28/21 11:58:42) (Detached)
papermc_1 | 1 Socket in /run/screen/S-papermc.
papermc_1 | No screen session found.
...
In diesem Fall stürzt der Minecraft-Server immer wieder ab und wird direkt danach neu gestartet. Mögliche Gründe dafür sind:
- Die Java-VM versucht, mehr RAM zu benutzen, als sie kriegen kann und stürzt daher ab. In dem Fall muss man sowohl den
MC_RAM
als auch den Java-Parameter anpassen.
⚖️ Sonstige Anmerkungen
This project does NOT redistribute the Minecraft server files. Instead, the (very small) script that is inside of the image,
papermc.sh
, downloads these files from their official sources during installation.PLEASE NOTE: This is an unofficial project. I did not create PaperMC. This is the official PaperMC website.
📚 Weitere Ressourcen
In kürze verfügbar:
- [Read the Docs] (https://gitlab.cl.uni-heidelberg.de/tmueller/clspigot-docker/-/blob/beta/docs/user.md)
Projektsites des ursprünglichen Images von Phyremaster: