Backups
The repo ships a backup script that snapshots saves and config to a timestamped tarball with retention.
Manual backup
./windrose backup
Output goes to ./backups/windrose-YYYY-MM-DD-HHMM.tar.gz. By default, archives older than 14 days are deleted automatically.
Override retention or location with environment variables:
BACKUP_DIR=/srv/backups RETENTION_DAYS=30 ./windrose backup
Scheduled backups
Backup every six hours:
0 */6 * * * cd /opt/windrose-dedicated-server && ./windrose backup >> logs/backup.log 2>&1
What gets backed up
data/R5/Saved/(world saves and player data)data/R5/ServerDescription.json(server config snapshot)
The image and SteamCMD cache are intentionally excluded since they are reproducible.
Restore
./windrose restore ./backups/windrose-2026-04-26-2200.tar.gz
The script stops the container, extracts the archive over the current files, and restarts. Always restore to the same project directory the backup was taken from.
Off-host backups
For real disaster recovery, push tarballs off the server. Examples:
S3-compatible (MinIO, AWS, Backblaze B2) using the AWS CLI:
aws s3 cp ./backups/ s3://my-bucket/windrose/ --recursive --exclude "*" --include "windrose-*.tar.gz"
Restic to any backend:
restic -r s3:s3.amazonaws.com/my-bucket/windrose backup ./data/R5/Saved
Borg, rclone, or rsync to a remote host all work. Wire any of these into a cron entry that runs after ./windrose backup.