Files
the_minisip 9de19fceb3 Update README.md
Updating markdown
2026-05-10 18:57:40 -03:00

249 lines
4.4 KiB
Markdown
Raw Permalink Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
# 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 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:
```
/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 (nonfatal)
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
Nonfatal — server will still run.
---
## Future Enhancements
- Node.js web manager (deployment, config editing, restarts)
- Multiinstance orchestration
- World backups & restores
- Metrics dashboard
- Log streaming