Skip to content
Snippets Groups Projects
user avatar
TheBroTMv2 authored
minecraft java edition only uses tcp, only the bedrock edition uses udp so i remove it for security purposes
4d6dd1b4
History

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:

Projektsites des ursprünglichen Images von Phyremaster: