Updates
Two things update independently: the container image (Docker) and the game files (SteamCMD).
Update everything
./windrose update
That target:
- Pulls the latest image from GHCR (image-level update).
- Stops the running container.
- Recreates it, which triggers SteamCMD
app_update validateon start (game-files update). - Tails logs.
Saves and config persist across updates because they live in bind-mounted ./data and ./steam-home.
Update game files only
./windrose restart
The entrypoint runs app_update validate every time the container starts when UPDATE_ON_START=true. So a restart is enough to pull new game files without changing the image.
Pin to a specific image tag
In .env:
IMAGE_TAG=v1.0.0
Then:
./windrose update
Available tags: Container image page.
Skip SteamCMD on start
For air-gapped or rate-limited setups:
UPDATE_ON_START=false
The container starts the existing files without contacting Steam. To force an update later, flip the variable back and recreate, or run a one-shot update inside the container:
./windrose shell
su -s /bin/bash steam -c \
"/opt/steamcmd/steamcmd.sh +force_install_dir /data +login anonymous +app_update 4129620 validate +quit"
exit
./windrose restart
Scheduled updates
Daily update at 04:00:
0 4 * * * cd /opt/windrose-dedicated-server && ./windrose update >> logs/update.log 2>&1