Files
panel/modules/windrose/README.md
T
dbledeez 295eb22826 panel public release
Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
2026-07-15 01:26:41 -07:00

26 lines
1.9 KiB
Markdown

# Windrose — panel-native module
Panel-native Windrose dedicated server running under Wine + Xvfb.
- **Image:** `panel-windrose:latest` — built from `./Dockerfile` (Debian 12 + Wine + Xvfb + tini).
- **Game files:** downloaded by the panel's SteamCMD updater sidecar (app 4129620) into the `panel-<id>-game` named volume. Windrose ships only as a Windows build, so the updater uses `+@sSteamCmdForcePlatformType windows` (declared in `module.yaml` via `platform: windows`).
- **Saves:** `panel-<id>-saves` volume mounted at `/game-saves`; the entrypoint moves `R5/Saved/` from the game install into the save volume on first boot and symlinks it back, so SteamCMD `validate` can't clobber world data.
- **Config:** `ServerDescription.json` lives in the save volume (authoritative) and is symlinked back to the game install path the binary expects. Edit via the Files tab — JSON parsed in-browser; no dedicated Config-tab form yet.
- **RCON:** none. Windrose has no remote admin protocol; the admin console is in-process only. The Console tab streams the UE log.
## Ports
- **7777/udp** — Direct-connect game port (docs refer to this as `DirectConnectionServerPort`).
- **27015/udp** — Steam query (UE5 convention).
Most Windrose peer connectivity runs through Steam NAT punch-through, but the direct port must be reachable for LAN or public-IP clients.
## Updating
Click **Update** in the panel. The SteamCMD sidecar re-validates app 4129620 against the `/game` volume. First install is ~900 MB compressed.
## Known gotchas
- Server binary path isn't documented — the entrypoint probes `/game/WindroseServer.exe`, `/game/R5/Binaries/Win64/WindroseServer.exe`, and `/game/R5/Binaries/WinGDK/WindroseServer.exe`, then falls back to `find` if none match. Check logs on first boot.
- No RCON means the Players tab will stay empty; start/stop state comes from log-line ready-regex + container state.