Ein Valheim-Server mit Quadlet
Der Dedicated Server als eine deklarative Datei, die systemd direkt verwaltet
Ein Valheim-Server für den Freundeskreis ist ein Klassiker im Homelab. Das übliche Setup erfordert meistens steamcmd und zusätzlich eine systemd-Unit, damit der Service nach einem Server-Neustart ebenfalls wieder startet. Mit Quadlet von Podman lässt sich das in einer einzigen deklarativen Datei abbilden.

Quadlets
Mit Quadlets werden aus INI-artigen .container-Dateien systemd-Units generiert. Dazu werden die .container-Dateien in /etc/containers/systemd/ (oder ~/.config/containers/systemd/) abgelegt, systemd generiert daraus je eine systemd-Unit – hier also valheim-server.service.
Container, Ports, Volumes, Restart-Policy und Healthcheck stehen zusammen in einem File, das sich versionieren lässt.
valheim-server.container
Die folgende Quadlet-Datei definiert den Service (Passwort und World-ID anonymisiert):
[Unit]
Description=Valheim Server
[Container]
Label=app=valheim-server
Label=homepage.group=Service
Label=homepage.name=Valheim
Label=homepage.icon=steam.png
Label=homepage.widget.type=gamedig
Label=homepage.widget.serverType=valheim
Label=homepage.widget.url=udp://host.containers.internal:2457
ContainerName=valheim-server
Image=ghcr.io/mbround18/valheim:latest
AutoUpdate=registry
Volume=/opt/container/valheim/config:/home/steam/.config/unity3d/IronGate/Valheim
Volume=/opt/container/valheim/data:/home/steam/valheim
PublishPort=2456:2456/udp
PublishPort=2457:2457/udp
PublishPort=2458:2458/udp
Environment=NAME=Valhalla
Environment=PUBLIC=1
Environment=PASSWORD=changeme
Environment=WORLD=myworld
Environment=TZ="Europe/Berlin"
Environment=TYPE=vanilla
Environment=PRESET=Hard
#Optional
#Environment=MODIFIERS="resources=more"
#Environment=SET_KEY=nobuildcost
HealthCmd=/usr/local/bin/odin status --address 127.0.0.1:2457
HealthOnFailure=kill
[Service]
Restart=always
TimeoutStartSec=300
[Install]
WantedBy=multi-user.target
Erläuterung der Einträge
Als Image wird mbround18/valheim verwendet, das den Dedicated Server zusammen mit Odin als Manager bündelt; automatische Updates und World-Backups sind damit bereits enthalten.
AutoUpdate=registry zieht beim nächsten Start das aktuelle Image aus der Registry.
Die beiden Volumes lagern Konfiguration und Weltdaten unter /opt/container/valheim-server/ auf dem Host ab; ein Neustart des Containers verändert sie nicht, die Welt bleibt erhalten.
Der Server hört auf dem UDP-Port 2456 und belegt zusätzlich die Ports 2457 und 2458 – alle drei müssen im Router beziehungsweise Firewall freigegeben werden, damit der Server von außen erreichbar ist.
Die Environment=-Zeilen sind die üblichen Optionen: Name, Passwort, World-ID, Timezone und das Schwierigkeits-Preset.
MODIFIERS und SET_KEY lassen sich bei Bedarf aktivieren.
Über HealthCmd fragt Podman per odin status den Statusport 2457 ab; meldet der Check ein Problem, wird der Container beendet und Restart=always startet ihn neu.
TimeoutStartSec=300 berücksichtigt den allerersten Start, bei dem das Image den Valheim-Server noch aus Steam herunterlädt.
Die Label=homepage.*-Einträge lassen sich für eine Homelab-Homepage nutzen, die aus solchen Labels ein gamedig-Widget erzeugt und live den Status des Servers anzeigt.
Betrieb
Die Datei ablegen, den Generator neu ausführen und die Unit aktivieren:
$ sudo systemctl daemon-reload
$ sudo systemctl enable --now valheim-server.service
$ journalctl -u valheim-server.service -f
Mods, Backups und der Rest sind in der Dokumentation des Images beschrieben.