Die drei Festplatten werden beim Systemstart wie in der Anleitung auf der Seite automatisch entschlüsselt. Unter Debian fehlt
apt install systemd-cryptsetup
Anschließend wird das Btrfs-Dateisystem über einen Eintrag in /etc/fstab unter /mnt/nas eingebunden.
Die Einbindung lässt sich überprüfen mit:
lsblk -f
findmnt /mnt/nas
btrfs filesystem show /mnt/nas
Da Btrfs die drei Festplatten als gemeinsames Dateisystem verwaltet, muss das Dateisystem nur einmal gemountet werden.
2. Dateisystem in Proxmox registrieren (optional)
Damit die Kapazität und Auslastung des Dateisystems in der Proxmox-Weboberfläche angezeigt werden, kann es als Directory Storage hinzugefügt werden:
Datacenter → Storage → Add → Directory
Dabei wird /mnt/nas als Verzeichnis angegeben.
Anschließend kann die Mountpoint-Prüfung aktiviert werden:
pvesm set nas --is_mountpoint yes
nas ist dabei die zuvor vergebene Storage-ID.
Dadurch erkennt Proxmox, wenn das Dateisystem nicht eingebunden ist. Für die Verwendung als LXC-Bind-Mount ist die Registrierung als Proxmox-Storage allerdings nicht erforderlich.
3. Verzeichnisse in LXC-Container einbinden
Die Daten werden nicht auf die virtuellen Festplatten der Container kopiert. Stattdessen nutze ich LXC-Bind-Mounts, um ausgewählte Verzeichnisse direkt bereitzustellen.
Beispielsweise erhält mein Samba-Container mit der ID 104 Zugriff auf meine persönlichen und öffentlichen Dateien:
pct set 104 \
-mp0 /mnt/nas/Arne,mp=/srv/share/Arne \
-mp1 /mnt/nas/Public,mp=/srv/share/Public
Für einen Container mit der ID 105 werden die Medienverzeichnisse schreibbar eingebunden:
pct set 105 \
-mp1 /mnt/nas/Public/Filme,mp=/mnt/nas/Public/Filme \
-mp2 /mnt/nas/Public/Serien,mp=/mnt/nas/Public/Serien
Die Mountpoint-Nummern müssen im jeweiligen Container noch frei sein. Die Konfiguration lässt sich mit
pct config 105
überprüfen.
Nach einem Neustart des Containers stehen die Verzeichnisse unmittelbar zur Verfügung.
4. Berechtigungen für unprivilegierte LXC-Container
Eine Besonderheit sind die Dateiberechtigungen. Da meine LXC-Container unprivilegiert laufen, werden ihre Benutzer-IDs auf andere IDs des Proxmox-Hosts abgebildet.
Standardmäßig gilt beispielsweise:
LXC-UID 0 entspricht Host-UID 100000.
LXC-UID 1000 entspricht Host-UID 101000.
Die vorhandenen Btrfs-Dateien gehören allerdings teilweise der Host-UID 1000. Deshalb werden sie in den Containern zunächst als nobody:nogroup angezeigt.
Um die ursprünglichen Dateieigentümer beizubehalten, verwende ich gezielte POSIX-ACLs. Damit lässt sich beispielsweise dem Samba-Benutzer mit der gemappten Host-UID 101000 Schreibzugriff gewähren:
Bestehende Unterverzeichnisse benötigen gegebenenfalls zusätzliche ACL-Einträge. Die tatsächlich gemappte UID muss für jeden Container und Dienst geprüft werden.
5. Wichtige Hinweise
Außerdem ist zu beachten, dass Proxmox die Inhalte von LXC-Bind-Mounts nicht über das reguläre Container-Backup (vzdump) sichert. Die Daten auf dem Btrfs-Dateisystem benötigen deshalb eine separate Backup-Strategie.
In dieser Anleitung zeige ich, wie man einen eigenen Valheim Dedicated Server in einem Proxmox-LXC-Container mit Ubuntu 24.04 installiert und dauerhaft betreibt.
Der Server wird mithilfe von SteamCMD installiert und über systemd verwaltet. Dadurch startet er automatisch beim Hochfahren des Containers und wird bei einem Absturz selbstständig neu gestartet.
Außerdem zeige ich, wo Valheim seine Spielstände speichert, wie sich die Welten sichern lassen und wie man einen bestehenden Spielstand auf einem neuen Server wiederherstellt.
1. Voraussetzungen
Für diese Anleitung verwenden wir folgende Umgebung:
Proxmox VE als Virtualisierungsplattform
Einen LXC-Container mit Ubuntu 24.04 LTS (64 Bit)
Einen Benutzer namens steam
SteamCMD zur Installation des Valheim-Servers
systemd zur Verwaltung des Servers
Als Ausgangspunkt empfehle ich für einen kleinen privaten Server mindestens 2 CPU-Kerne und 4 GB Arbeitsspeicher. Bei größeren Welten oder mehreren gleichzeitigen Spielern kann mehr Arbeitsspeicher sinnvoll sein.
Alle folgenden Befehle werden direkt im Ubuntu-LXC-Container ausgeführt, sofern nicht ausdrücklich etwas anderes angegeben ist.
2. Ubuntu aktualisieren und benötigte Pakete installieren
Zunächst aktualisieren wir die Paketlisten und die bereits installierten Pakete:
apt update
apt upgrade -y
Für SteamCMD benötigen wir einige zusätzliche Pakete und 32-Bit-Bibliotheken.
Zuerst aktivieren wir die Unterstützung für die i386-Architektur:
dpkg --add-architecture i386
Anschließend installieren wir die benötigten Werkzeuge und Bibliotheken:
SteamCMD meldet sich anonym bei Steam an, lädt die notwendigen Dateien herunter und überprüft die Installation.
Nach erfolgreicher Installation befinden sich die Serverdateien in folgendem Verzeichnis:
/home/steam/valheim-server/
Mit dem Befehl
ls -la /home/steam/valheim-server
können wir den Inhalt überprüfen.
Dort sollte sich unter anderem die ausführbare Datei valheim_server.x86_64 befinden.
5. Eigenes Startskript für Valheim erstellen
Anstatt die mitgelieferte Startdatei zu verändern, erstellen wir ein eigenes Skript. Das hat den Vorteil, dass unsere Konfiguration bei einem Update nicht durch die Originaldatei überschrieben wird.
Die Einstellungen lassen sich an die eigenen Wünsche anpassen:
Parameter
Bedeutung
-name
Öffentlicher Name des Servers
-port
Netzwerkport des Servers
-world
Name der verwendeten Spielwelt
-password
Passwort für den Server
-public 1
Server in der Serverliste anzeigen
Das Serverpasswort muss mindestens fünf Zeichen lang sein. Für einen öffentlich erreichbaren Server sollte ein individuelles, ausreichend sicheres Passwort verwendet werden.
Wer den Server nicht in der öffentlichen Serverliste anzeigen möchte, kann -public 1 auf -public 0 ändern.
Wir speichern das Skript und machen es ausführbar:
User=steam: Der Server läuft mit den Berechtigungen des Steam-Benutzers.
Restart=on-failure: Bei einem Absturz wird der Server automatisch neu gestartet.
RestartSec=15: systemd wartet vor einem Neustart 15 Sekunden.
KillSignal=SIGINT: Beim Stoppen erhält Valheim ein Signal zum kontrollierten Beenden.
TimeoutStopSec=120: Dem Server bleiben bis zu 120 Sekunden, um seine Daten zu speichern und sich zu beenden.
Nun laden wir die systemd-Konfiguration neu:
systemctl daemon-reload
Anschließend aktivieren wir den automatischen Start:
systemctl enable valheim
Und starten den Server:
systemctl start valheim
Ob alles funktioniert, lässt sich mit folgendem Befehl überprüfen:
systemctl status valheim
Bei einem erfolgreich gestarteten Server sollte der Status active (running) angezeigt werden.
Server verwalten
Für die tägliche Verwaltung sind vor allem die folgenden Befehle wichtig:
Server starten:
systemctl start valheim
Server stoppen:
systemctl stop valheim
Server neu starten:
systemctl restart valheim
Serverstatus abfragen:
systemctl status valheim
Server-Logs live anzeigen:
journalctl -u valheim -f
Die Loganzeige kann mit Strg+C beendet werden, ohne dabei den Gameserver zu stoppen.
7. Netzwerk und Firewall konfigurieren
Damit andere Spieler den Server erreichen können, müssen die entsprechenden UDP-Ports freigegeben werden.
Valheim verwendet standardmäßig die Ports 2456 und 2457.
Wer UFW innerhalb des Ubuntu-Containers verwendet, kann die Ports mit folgendem Befehl freigeben:
ufw allow 2456:2457/udp
Zusätzlich müssen gegebenenfalls die Proxmox-Firewall und die Portweiterleitungen des Routers entsprechend konfiguriert werden.
Für einen über das Internet erreichbaren Server leiten wir die UDP-Ports an die IP-Adresse unseres LXC-Containers weiter.
Wer Crossplay über das PlayFab-Backend verwendet, benötigt abhängig von seiner Konfiguration nicht zwingend eine klassische Portweiterleitung. Diese Anleitung verwendet den normalen Steam-Servermodus.
Container in Proxmox automatisch starten
Damit unser Server auch nach einem Neustart des Proxmox-Hosts wieder erreichbar ist, aktivieren wir den Autostart des LXC-Containers.
Dazu öffnen wir die Proxmox-Weboberfläche und navigieren zu:
Container → Optionen → Beim Booten starten
Dort aktivieren wir die entsprechende Option.
Damit startet zuerst der Ubuntu-Container und anschließend unser Valheim-Service.
8. Wo speichert Valheim seine Welten?
Dies ist einer der wichtigsten Punkte, insbesondere für Backups oder eine spätere Migration des Servers.
Die Weltdateien werden standardmäßig nicht im Installationsverzeichnis des Valheim-Servers gespeichert.
Da wir den Server unter dem Benutzer steam betreiben, befinden sich die Spielstände normalerweise in folgendem Verzeichnis:
Eine andere Möglichkeit besteht darin, beim Serverstart mit dem Parameter -savedir einen eigenen Speicherpfad festzulegen. In diesem Fall muss der entsprechend konfigurierte Pfad gesichert werden.
Bei unserer Installation verwenden wir den Standardspeicherort.
Wir können uns den Inhalt des Verzeichnisses mit folgendem Befehl anzeigen lassen:
ls -lah /home/steam/.config/unity3d/IronGate/Valheim/worlds_local/
Für unsere Welt staubington sollten sich dort unter anderem folgende Dateien befinden:
staubington.db
staubington.fwl
Welche Dateien sind wichtig?
staubington.db
Diese Datei enthält die eigentlichen Weltdaten. Dazu gehören beispielsweise die Veränderungen an der Spielwelt, Gebäude und Truhen samt Inhalt.
staubington.fwl
Diese Datei enthält wichtige Metadaten der Welt, insbesondere den Weltnamen und den World-Seed.
Für ein vollständiges Backup sollten immer beide Dateien zusammen gesichert werden.
Valheim legt gegebenenfalls zusätzliche automatische Sicherungen an. Diese befinden sich ebenfalls im Bereich der Weltdaten und können beispielsweise die Endung .db.old oder .fwl.old haben. Weitere automatische Backup-Dateien können mit einem Zeitstempel versehen sein.
Am sichersten ist es deshalb, das gesamte Verzeichnis worlds_local zu sichern.
Wichtig: Die Charaktere der Spieler werden normalerweise auf deren jeweiligen Clients beziehungsweise über Steam Cloud gespeichert. Ein Backup des Dedicated Servers sichert die Welt, nicht automatisch sämtliche Charakterdaten der Spieler.
9. Valheim-Welt manuell sichern
Damit beim Backup keine unvollständig geschriebenen Dateien entstehen, stoppen wir zunächst den Server.
Die folgenden Befehle werden wieder als root ausgeführt.
systemctl stop valheim
Wir erstellen ein separates Backup-Verzeichnis:
mkdir -p /var/backups/valheim
Nun erstellen wir ein komprimiertes Archiv mit dem aktuellen Datum:
tar -czf "/var/backups/valheim/valheim-$(date +%F_%H-%M-%S).tar.gz" \
-C /home/steam/.config/unity3d/IronGate \
Valheim
Das Archiv enthält den Valheim-Datenordner einschließlich der Welten und der dort gespeicherten Konfigurations- beziehungsweise Berechtigungsdateien.
Nach dem Backup starten wir den Server wieder:
systemctl start valheim
Die vorhandenen Backups lassen sich mit folgendem Befehl anzeigen:
ls -lh /var/backups/valheim/
So können wir jederzeit auf ältere Spielstände zurückgreifen.
Auch die Serverkonfiguration sichern
Neben den Weltdaten sollten wir die beiden selbst erstellten Konfigurationsdateien sichern:
Diese Dateien enthalten die Startparameter und die Einstellungen für den automatischen Serverstart.
Der gesamte Server muss dagegen normalerweise nicht gesichert werden, da die eigentlichen Programmdateien jederzeit erneut über SteamCMD heruntergeladen werden können.
Backups außerhalb des Containers speichern
Ein Backup, das ausschließlich im LXC-Container gespeichert wird, schützt nicht vor dem Verlust des gesamten Containers oder des zugrunde liegenden Datenträgers.
Deshalb sollten wichtige Spielstände regelmäßig auf ein externes Laufwerk, ein NAS oder einen anderen Rechner kopiert werden.
Zusätzlich können wir den gesamten LXC-Container über die Backup-Funktionen von Proxmox sichern.
Hierbei ist zu beachten, dass zusätzliche Mountpoints je nach Proxmox-Konfiguration gegebenenfalls nicht im Container-Backup enthalten sind.
Für besonders wichtige Welten verwende ich deshalb zwei Sicherungsarten: ein separates Backup der Valheim-Weltdaten und ein vollständiges Proxmox-Backup des Containers.
10. Valheim-Welt aus einem Backup wiederherstellen
Falls eine Welt beschädigt wird oder wir unseren Valheim-Server auf einen neuen Ubuntu-Container umziehen möchten, können wir die zuvor gesicherten Dateien wiederherstellen.
Wir stoppen zunächst den Server:
systemctl stop valheim
Nun benennen wir das bisherige Valheim-Datenverzeichnis um. So gehen die vorhandenen Daten nicht verloren:
Die wichtigsten Verwaltungsbefehle auf einen Blick:
# Server starten
systemctl start valheim
# Server stoppen
systemctl stop valheim
# Server neu starten
systemctl restart valheim
# Serverstatus anzeigen
systemctl status valheim
# Live-Logs anzeigen
journalctl -u valheim -f
Fazit
Mit einem Ubuntu-LXC-Container unter Proxmox lässt sich ein Valheim Dedicated Server relativ einfach und ressourcenschonend betreiben.
Durch den eigenen Steam-Benutzer, das separate Startskript und den systemd-Service erhalten wir eine übersichtliche Serverinstallation, die sich zuverlässig verwalten lässt.
Für einen langfristigen Betrieb ist allerdings nicht nur die Installation wichtig. Entscheidend ist vor allem, dass die Weltdaten regelmäßig gesichert werden.
Wer den Ordner worlds_local, die Serverkonfiguration und seine Backups sicher aufbewahrt, kann seinen Valheim-Server auch nach einem Defekt oder einer vollständigen Neuinstallation mit der bisherigen Welt wieder in Betrieb nehmen.
sudo apt autoremove --purge snapd
#After that, run the following command so that Ubuntu does not automatically install snapd as an update.
sudo apt-mark hold snapd
#Also, since removing snap will also remove snap-store, you may want to install gnome-software as a GUI app store.
sudo apt install gnome-software --no-install-recommends
1) Boot into your motherboard bios. Turn off secure boot, but enable key management. Delete all existing keys (AFTER YOU MAKE SURE YOU DON’T HAVE BITLOCKER ENCRYPTED DRIVES). Exit and boot into Nobara.
2) Add the sbctl copr to your repositories: sudo dnf copr enable chenxiaolong/sbctl
3) Install sbctl: sudo dnf in sbctl
4) Initialize the key database: sudo sbctl create-keys 5) Enroll microsoft keys: sudo sbctl enroll-keys -m
5) Determine current kernel: uname -r
6) Sign current kernel: sudo sbctl sign -s /boot/vmlinuz-6.19.2-200.nobara.fc43.x86_64
ssh keys auf client erstellen ssh-keygen. inhalt der .pub datei auf dem server an ~/.ssh/authorized_keys einfügen
sudo cp /etc/ssh/sshd_config /etc/ssh/sshd_config.bak
sudo sshd -T
sudo nano /etc/ssh/sshd_config
ListenAddress 192.168.178.0
PermitRootLogin no
MaxAuthTries 3
LoginGraceTime 20
PasswordAuthentication no
PubkeyAuthentication yes
PermitEmptyPasswords no
ChallengeResponseAuthentication no
KerberosAuthentication no
GSSAPIAuthentication no
X11Forwarding no
#AllowAgentForwarding no
#AllowTcpForwarding no
PermitTunnel no
sudo sshd -t
sudo systemctl reload sshd.service
Ein Nginx Installieren. Certbot muss geteilt werden und kann nicht auf beiden Servern laufen. Anscheinend ist es nicht möglich auf beiden Servern ein eiegens Zertifikat zu bekommen.
Eine WM erstellen, Oracle DB installieren, SQLDeveloper runterladen, SQLDeveloper starten.
Verbindung mit der DB herstellen, neuen User erstellen (muss mit C## beginnen und komplett groß geschrieben werden). Alle Rechte und Rollen zuordnen ausser die sys* rollen.
Alls neuer User verbinden. Ansicht->DBA Verbinden. Datapump Import. Assistent Datapump
GRANT READ, WRITE ON DIRECTORY DATA_PUMP_DIR TO C##ARNE;
CREATE OR REPLACE DIRECTORY „DATA_PUMP_DIR“ as ‚C:\tmp\‘;
Tablespaces
SELECT DISTINCT sgm.TABLESPACE_NAME , dtf.FILE_NAME FROM DBA_SEGMENTS sgm JOIN DBA_DATA_FILES dtf ON (sgm.TABLESPACE_NAME = dtf.TABLESPACE_NAME) WHERE sgm.OWNER = ‚C##ARNE‘