1 Commits

Author SHA1 Message Date
the_minisip 9de19fceb3 Update README.md
Updating markdown
2026-05-10 18:57:40 -03:00
+125 -277
View File
@@ -1,400 +1,248 @@
Windrose Dedicated Server — TrueNAS SCALE Deployment Guide # 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. 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. This README documents the exact setup currently running in production.
---
## Table of Contents
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 ---
## 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: This deployment runs:
- Windrose Dedicated Server (Windows build)
- Inside a TrueNAS SCALE App container
Windrose Dedicated Server (Windows build) - Using Wine + DXVK
- With persistent world saves
- With explicit WORLD_ID selection
- With hostname resolution fixes for ICE/P2P
Inside a TrueNAS SCALE App container - With nonfatal DXVK installation fallback
- With stable LAN/WAN connectivity
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: This configuration is confirmed working as of:
**May 10, 2026**
---
May 10, 2026 ## Directory Layout
### Persistent Storage
Directory Layout
Persistent Storage
Mounted into the container: Mounted into the container:
```
Code
/data/Saved /data/Saved
```
Windrose stores all world data here: Windrose stores all world data here:
```
/data/Saved/SaveProfiles/Default/RocksDB/0.10.0/Worlds/<WORLD_ID>/
```
### Game Installation Directory
Code ```
/data/Saved/SaveProfiles/Default/RocksDB/0.10.0/Worlds/<WORLD\_ID>/
Game Installation Directory
Code
/server /server
/server/R5 /server/R5
```
This is where SteamCMD installs the Windrose server files. This is where SteamCMD installs the Windrose server files.
---
## Environment Variables
Environment Variables
Set these in the TrueNAS SCALE App → 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` |
Required ### Optional
Variable Description | Variable | Default | Description |
|--------------|---------------------------|-------------|
| WINEPREFIX | /data/wine/wineprefix | Wine prefix location |
| SAVED_DIR | /data/Saved | Persistent save directory |
WORLD\_ID Folder name of the world to load. Example: 352359B474804C2A4D83D84AADC7579D ---
## Hostname Resolution (ICE/P2P Fix)
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 internally tries to resolve the hostname:
```
Code
windrose windrose
```
Your deployment requires: Your deployment requires:
```
Code
windrose.theminisip.ca windrose.theminisip.ca
```
Both must resolve to the LAN IP of the TrueNAS host: Both must resolve to the LAN IP of the TrueNAS host:
```
Code
192.168.3.41 192.168.3.41
```
The entrypoint injects this automatically: The entrypoint injects this automatically:
```
bash
192.168.3.41 windrose windrose.theminisip.ca 192.168.3.41 windrose windrose.theminisip.ca
```
This prevents ICE errors such as: This prevents ICE errors such as:
```
Code
Cannot resolve addresses for host windrose. Cannot resolve addresses for host windrose.
Error on getting local ICE candidates Error on getting local ICE candidates
P2pClient is broken P2pClient is broken
```
DXVK Behavior ---
## DXVK Behavior
DXVK is required even in headless mode. DXVK is required even in headless mode.
Your container includes: Your container includes:
```
/opt/dxvk/x32/*.dll
Code /opt/dxvk/x64/*.dll
```
/opt/dxvk/x32/\*.dll
/opt/dxvk/x64/\*.dll
The entrypoint: The entrypoint:
- Runs setup-dxvk.sh if present
- Falls back to manual DLL copy
Runs setup-dxvk.sh if present - Logs exit codes
- Never crashes if DXVK is missing or incomplete
Falls back to manual DLL copy
Logs exit codes
Never crashes if DXVK is missing or incomplete
This ensures Wine initializes correctly. This ensures Wine initializes correctly.
---
## Server Launch Command
Server Launch Command
The server is launched with: The server is launched with:
```
wine WindroseServer-Win64-Shipping.exe \
-log \
-unattended \
-nosteam \
-savedir "Saved" \
-saveprofile Default \
-world "$WORLD_ID"
```
### Notes
bash - `"Saved"` resolves to `/server/R5/Saved`
- World data still loads from `/data/Saved` via RocksDB
- `-nosteam` avoids Steam API issues
- `-unattended` prevents UI prompts
wine WindroseServer-Win64-Shipping.exe \\ ---
&#x20; -log \\ ## Entrypoint Behavior Summary
&#x20; -unattended \\
&#x20; -nosteam \\
&#x20; -savedir "Saved" \\
&#x20; -saveprofile Default \\
&#x20; -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: The entrypoint:
1. Initializes Wine prefix
2. Installs DXVK (nonfatal)
Initializes Wine prefix 3. Injects hostname resolution
4. Validates WORLD_ID
5. Launches the server
Installs DXVK (nonfatal)
Injects hostname resolution
Validates WORLD\_ID
Launches the server
This is the exact working version currently deployed. This is the exact working version currently deployed.
---
## Networking Requirements
Networking Requirements ### LAN
LAN
Works out of the box. Works out of the box.
### WAN
WAN
Forward these ports: Forward these ports:
| Port | Protocol | Purpose |
|------|----------|----------|
Port Protocol Purpose | 7777 | UDP | Game traffic |
| 15000 | UDP | ICE / P2P |
7777 UDP Game traffic | 27015 | UDP | Query port |
15000 UDP ICE / P2P
27015 UDP Query port
Ensure Cloudflare DNS for: Ensure Cloudflare DNS for:
```
Code
windrose.theminisip.ca windrose.theminisip.ca
```
points to your public IP. points to your public IP.
---
## Troubleshooting
Troubleshooting ### ICE Errors
ICE Errors
If you see: If you see:
```
Code
Cannot resolve addresses for host windrose Cannot resolve addresses for host windrose
```
Check: Check:
- /etc/hosts mapping
- DNS for windrose.theminisip.ca
- Correct WORLD_ID
### World Not Loading
/etc/hosts mapping
DNS for windrose.theminisip.ca
Correct WORLD\_ID
World Not Loading
Ensure: Ensure:
```
/data/Saved/SaveProfiles/Default/RocksDB/0.10.0/Worlds/<WORLD_ID>/
Code ```
/data/Saved/SaveProfiles/Default/RocksDB/0.10.0/Worlds/<WORLD\_ID>/
exists. exists.
### DXVK Errors
DXVK Errors
Nonfatal — server will still run. Nonfatal — server will still run.
---
## Future Enhancements
- Node.js web manager (deployment, config editing, restarts)
- Multiinstance orchestration
- World backups & restores
- Metrics dashboard
- Log streaming