Palworld Server mit Docker
Diese Anleitung beschreibt die Erstellung eines Palworld Servers mit Einstellungen und Backup in einem isolierten Docker-Container.
Vorbereitung
Es wird Docker und rsync benötigt.
pacman -Syu docker rsync
apt update
apt install docker.io rsync
Server downloaden
Die Installation des Servers findet im Ordner /srv/docker/containers/steam/palworld/ statt, dieser muss an mehreren Stellen angepasst werden, falls ein anderer Ort gewünscht ist!
mkdir -p /srv/docker/containers/steam/palworld/
chown 1000:1000 /srv/docker/containers/steam/palworld/
docker run --network host --rm -it --name=steamcmd -v /srv/docker/containers/steam/palworld/:/home/steam/Steam/steamapps:rw cm2network/steamcmd /home/steam/steamcmd/steamcmd.sh +login anonymous +app_update 2394010 validate +quit
Server vorbereiten
Einfach eine docker-compose.yml anlegen
Die IP-Adresse (1.2.3.4) durch die öffentliche IP ersetzen und ggf. Port, falls ein anderer gewünscht ist.
version: "3"
services:
palworld-server:
container_name: 'steam_palworld'
hostname: 'palworld-server'
image: 'cm2network/steamcmd'
ports:
- 8211:8211/udp
- 27015:27015/tcp
volumes:
- /srv/docker/containers/steam/palworld/:/home/steam/Steam/steamapps:rw
entrypoint:
- "/home/steam/Steam/steamapps/common/PalServer/PalServer.sh"
# FALLS der Server gelistet werden soll, sonst Zeile löschen
- "EpicApp=PalServer"
# HIER öffentliche IP einsetzen
- "-publicip=1.2.3.4"
# FALLS ein anderer Port genutzt wird, anpassen
- "-publicport=8211"
environment:
PGID: 1000
PUID: 1000
restart: unless-stopped
networks:
default:
ipv4_address: 172.22.25.2
networks:
default:
driver: bridge
ipam:
driver: default
config:
- subnet: 172.22.25.0/24
driver_opts:
com.docker.network.bridge.name: br_steam
Nun muss die Server-Config selbst kopiert werden:
mkdir -p /srv/docker/containers/steam/palworld/common/PalServer/Pal/Saved/Config/
chown -R 1000:1000 /srv/docker/containers/steam/palworld
cp /srv/docker/containers/steam/palworld/common/PalServer/DefaultPalWorldSettings.ini /srv/docker/containers/steam/palworld/common/PalServer/Pal/Saved/Config/LinuxServer/PalWorldSettings.ini
Danach kann die Konfiguration angepasst werden. Informationen zu den Parametern findet man zu genüge im Internet…
Start des Servers
docker-compose up -d
Grundsätzlich loggt der Server kaum etwas und man findet nur Hinweise auf den Kontakt des Steam-Netzwerks, ansonsten bleibt es recht ruhig:
2024-02-01T10:22:44.694623116Z - Existing per-process limit (soft=xxxxx, hard=xxxxx) is enough for us (need only xxxxx)
2024-02-01T10:22:44.694638425Z Increasing per-process limit of core file size to infinity.
2024-02-01T10:22:44.694641135Z - Existing per-process limit (soft=xxxxx, hard=xxxxx) is enough for us (need only xxxxx)
2024-02-01T10:22:44.775042934Z CAppInfoCacheReadFromDiskThread took 0 milliseconds to initialize
2024-02-01T10:22:44.787811558Z Setting breakpad minidump AppID = 2394010
2024-02-01T10:22:44.788494153Z [S_API FAIL] Tried to access Steam interface SteamUser021 before SteamAPI_Init succeeded.
2024-02-01T10:22:44.788499153Z [S_API FAIL] Tried to access Steam interface SteamFriends017 before SteamAPI_Init succeeded.
2024-02-01T10:22:45.224352804Z [S_API FAIL] Tried to access Steam interface STEAMAPPS_INTERFACE_VERSION008 before SteamAPI_Init succeeded.
2024-02-01T10:22:45.279131338Z [S_API FAIL] Tried to access Steam interface SteamNetworkingUtils004 before SteamAPI_Init succeeded.
Backup
Das Skript wird alle 10 Minuten ausgeführt und löscht alte Backups nach 7 Tagen.
Ein einfaches Skript unter /usr/local/bin/backup_palworld.sh
anlegen.
#/bin/bash
# 7 Tage Backups behalten
BACKUP_ROTATE_HOURS="$(( 7 * 24 ))"
BACKUP_DIR="/srv/backup/palworld/"
DATE=$(date +'%Y-%m-%d-%H-%M-%S')
PATH_DST="${BACKUP_DIR}/${DATE}/"
PATH_SRC="/srv/docker/containers/steam/palworld/common/PalServer/Pal/Saved/"
mkdir -p ${BACKUP_DIR}
# kopieren des Backups
rsync -aH "${PATH_SRC}" "${PATH_DST}"
# Zeitstempel auf NOW()
touch "${PATH_DST}"
backup_timeout_minutes="$(( $BACKUP_ROTATE_HOURS * 60 ))"
# alte Backups finden die älter als Rotation sind und löschen
find "${BACKUP_DIR}" -maxdepth 1 -mmin +${backup_timeout_minutes} -exec rm -rv {} \;
Das Skript mmuss noch ausführbar gemacht werden und kann dann im Crontab hinterlegt werden:
chmod 700 /usr/local/bin/backup_palworld.sh
crontab -e
# alle 10 Minuten Backup ausführen
*/10 * * * * /usr/local/bin/backup_palworld.sh