This Docker image provides a Windrose dedicated game server. You will find here also a Helm Chart for running a Windrose dedicated server on Kubernetes container orchestration system. This Windrose dedicated server is run with Linux native binaries on Debian Trixie.
My automation checks the Windrose official Image build every
night. If a new Image was published by Kraken Express, a new Docker image will be built
with this new version. Just use the latest tag and you will always have an up-to-date Docker image. No need to
manually run any server updates and mess around with your Docker image. It's that simple. 😃
Have a look at the docker compose example and its documentation. There you can see how a server update can be automated with a simple script. Also check out my guide for setting up a Windrose dedicated server with Docker and Docker Compose. I also did an in-depth analysis of the official Windrose Docker image.
Please keep in mind that the Windrose server is currently still in development as the game is in early access state. During the last weeks I already encountered some breaking changes for instance the directory of the world saves changed. So expect further breaking changes. I also have to say that the Windrose server is a weird thing to operate in a container. It was just not made for doing this. I had to implement quite some tricks to get it going. And I hope Kraken Express will improve the server so it can be run in a container in a good way.
Docker Hub: https://hub.docker.com/r/pfeiffermax/windrose-dedicated-server
GitHub Repository: https://github.com/max-pfeiffer/windrose-dedicated-server-docker-helm
Kraken Express published an official Docker Image with Linux binaries just recently. So my image is using these Linux binaries from now on. Let's hope Kraken Express updates this image when they publish a new Game client via Steam. I declared that as a breaking change as this might break something depending on your setup.
You can configure the Windrose server with the following environment variables:
INVITE_CODE- invite code to find your server. 0-9, a-z and A-Z symbols are allowed. Should contain at least 6 symbols. Case sensitive.PASSWORD- this is the password.SERVER_NAME- name of your server. Helpful if invite codes look similarMAX_PLAYER_COUNT- maximum number of simultaneous players on your server.USER_SELECTED_REGION- specifies the region for the Connection Service. Supported options: SEA, CIS, EU (EU covers both EU & NA). If left empty, the server will automatically detect and select the optimal region based on latency. If desired region is specified (for example, EU), the server will use that region exclusively.P2P_PROXY_ADDRESS- IP Address for listening sockets.USE_DIRECT_CONNECTION- if true, the server will create sockets for direct connection with clients. If false, the server will use ICE protocol to establish P2P connection.DIRECT_CONNECTION_SERVER_ADDRESS- address for direct connection. For future purposes. Not used now.DIRECT_CONNECTION_SERVER_PORT- port for direct connection. Should be available for TCP and UDP connection if UseDirectConnection is true.DIRECT_CONNECTION_PROXY_ADDRESS- can be used to choose specified network on computer where server with direct connection is running. 0.0.0.0 should be used by default.AUTO_LOAD_LATEST_BACKUP_IF_HAS_BROKEN- if true, the server automatically loads the latest backup if the world save is broken.WORLD_ISLAND_ID- ID of the world the server should load. Only needed if you want to switch to another world, see Importing a save game.
Use --env to set these variables in the Docker image.
As the Windrose server is running in the Docker container as a stateless application, you want to have all stateful server
data (config, saves, etc.) stored in a Docker volume
which is persisted outside the container. By default, the Windrose server stores that data in /srv/windrose/R5/Saved.
You need to make sure that this directory is mounted on a Docker Volume.
The server needs a unique and stable PersistentServerId so that invite codes keep resolving to your server. On the
first start a new id is generated automatically and persisted to /srv/windrose/R5/Saved/persistent_server_id so it
survives container restarts. As long as you mount /srv/windrose/R5/Saved on a Docker Volume, you do not need to do
anything. If you want to store this id somewhere else, you can override its location with the optional
PERSISTENT_SERVER_ID_FILE environment variable.
For testing purposes, you can fire up a Docker container like this:
docker run -it --publish 28050:28050/tcp --publish 28050:28050/udp --env SERVER_NAME=MyServer --env MAX_PLAYER_COUNT=5 pfeiffermax/windrose-dedicated-server:latestPlease have a look at the docker compose example. The docker compose example contains a Web based file manager for managing your save games in a very convenient way. There are very detailed instructions for transferring a local save game to the server in the instructions.
If you would like to run the Windrose server in your Kubernetes cluster, I provide a Helm chart you could use: https://max-pfeiffer.github.io/windrose-dedicated-server-docker-helm
There is also documentation available for that Helm chart.
If you want to run your Windrose server on bare metal Kubernetes, check out my blog article on how to do that using Cilium.