Files
windrose-servermanager/README.md
T

3.7 KiB
Raw 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

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 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:

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 (nonfatal)

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

Nonfatal — server will still run.