9de19fceb3
Updating markdown
249 lines
4.4 KiB
Markdown
249 lines
4.4 KiB
Markdown
# 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/<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 (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/<WORLD_ID>/
|
||
```
|
||
|
||
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
|