Add README.md documenting Windrose dedicated server deployment
This commit is contained in:
@@ -0,0 +1,400 @@
|
|||||||
|
Windrose Dedicated Server — TrueNAS SCALE Deployment Guide
|
||||||
|
|
||||||
|
A fully working configuration for running the Windrose Dedicated Server (Windows build) inside a TrueNAS SCALE container using Wine + DXVK, with persistent saves, explicit world selection, and fixed hostname resolution for ICE/P2P networking.
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
This README documents the exact setup currently running in production.
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
Table of Contents
|
||||||
|
|
||||||
|
Overview
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
Directory Layout
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
Environment Variables
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
Hostname Resolution (ICE/P2P Fix)
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
DXVK Behavior
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
Server Launch Command
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
Entrypoint Behavior Summary
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
Networking Requirements
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
Troubleshooting
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
Future Enhancements
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
Overview
|
||||||
|
|
||||||
|
This deployment runs:
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
Windrose Dedicated Server (Windows build)
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
Inside a TrueNAS SCALE App container
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
Using Wine + DXVK
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
With persistent world saves
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
With explicit WORLD\_ID selection
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
With hostname resolution fixes for ICE/P2P
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
With non‑fatal DXVK installation fallback
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
With stable LAN/WAN connectivity
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
This configuration is confirmed working as of:
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
May 10, 2026
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
Directory Layout
|
||||||
|
|
||||||
|
Persistent Storage
|
||||||
|
|
||||||
|
Mounted into the container:
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
Code
|
||||||
|
|
||||||
|
/data/Saved
|
||||||
|
|
||||||
|
Windrose stores all world data here:
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
Code
|
||||||
|
|
||||||
|
/data/Saved/SaveProfiles/Default/RocksDB/0.10.0/Worlds/<WORLD\_ID>/
|
||||||
|
|
||||||
|
Game Installation Directory
|
||||||
|
|
||||||
|
Code
|
||||||
|
|
||||||
|
/server
|
||||||
|
|
||||||
|
/server/R5
|
||||||
|
|
||||||
|
This is where SteamCMD installs the Windrose server files.
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
Environment Variables
|
||||||
|
|
||||||
|
Set these in the TrueNAS SCALE App → Environment Variables.
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
Required
|
||||||
|
|
||||||
|
Variable Description
|
||||||
|
|
||||||
|
WORLD\_ID Folder name of the world to load. Example: 352359B474804C2A4D83D84AADC7579D
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
Optional
|
||||||
|
|
||||||
|
Variable Default Description
|
||||||
|
|
||||||
|
WINEPREFIX /data/wine/wineprefix Wine prefix location
|
||||||
|
|
||||||
|
SAVED\_DIR /data/Saved Persistent save directory
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
Hostname Resolution (ICE/P2P Fix)
|
||||||
|
|
||||||
|
Windrose internally tries to resolve the hostname:
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
Code
|
||||||
|
|
||||||
|
windrose
|
||||||
|
|
||||||
|
Your deployment requires:
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
Code
|
||||||
|
|
||||||
|
windrose.theminisip.ca
|
||||||
|
|
||||||
|
Both must resolve to the LAN IP of the TrueNAS host:
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
Code
|
||||||
|
|
||||||
|
192.168.3.41
|
||||||
|
|
||||||
|
The entrypoint injects this automatically:
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
bash
|
||||||
|
|
||||||
|
192.168.3.41 windrose windrose.theminisip.ca
|
||||||
|
|
||||||
|
This prevents ICE errors such as:
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
Code
|
||||||
|
|
||||||
|
Cannot resolve addresses for host windrose.
|
||||||
|
|
||||||
|
Error on getting local ICE candidates
|
||||||
|
|
||||||
|
P2pClient is broken
|
||||||
|
|
||||||
|
DXVK Behavior
|
||||||
|
|
||||||
|
DXVK is required even in headless mode.
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
Your container includes:
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
Code
|
||||||
|
|
||||||
|
/opt/dxvk/x32/\*.dll
|
||||||
|
|
||||||
|
/opt/dxvk/x64/\*.dll
|
||||||
|
|
||||||
|
The entrypoint:
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
Runs setup-dxvk.sh if present
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
Falls back to manual DLL copy
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
Logs exit codes
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
Never crashes if DXVK is missing or incomplete
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
This ensures Wine initializes correctly.
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
Server Launch Command
|
||||||
|
|
||||||
|
The server is launched with:
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
bash
|
||||||
|
|
||||||
|
wine WindroseServer-Win64-Shipping.exe \\
|
||||||
|
|
||||||
|
  -log \\
|
||||||
|
|
||||||
|
  -unattended \\
|
||||||
|
|
||||||
|
  -nosteam \\
|
||||||
|
|
||||||
|
  -savedir "Saved" \\
|
||||||
|
|
||||||
|
  -saveprofile Default \\
|
||||||
|
|
||||||
|
  -world "$WORLD\_ID"
|
||||||
|
|
||||||
|
Notes:
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
"Saved" resolves to /server/R5/Saved
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
World data still loads from /data/Saved via RocksDB
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
\-nosteam avoids Steam API issues
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
\-unattended prevents UI prompts
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
Entrypoint Behavior Summary
|
||||||
|
|
||||||
|
The entrypoint:
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
Initializes Wine prefix
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
Installs DXVK (non‑fatal)
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
Injects hostname resolution
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
Validates WORLD\_ID
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
Launches the server
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
This is the exact working version currently deployed.
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
Networking Requirements
|
||||||
|
|
||||||
|
LAN
|
||||||
|
|
||||||
|
Works out of the box.
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
WAN
|
||||||
|
|
||||||
|
Forward these ports:
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
Port Protocol Purpose
|
||||||
|
|
||||||
|
7777 UDP Game traffic
|
||||||
|
|
||||||
|
15000 UDP ICE / P2P
|
||||||
|
|
||||||
|
27015 UDP Query port
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
Ensure Cloudflare DNS for:
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
Code
|
||||||
|
|
||||||
|
windrose.theminisip.ca
|
||||||
|
|
||||||
|
points to your public IP.
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
Troubleshooting
|
||||||
|
|
||||||
|
ICE Errors
|
||||||
|
|
||||||
|
If you see:
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
Code
|
||||||
|
|
||||||
|
Cannot resolve addresses for host windrose
|
||||||
|
|
||||||
|
Check:
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
/etc/hosts mapping
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
DNS for windrose.theminisip.ca
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
Correct WORLD\_ID
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
World Not Loading
|
||||||
|
|
||||||
|
Ensure:
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
Code
|
||||||
|
|
||||||
|
/data/Saved/SaveProfiles/Default/RocksDB/0.10.0/Worlds/<WORLD\_ID>/
|
||||||
|
|
||||||
|
exists.
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
DXVK Errors
|
||||||
|
|
||||||
|
Non‑fatal — server will still run.
|
||||||
|
|
||||||
Reference in New Issue
Block a user