BR-HostingBR-HostingBR-Hosting
Content
Contact
Legal Notice·Privacy Policy·Content·Contact·
© 2026 Tobias Brunnauerv0.6.3

Inhaltsverzeichnis

      • Windrose Dedicated Server in Docker
      • Palworld Dedicated Server in Docker
Back to Documentation
Documentation/ Gameserver

Windrose Dedicated Server in Docker

Dockerized Windrose dedicated server. Windows server running headless via Wine. Fully automated setup, update, and configuration via environment variables. Just pull and run.

Published on May 3, 2026·4 min read
dockerlinuxservergameserverwindowswine

Windrose is a Windows-only dedicated server -- there's no native Linux version. But thanks to Wine, it runs perfectly fine in Docker. Headless, no GUI, fully automated.

It's built on my Steam Game Server Framework. Here's everything you need to set up your own Windrose server.


Quick Start

Create a directory and add a docker-compose.yml:

mkdir windrose-server && cd windrose-server
services:windrose:
    # Docker Hub:
    image: rndmjoker/gameserver-steam-windrose:latest
    # Alternativ von GitHub Container Registry:
    # image: ghcr.io/rndmjoker/gameserver-steam-windrose:latest
    container_name: windrose-server
    restart: unless-stopped
    network_mode: host
    security_opt:
      - seccomp=unconfined
    mem_limit: 8g
    volumes:
      - serverdata:/home/steam/serverdata
      - serverconfig:/home/steam/serverconfig
    environment:
      - AUTOBACKUP=true
      - GAME_PORT=7777
      - GAME_ARGS=-log -nullrhi
      - MaxPlayerCount=4
      - UserSelectedRegion=EU
      - UseDirectConnection=true
      - DirectConnectionServerPort=7777
      - WorldName=The Archipelago
      - WorldPresetType=Medium

volumes:serverdata:serverconfig:
docker compose up -d
docker compose logs -f

The first start takes a bit longer -- SteamCMD downloads the server (~3 GB), then the Wine prefix gets initialized (Mono/Gecko). From the second start onwards it's much faster.

Alternative with docker run

docker run -d \
  --name windrose-server \
  --restart unless-stopped \
  --network host \
  --security-opt seccomp=unconfined \
  --memory 8g \
  -e AUTOBACKUP=true \
  -e GAME_PORT=7777 \
  -e GAME_ARGS="-log -nullrhi" \
  -e MaxPlayerCount=4 \
  -e UserSelectedRegion=EU \
  -e UseDirectConnection=true \
  -e DirectConnectionServerPort=7777 \
  -e WorldName="The Archipelago" \
  -e WorldPresetType=Medium \
  -v serverdata:/home/steam/serverdata \
  -v serverconfig:/home/steam/serverconfig \
  rndmjoker/gameserver-steam-windrose:latest

Technical Details

Property Value
Steam App ID 4129620
Platform Windows (via Wine 11.0)
Default Port 7777/udp + 7777/tcp
RAM Recommendation 8 GB
Server Binary R5/Binaries/Win64/WindroseServer-Win64-Shipping.exe
Start Arguments -log -nullrhi (headless, no rendering)

Why -nullrhi?

Windrose is built on Unreal Engine 5. Without -nullrhi the server tries to start a rendering interface -- which fails in a headless Docker environment. -nullrhi disables that, -log writes output to the console.


Networking

The server runs in host network mode.

Port Protocol Description
7777 UDP + TCP Game port (player connections)

If you have an external firewall, you need to open port 7777 for both UDP and TCP.

Direct Connection

Windrose supports two connection methods: invite codes and direct connection via IP. For a dedicated server you should enable direct connection:

- UseDirectConnection=true
- DirectConnectionServerAddress=0.0.0.0
- DirectConnectionServerPort=7777
- DirectConnectionProxyAddress=0.0.0.0

Players then connect directly via your server IP and port 7777.


Configuration

The entire server is configured via environment variables. You don't need to edit any config files -- anything you want to change, you just add as -e VARIABLE=value to your docker run or in the environment: section of your docker-compose.yml. The config file (ServerDescription.json) is generated from these variables on every container start.

The Quick Start above shows a minimal example. The complete docker-compose.yml and the .env.example with all parameters are in the GitHub repo.

