Update README.md

Updating markdown
This commit is contained in:
2026-05-10 18:57:40 -03:00
parent de6543acf5
commit 9de19fceb3
+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.
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
---
Directory Layout
Environment Variables
Hostname Resolution (ICE/P2P Fix)
DXVK Behavior
Server Launch Command
Entrypoint Behavior Summary
Networking Requirements
Troubleshooting
Future Enhancements
Overview
## 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
- 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**
---
May 10, 2026
## Directory Layout
Directory Layout
Persistent Storage
### Persistent Storage
Mounted into the container:
Code
```
/data/Saved
```
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/R5
```
This is where SteamCMD installs the Windrose server files.
---
Environment Variables
## 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
---
Optional
Variable Default Description
WINEPREFIX /data/wine/wineprefix Wine prefix location
SAVED\_DIR /data/Saved Persistent save directory
Hostname Resolution (ICE/P2P Fix)
## 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 Behavior
DXVK is required even in headless mode.
Your container includes:
Code
/opt/dxvk/x32/\*.dll
/opt/dxvk/x64/\*.dll
```
/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
- 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
## Server Launch Command
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 \\
&#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
## Entrypoint Behavior Summary
The entrypoint:
Initializes Wine prefix
Installs DXVK (nonfatal)
Injects hostname resolution
Validates WORLD\_ID
Launches the server
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
Networking Requirements
LAN
### LAN
Works out of the box.
WAN
### WAN
Forward these ports:
Port Protocol Purpose
7777 UDP Game traffic
15000 UDP ICE / P2P
27015 UDP Query port
| 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
Troubleshooting
ICE Errors
### ICE Errors
If you see:
Code
```
Cannot resolve addresses for host windrose
```
Check:
- /etc/hosts mapping
- DNS for windrose.theminisip.ca
- Correct WORLD_ID
/etc/hosts mapping
DNS for windrose.theminisip.ca
Correct WORLD\_ID
World Not Loading
### World Not Loading
Ensure:
Code
/data/Saved/SaveProfiles/Default/RocksDB/0.10.0/Worlds/<WORLD\_ID>/
```
/data/Saved/SaveProfiles/Default/RocksDB/0.10.0/Worlds/<WORLD_ID>/
```
exists.
DXVK Errors
### 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