Skip to content
Snippets Groups Projects
Commit 463cfa95 authored by tmueller's avatar tmueller
Browse files

Merge branch 'beta' into 'master'

Beta

See merge request !7
parents 2242bab1 121922c8
No related branches found
Tags 0.2
1 merge request!7Beta
Pipeline #2672 passed
# Base image on OpenJDK 11 JRE
FROM openjdk:11.0-jre-slim
LABEL org.label-schema.name="clspigot-docker"
LABEL org.label-schema.description="Docker Container for an Papermc Server"
LABEL org.label-schema.vcs-url="https://gitlab.cl.uni-heidelberg.de/tmueller/clspigot-docker/"
LABEL maintainer="mueller@tobistech.ovh"
LABEL org.label-schema.schema-version=1.0
LABEL org.label-schema.name="clspigot-docker" \
org.label-schema.description="Docker Container for an Papermc Server" \
org.label-schema.vcs-url="https://gitlab.cl.uni-heidelberg.de/tmueller/clspigot-docker/" \
maintainer="mueller@tobistech.ovh" \
org.label-schema.schema-version=1.0
# Execute all the following instructions in the container as user "root"
USER root
......@@ -24,25 +24,29 @@ ENV MC_VERSION="latest" \
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" \
#Man kann nun auch die guid des eigenen benutzers passen und mus somit nichtmehr die rechte des hostsystems anpassen, bitte die GUID eines non-root users nehmen der an dem speicherort zugriff hat.
GUID=61000 \
TZ=Europe/Berlin
# Copy over the three script files (entrypoint, backup and restore)
COPY papermc.sh /
COPY backup.sh /
COPY restore.sh /
COPY health.sh /
COPY test.sh /
TZ=Europe/Berlin \
TM_BASE_AUTH="tmueller:supercooles_passwort_hier_einfuegen" \
TM_BASE_URL="https://tobistechblog.de/uni/initial.tar.gz"
# Copy over the three script files (entrypoint, backup, restore, helath, test(optional) and crontab
COPY papermc.sh backup.sh restore.sh health.sh test.sh /
COPY crontab /etc/cron.d/backup
# Set Timezone
RUN ln -snf /usr/share/zoneinfo/$TZ /etc/localtime && echo $TZ > /etc/timezone
# Create /papermc and /backup directories
RUN mkdir /papermc /backup
# Create /papermc and /backup directories and /web for the dynmap
RUN mkdir /papermc /backup /web
#sets permission for the cronjobs
RUN chmod 0644 /etc/cron.d/backup
#starts the service for cron
# Add papermc user and group, then change ownership of /papermc and /backup to this user
RUN groupadd -g ${GUID} ${papermc_group}
RUN useradd -g ${GUID} -l -M -s /bin/false -u ${GUID} ${papermc_user}
RUN chown -R ${papermc_user} /papermc
RUN chown -R ${papermc_user} /backup
# Add papermc user and group, then change ownership of /papermc and /backup to this user
RUN groupadd -g ${GUID} ${papermc_group}
RUN useradd -g ${GUID} -l -M -s /bin/false -u ${GUID} ${papermc_user}
RUN chown -R ${GUID} /papermc/
RUN chown -R ${GUID} /backup/
# Get package lists, install needed packages, then remove the package lists again (to save space)
# "webp" is needed to generate images with better compression for the dynamic map (optional, needs further configuration in dynmap-plugin´s config file)
......@@ -55,8 +59,9 @@ RUN apt-get update && apt-get install -y \
jq \
screen \
webp \
&& rm -rf /var/lib/apt/lists/*
nano \
&& rm -rf /var/lib/apt/lists/* \
service cron start
# Execute all following commands as the papermc user
USER $papermc_user
......@@ -70,6 +75,8 @@ HEALTHCHECK --interval=10s --timeout=10s --start-period=30s \
# Container setup, specifies needed ports. May be adjusted or overwritten if plugins need other ports
EXPOSE 25565/tcp
EXPOSE 25565/udp
#Specifies the datastructure in the container
VOLUME /papermc
VOLUME /backup
VOLUME /web
# TODOs (Next Merge request)
- [ ] Automatisierung des testscripts, evtl in git so integrieren damit wenn alle essentiellen tests bestanden sind
und ein Approval gegeben ist automatisch in meinem branch played-around gemerged werden (if possible)
- [ ]
und ein Approval gegeben ist automatisch gemerged werden (if possible)
- [x] Backupscript unabhängig von essentials machen
- [x] Alternative Übergangslösung zum verwalten der minecraft configs falls container ohne bind-mounts erstellt wird (z.B. nano)
- [ ] Dokumentation mit Struktur (z.B. docs/user docs/admin etc)
# Future Plans
- [ ] Entwikclung einer Weboberfläche für einfache administration (Jedoch keine klassische Ready-to-buy-Lösung sondern eine minimalistische effiziente Variante
In erster Linie für Verwaltung von Spielinternen dingen wie z.B. Rechteverwaltung, Spielerliste, Banliste, evtl Aktuelle Auslastung etc
- [ ] Automatische Pluginupdates
- [ ]
- [ ]
- [ ]
- [ ] inkrementelle Backups zur Effizienteren Speicherplatzbelegung
- [ ]
......
......@@ -2,7 +2,7 @@
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.
Dieses Image basiert auf der Arbeit von https://github.com/Phyremaster/papermc-docker und wurde um Sicherheitsanpassungen und weiteren Funktionen erweitert.
## :whale: Setup mit Docker
......@@ -80,12 +80,26 @@ Der Platzhalter `NAME_DER_VARIABLE` wird durch den Namen der Umgebungsvariable e
| `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
```
## :floppy_disk: 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.
## :clipboard: Befehle
......@@ -131,6 +145,10 @@ In diesem Fall stürzt der Minecraft-Server immer wieder ab und wird direkt dana
## :books: 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:
- [GitHub](https://github.com/Phyremaster/papermc-docker)
......
......@@ -10,8 +10,10 @@ dateformat=$(date +%F_%H)UTC$ext
else
mkdir -p $backupdir
fi
tar -czvf $backupdir$dateformat --exclude="plugins/dynmap/web/tiles" --exclude="cache/" --exclude="*.gz" --exclude="spigo*.jar" --exclude="paper*.jar" *
chmod +rw $backupdir$dateformat
screen -r mc -p 0 -X stuff "save-off^M" #Sends an input to screen-session conatining the papermc-server to disable world saving from minecraft
tar -czf $backupdir$dateformat --exclude="plugins/dynmap/web/tiles" --exclude="cache/" --exclude="*.gz" --exclude="spigo*.jar" --exclude="paper*.jar" papermc/* #creates a compressed tarball of the minecraft folder
screen -r mc -p 0 -X stuff "save-on^M" #enables it again
chmod +rw $backupdir$dateformat
echo "Backup complete."
exit 0
\ No newline at end of file
30 7 * * * /papermc/backup.sh
# Fachschaftsminecraftserver Dokumentation
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.
## (emoji_spacer)
\ No newline at end of file
......@@ -2,8 +2,6 @@
# Configuration
PAPER_URL=https://papermc.io/api/v2/projects/paper
TM_BASE_AUTH=tmueller:supercooles_passwort_hier_einfuegen
TM_BASE_URL=https://tobistechblog.de/uni/initial.tar.gz
# Enter server directory
cd /papermc
......@@ -43,11 +41,11 @@ if [ ! -e ${JAR_NAME} ]
fi
# Download base plugins, worlds and configuration by Tobias Müller
#if [ ! -d "plugins" ]
# then
# curl -u ${TM_BASE_AUTH} ${TM_BASE_URL} --output initial.tar.gz
# tar -xvzf initial.tar.gz
#fi
if [ ! -d "plugins" ]
then
curl -u ${TM_BASE_AUTH} ${TM_BASE_URL} --output initial.tar.gz
tar -xvzf initial.tar.gz
fi
exec_stop () {
echo "\n## Recieved SIGINT/SIGTERM; Shutting down container..."
......
#!/bin/bash
#script zum wiederherstellen eines backups
cd /backups
cd /backup
ls -l
read -p "Gib das auszuwählende backup ein ohne Dateiendung: " var
echo "Alle Daten werden nach bestätigung gelöscht und das ausgewählte Backup wiederhergestellt."
read
rm -r /papermc/*
tar xvzf $var.tar.gz --directory=/papermc
echo
......@@ -9,9 +9,8 @@ if [ $? = 1 ]
echo "Health: Test_Passed"
fi
screen -r mc -p 0 -X stuff "backup^M"
echo "Give it some time to start the backup process..."
sleep 10
bash /backup.sh
LEER="true" && ls /backup/* 2> /dev/null > /dev/null && LEER="false"
if [ $LEER = "true" ]
then
......@@ -20,8 +19,19 @@ if [ $LEER = "true" ]
echo "Backup: Test_Passed"
fi
echo "Log for additional uncatched Problems"
tail /papermc/logs/latest.log
echo "Optionale Tests:"
echo "Backup Job in cron found?"
cat /etc/cron.d/backup
ls -lanR /papermc/plugins/dynmap/web/standalone
\ No newline at end of file
if [ -d "/papermc/plugins/dynmap/web/standanlone" ]
then
echo "Dynmap exists: Test_Passed"
echo "Check permissions manually:"
ls -lanR /papermc/plugins/dynmap/web/standalone
else
echo "Backup: Test_Failed"
echo "Dynmap nicht vorhanden"
fi
\ No newline at end of file
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment