# 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](#overview) - [Directory Layout](#directory-layout) - [Environment Variables](#environment-variables) - [Hostname Resolution (ICE/P2P Fix)](#hostname-resolution-icep2p-fix) - [DXVK Behavior](#dxvk-behavior) - [Server Launch Command](#server-launch-command) - [Entrypoint Behavior Summary](#entrypoint-behavior-summary) - [Networking Requirements](#networking-requirements) - [Troubleshooting](#troubleshooting) - [Future Enhancements](#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// ``` ### 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/Saved` via RocksDB - `-nosteam` avoids Steam API issues - `-unattended` prevents UI prompts --- ## Entrypoint Behavior Summary The entrypoint: 1. Initializes Wine prefix 2. Installs DXVK (non‑fatal) 3. Injects hostname resolution 4. Validates WORLD_ID 5. 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// ``` 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