Here are all available settings:

Server Basics

Variable Default Description
ServerName My Windrose Server Server name
MaxPlayerCount 4 Max players
Password (empty) Password to join
UserSelectedRegion EU Server region
GAME_PORT 7777 Game port
GAME_ARGS -log -nullrhi Start arguments
AUTOBACKUP true Auto-backup saves on every container start (keeps last 5)

Direct Connection

Variable Default Description
UseDirectConnection true Enable direct connect
DirectConnectionServerAddress 0.0.0.0 Bind address
DirectConnectionServerPort 7777 Connection port
DirectConnectionProxyAddress 0.0.0.0 Proxy address

World Settings

Variable Default Description
WorldName The Archipelago World name
WorldPresetType Medium Preset (Easy, Medium, Hard)

Difficulty

Variable Default Description
MobHealthMultiplier 1.0 Enemy health
MobDamageMultiplier 1.0 Enemy damage
ShipsHealthMultiplier 1.0 Ship health
ShipsDamageMultiplier 1.0 Ship damage
BoardingDifficultyMultiplier 1.0 Boarding difficulty
CoopStatsCorrectionModifier 1.0 Coop stat correction
CoopShipStatsCorrectionModifier 0.0 Coop ship correction
CombatDifficulty Normal Combat difficulty (Easy, Normal, Hard)
SharedQuests true Shared quests
EasyExplore false Simplified exploration

Build from Source

git clone https://github.com/RndmJoker/gameserver-steam-windrose.git steam-windrose
cd steam-windrose
cp .env.example .env
nano .env
docker compose up -d --build

Server Management

View logs

docker compose logs -f

Restart

docker compose restart

Stop the server

docker compose down

Fast restart (skip update)

- SKIP_STEAM_UPDATE=true

Volumes and Backups

All server data persists in Docker volumes across restarts and rebuilds.

Volume Container Path Contents
serverdata /home/steam/serverdata Game files, save games, logs, backups
serverconfig /home/steam/serverconfig Config templates

Important directories inside serverdata

Path Contents
R5/ServerDescription.json Server config (name, password, invite code)
R5/Saved/SaveProfiles/Default/RocksDB_v2/ World saves (RocksDB database)
R5/Saved/SaveProfiles/Default/RocksDB_v2_Backups/ Game-internal automatic backups
R5/Saved/Logs/ UE5 game logs (R5.log)
backups/ Docker auto-backup snapshots (timestamped)

Automatic backup

The container automatically backs up world saves on every start when AUTOBACKUP=true (default).
Backups are timestamped and the last 5 are kept. Older backups are removed automatically.

Bind-mount for direct host access

If you want direct access to saves, logs, or backups on the host:
volumes:
- serverdata:/home/steam/serverdata
- serverconfig:/home/steam/serverconfig
- ./saves:/home/steam/serverdata/R5/Saved/SaveProfiles
- ./logs:/home/steam/serverdata/R5/Saved/Logs
- ./backups:/home/steam/serverdata/backups

Manual backup

docker cp windrose-server:/home/steam/serverdata/R5/Saved ./windrose-backup-$(date +%Y%m%d)

Troubleshooting

Server won't start

Check the logs:

docker logs windrose-server 2>&1 | tail -50

Common causes:

  • Not enough RAM -- at least 8 GB required
  • Wine prefix not initialized -- normal on first start, just wait

"fixme:" messages in the logs

These are Wine debug messages and completely normal. You can ignore them. The relevant messages come from the framework itself and are marked with timestamps.

Players can't connect

  1. Server running? docker ps | grep windrose
  2. Port open? ss -tulnp | grep 7777
  3. Direct connection enabled? UseDirectConnection=true
  4. Firewall? Port 7777 must be open for UDP and TCP

Config not being applied

The ServerDescription.json is regenerated from your environment variables on every start. If you change settings, just restart the container:

docker compose restart

Links

  • GitHub: github.com/RndmJoker/gameserver-steam-windrose
  • Docker Hub: hub.docker.com/r/rndmjoker/gameserver-steam-windrose
  • Official Windrose Docs: playwindrose.com/dedicated-server-guide
  • Framework: Steam Game Server Framework

If you have questions or need help, reach out via the contact form.

Back to Documentation