Windrose ist ein Windows-only Dedicated Server -- es gibt keine native Linux-Version. Trotzdem läuft er dank Wine problemlos in Docker. Headless, ohne GUI, automatisch.
Das Ganze basiert auf meinem Steam Game Server Framework. Hier findest du alles was du brauchst um deinen eigenen Windrose Server aufzusetzen.
Quick Start
Erstell dir einen Ordner und leg eine docker-compose.yml an:
mkdir windrose-server && cd windrose-server
services:windrose:
# Docker Hub:
image: rndmjoker/gameserver-steam-windrose:latest
# Alternativ von GitHub Container Registry:
# image: ghcr.io/rndmjoker/gameserver-steam-windrose:latest
container_name: windrose-server
restart: unless-stopped
network_mode: host
security_opt:
- seccomp=unconfined
mem_limit: 8g
volumes:
- serverdata:/home/steam/serverdata
- serverconfig:/home/steam/serverconfig
environment:
- AUTOBACKUP=true
- GAME_PORT=7777
- GAME_ARGS=-log -nullrhi
- MaxPlayerCount=4
- UserSelectedRegion=EU
- UseDirectConnection=true
- DirectConnectionServerPort=7777
- WorldName=The Archipelago
- WorldPresetType=Medium
volumes:serverdata:serverconfig:
docker compose up -d
docker compose logs -f
Der erste Start dauert etwas länger -- SteamCMD lädt den Server runter (~3 GB), danach wird das Wine Prefix initialisiert (Mono/Gecko). Ab dem zweiten Start geht das deutlich schneller.
Alternativ mit docker run
docker run -d \
--name windrose-server \
--restart unless-stopped \
--network host \
--security-opt seccomp=unconfined \
--memory 8g \
-e AUTOBACKUP=true \
-e GAME_PORT=7777 \
-e GAME_ARGS="-log -nullrhi" \
-e MaxPlayerCount=4 \
-e UserSelectedRegion=EU \
-e UseDirectConnection=true \
-e DirectConnectionServerPort=7777 \
-e WorldName="The Archipelago" \
-e WorldPresetType=Medium \
-v serverdata:/home/steam/serverdata \
-v serverconfig:/home/steam/serverconfig \
rndmjoker/gameserver-steam-windrose:latest
Technische Details
| Eigenschaft | Wert |
|---|---|
| Steam App ID | 4129620 |
| Plattform | Windows (über Wine 11.0) |
| Standard-Port | 7777/udp + 7777/tcp |
| RAM-Empfehlung | 8 GB |
| Server-Binary | R5/Binaries/Win64/WindroseServer-Win64-Shipping.exe |
| Startargumente | -log -nullrhi (headless, ohne Rendering) |
Warum -nullrhi?
Windrose basiert auf Unreal Engine 5. Ohne -nullrhi versucht der Server ein Rendering-Interface zu starten -- das schlägt in einer headless Docker-Umgebung fehl. -nullrhi schaltet das ab, -log schreibt die Ausgabe in die Konsole.
Netzwerk
Der Server läuft im Host Network Mode.
| Port | Protokoll | Beschreibung |
|---|---|---|
| 7777 | UDP + TCP | Game Port (Spieler-Verbindungen) |
Wenn du eine externe Firewall hast, musst du Port 7777 dort für UDP und TCP freischalten.
Direct Connection
Windrose unterstützt zwei Verbindungsarten: Einladungscodes und Direct Connection über IP. Für einen Dedicated Server solltest du Direct Connection aktivieren:
- UseDirectConnection=true- DirectConnectionServerAddress=0.0.0.0- DirectConnectionServerPort=7777- DirectConnectionProxyAddress=0.0.0.0
Spieler verbinden sich dann direkt über deine Server-IP und Port 7777.
Konfiguration
Der komplette Server wird über Environment Variables konfiguriert. Du musst keine Config-Dateien bearbeiten -- alles was du ändern willst, packst du einfach als -e VARIABLE=wert in dein docker run oder in die environment:-Sektion deiner docker-compose.yml. Die Konfigurationsdatei (ServerDescription.json) wird daraus bei jedem Container-Start automatisch generiert.
Im Quick Start oben siehst du ein Minimalbeispiel. Die fertige docker-compose.yml und die .env.example mit allen Parametern findest du im GitHub Repo.
Hier alle verfügbaren Settings:
Server-Grundlagen
| Variable | Standard | Beschreibung |
|---|---|---|
| ServerName | My Windrose Server | Servername |
| MaxPlayerCount | 4 | Maximale Spielerzahl |
| Password | (leer) | Passwort zum Beitreten |
| UserSelectedRegion | EU | Region des Servers |
| GAME_PORT | 7777 | Game Port |
| GAME_ARGS | -log -nullrhi | Startargumente |
| AUTOBACKUP | true | Automatisches Backup der Saves bei jedem Container-Start (letzte 5) |
Direct Connection
| Variable | Standard | Beschreibung |
|---|---|---|
| UseDirectConnection | true | Direct Connect aktivieren |
| DirectConnectionServerAddress | 0.0.0.0 | Bind-Adresse |
| DirectConnectionServerPort | 7777 | Verbindungsport |
| DirectConnectionProxyAddress | 0.0.0.0 | Proxy-Adresse |
Welt-Einstellungen
| Variable | Standard | Beschreibung |
|---|---|---|
| WorldName | The Archipelago | Name der Welt |
| WorldPresetType | Medium | Voreinstellung (Easy, Medium, Hard) |
Schwierigkeit
| Variable | Standard | Beschreibung |
|---|---|---|
| MobHealthMultiplier | 1.0 | Gegner-Lebenspunkte |
| MobDamageMultiplier | 1.0 | Gegner-Schaden |
| ShipsHealthMultiplier | 1.0 | Schiffs-Lebenspunkte |
| ShipsDamageMultiplier | 1.0 | Schiffs-Schaden |
| BoardingDifficultyMultiplier | 1.0 | Enterungsschwierigkeit |
| CoopStatsCorrectionModifier | 1.0 | Coop-Stat-Korrektur |
| CoopShipStatsCorrectionModifier | 0.0 | Coop-Schiff-Korrektur |
| CombatDifficulty | Normal | Kampfschwierigkeit (Easy, Normal, Hard) |
| SharedQuests | true | Geteilte Quests |
| EasyExplore | false | Vereinfachte Erkundung |
Selbst bauen
git clone https://github.com/RndmJoker/gameserver-steam-windrose.git steam-windrose
cd steam-windrose
cp .env.example .env
nano .env
docker compose up -d --build
Server verwalten
Logs anschauen
docker compose logs -f
Neustart
docker compose restart
Server stoppen
docker compose down
Schneller Neustart (Update überspringen)
- SKIP_STEAM_UPDATE=true
Volumes und Backups
Alle Serverdaten werden in Docker-Volumes gespeichert und bleiben bei Neustarts und Rebuilds erhalten.
| Volume | Container-Pfad | Inhalt |
|---|---|---|
serverdata |
/home/steam/serverdata |
Spieldateien, Saves, Logs, Backups |
serverconfig |
/home/steam/serverconfig |
Config-Templates |
Wichtige Verzeichnisse in serverdata
| Pfad | Inhalt |
|---|---|
R5/ServerDescription.json |
Server-Konfiguration (Name, Passwort, Invite-Code) |
R5/Saved/SaveProfiles/Default/RocksDB_v2/ |
Welt-Saves (RocksDB-Datenbank) |
R5/Saved/SaveProfiles/Default/RocksDB_v2_Backups/ |
Spielinterne automatische Backups |
R5/Saved/Logs/ |
UE5-Game-Logs (R5.log) |
backups/ |
Docker-Auto-Backup-Snapshots (mit Zeitstempel) |
Automatisches Backup
Der Container erstellt bei jedem Start automatisch ein Backup der Welt-Saves, wenn AUTOBACKUP=true (Standard).
Backups sind mit Zeitstempel versehen und die letzten 5 werden aufbewahrt. Aeltere werden automatisch geloescht.
Bind-Mount fuer direkten Host-Zugriff
Fuer direkten Zugriff auf Saves, Logs oder Backups auf dem Host:
volumes:
- serverdata:/home/steam/serverdata
- serverconfig:/home/steam/serverconfig
- ./saves:/home/steam/serverdata/R5/Saved/SaveProfiles
- ./logs:/home/steam/serverdata/R5/Saved/Logs
- ./backups:/home/steam/serverdata/backups
Manuelles Backup
docker cp windrose-server:/home/steam/serverdata/R5/Saved ./windrose-backup-$(date +%Y%m%d)
Troubleshooting
Server startet nicht
Prüf die Logs:
docker logs windrose-server 2>&1 | tail -50
Häufige Ursachen:
Nicht genug RAM -- mindestens 8 GB
Wine Prefix nicht initialisiert -- beim ersten Start ist das normal, einfach warten
"fixme:" Meldungen in den Logs
Das sind Wine-Debug-Meldungen und völlig normal. Die können ignoriert werden. Die relevanten Meldungen kommen vom Framework selbst und sind mit Zeitstempeln markiert.
Spieler können nicht beitreten
Server läuft?
docker ps | grep windrosePort offen?
ss -tulnp | grep 7777Direct Connection aktiviert?
UseDirectConnection=trueFirewall? Port
7777muss für UDP und TCP offen sein
Server-Config wird nicht angewendet
Die ServerDescription.json wird bei jedem Start aus deinen Environment Variables neu generiert. Wenn du Settings änderst, einfach den Container neu starten:
docker compose restart
Links
Docker Hub: hub.docker.com/r/rndmjoker/gameserver-steam-windrose
Offizielle Windrose Doku: playwindrose.com/dedicated-server-guide
Framework: Steam Game Server Framework
Wenn du Fragen hast oder Hilfe brauchst, schreib mir über das Kontaktformular.