From 9de19fceb33a9c430df68d2b8eae1345d8e00617 Mon Sep 17 00:00:00 2001 From: the_minisip Date: Sun, 10 May 2026 18:57:40 -0300 Subject: [PATCH] Update README.md Updating markdown --- README.md | 402 +++++++++++++++++------------------------------------- 1 file changed, 125 insertions(+), 277 deletions(-) diff --git a/README.md b/README.md index 4ef46c6..c11f271 100644 --- a/README.md +++ b/README.md @@ -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 non‑fatal 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 non‑fatal 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// +``` +### Game Installation Directory -Code - -/data/Saved/SaveProfiles/Default/RocksDB/0.10.0/Worlds// - -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 \\ +--- - -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 +## Entrypoint Behavior Summary The entrypoint: - - -Initializes Wine prefix - - - -Installs DXVK (non‑fatal) - - - -Injects hostname resolution - - - -Validates WORLD\_ID - - - -Launches the server - - +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 -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// +``` +/data/Saved/SaveProfiles/Default/RocksDB/0.10.0/Worlds// +``` exists. - - -DXVK Errors +### 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