Skip to content
Snippets Groups Projects

README an das Fachschaftsformat anpassen, Container automatisch bauen

Merged Jakob Moser requested to merge moser/clspigot-docker:mergable into master
1 file
+ 1
1
Compare changes
  • Side-by-side
  • Inline
+ 120
70
# Docker container für einen Minecraft Server auf PaperMC-Basis
Dieses Image basiert auf der Arbeit von https://github.com/Phyremaster/papermc-docker und wurde so modifiziert sodass nurnoch dieser Befehl genutzt werden muss um das Image auf einen beliebigen Server zu starten:<br />
# Setup
```sudo docker run -d -it -p 25565:25565 -v unimc:/papermc:Z -v unibackup:/Backup:Z --restart on-failure gitlab.cl.uni-heidelberg.de:5050/tmueller/clspigot-docker:latest```
- Port
- Muss immer angegeben werden um den Server ausserhalb des containers zugänglich zu machen.
- `-p <12345>:25565`
- Sofern dynmap über den internen webserver des plugins ausgeliefert werden soll muss noch der port 8123 gemapped werden. Ich rate aber eher dazu den aktuellen nginx container zu nutzen und entsprechend dynmap dazu anzupassen hierbei können selbst bei rund 10 aufrufe pro minute erheblich viel ressourcen gespart werden denn ein java basierter webserver ist keine gute idee ^^
- Volume
- Zum festlegen eines Namen des Volumes
- Sofern Konfigurationsdaten bearbeitet werden sollen kann es sinn machen eine Verlinkung zu einem Ordner festzulegen, da sonst dies nur möglich ist wenn die Flag `-i` gesetzt ist und man per console im container arbeiten müsste. (Siehe Abschnitt Terminal)
- `-v <my_volume_name>:/papermc`
- `-v </path/to/files>:/papermc:Z`
- `-v </path/to/backup>:/Backup:Z`
- Detached
- Dockerspezifischer Parameter um container im Hintergrund laufen zu lassen
- `-d`
- Terminal
- Option für TTY und Interactive mode, mehr dazu kann in der docker doc nachgelesen werden
- `-t` and `-i` in any order
- `-ti` or `-it`
- Restart Policy
- Erklärt sich von selbst, dient zum automatischem neustarten wnn mal irgednwas schief läuft.
- Bitte nur über die minecraftconsole den server stoppen um Fehler insbesondere an der minecraftworld zu vermeiden.
- `--restart on-failure`
- Name
- Dient zum festlegen eines Namens für den Container.
- `--name "<my-container-name>"`
Der letzte Parameter ist etwas umfangreicher und wird unter Environment Variablen erklärt
### Environment Variablen
Um eine Env Variable festzulegen gilt das folgenden Muster: `-e <NAME>="<VALUE>"` where `<NAME>`
Der Platzhalter `<Name>`Wird durch den Namen der Env Variable ersetzt und `<value>` wird mit dem zuzuweisenden Wert ersetzt.
- Minecraft Version
- **Name:** `MC_VERSION`
- Legt die zu verwendene MC-Version fest.
- !Wichtig! Die spezifizierte Version muss auch einen PaperMC Release haben, da sonst der Build fehlschlägt
- [Aktuelle PaperMC-Builds](https://papermc.io/downloads) (Zuletzt 1.16.4)
- `-e MC_VERSION="<latest>"`
- Die Buildnummern (ie. #355) sind normalerweise irrelevant hier kann man es bei latest belassen, falls jedoch ein spezifischer Build verwendet werden soll, lässt sich das durch den Parameter erreichen:
- `-e PAPER_BUILD="<latest>"`
- RAM
- **Name:** `MC_RAM`
- Legt die Speichermenge für java fest. Zahl muss M für Megabytes oder G für Gigabytes enthalten.
- Für die Flags der Java VM die ich aktuell nutze empfielt es sich 6GB minimum zuzuweisen oder maximal 10GB
- `-e MC_RAM="<4G>"`
- Java options
- **Name:** `JAVA_OPTS`
- Javaspezifische Parameter, nur ändern wenn es notwendig ist und man weis was man tut!
- Ausnahme, wenn der Server mit weniger RAM laufen soll eignet es sich hier die für spigot üblichen flags (siehe SpigotMC Docs) einzusetzen um aikars flags zu überschreiben
- Mit genug Erfahrung können auch die Werte von den flags angepasst werden, aber auch hier gilt: Vorsicht nur anpassen wenn man weis was man da tut
- `-e JAVA_OPTS="-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"`
# Befehle
Innerhalb von Minecraft kann per `/backup` der Server gesichert werden.
Zum stoppen des Servers einfach über docker den container stoppen.
Zur Konsole vom Minecraftserver kommt man indem man diesen befehl eingibt: `docker exec -it <container name> /bin/bash`
und danach screen -r mc
# Technical
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.](https://papermc.io/)
## Project Pages des Unsprünglichem Image von Phyremaster:
- [GitHub page](https://github.com/Phyremaster/papermc-docker).
- [Docker Hub page](https://hub.docker.com/r/phyremaster/papermc).
# 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 so modifiziert, dass nur noch ein Befehl genutzt werden muss, um das Image auf einem beliebigen Server zu starten.
## :whale: 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`:
```yaml
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
```
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).
Außerdem müssen noch die folgenden Befehle ausgeführt werden, damit das Docker-Image auch in die Volumes schreiben kann:
```
# 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.
### 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.
## :deciduous_tree: Umgebungsvariablen
Umgebungsvariablen können über `environment` festgelegt werden, z.B. so:
```yaml
...
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](https://papermc.io/downloads) |
| `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 |
### 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
```
## :clipboard: 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
```
## :bug: 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.
## :scales: 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.](https://papermc.io/)
## :books: Weitere Ressourcen
Projektsites des ursprünglichen Images von Phyremaster:
- [GitHub](https://github.com/Phyremaster/papermc-docker)
- [Docker Hub](https://hub.docker.com/r/phyremaster/papermc)
Loading