Files
the_minisip 9de19fceb3 Update README.md
Updating markdown
2026-05-10 18:57:40 -03:00

4.4 KiB
Raw Permalink Blame History

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

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 nonfatal 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/Saved via RocksDB
  • -nosteam avoids Steam API issues
  • -unattended prevents UI prompts

Entrypoint Behavior Summary

The entrypoint:

  1. Initializes Wine prefix
  2. Installs DXVK (nonfatal)
  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/<WORLD_ID>/

exists.

DXVK Errors

Nonfatal — server will still run.


Future Enhancements

  • Node.js web manager (deployment, config editing, restarts)
  • Multiinstance orchestration
  • World backups & restores
  • Metrics dashboard
  • Log streaming