Updating markdown
4.4 KiB
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:
/data/Saved
Windrose stores all world data here:
/data/Saved/SaveProfiles/Default/RocksDB/0.10.0/Worlds/<WORLD_ID>/
Game Installation Directory
/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:
windrose
Your deployment requires:
windrose.theminisip.ca
Both must resolve to the LAN IP of the TrueNAS host:
192.168.3.41
The entrypoint injects this automatically:
192.168.3.41 windrose windrose.theminisip.ca
This prevents ICE errors such as:
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:
/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:
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/Savedvia RocksDB -nosteamavoids Steam API issues-unattendedprevents 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:
windrose.theminisip.ca
points to your public IP.
Troubleshooting
ICE Errors
If you see:
Cannot resolve addresses for host windrose
Check:
- /etc/hosts mapping
- DNS for windrose.theminisip.ca
- Correct WORLD_ID
World Not Loading
Ensure:
/data/Saved/SaveProfiles/Default/RocksDB/0.10.0/Worlds/<WORLD_ID>/
exists.
DXVK Errors
Non‑fatal — server will still run.
Future Enhancements
- Node.js web manager (deployment, config editing, restarts)
- Multi‑instance orchestration
- World backups & restores
- Metrics dashboard
- Log streaming