Enshrouded doesn't ship a native Linux server — it's Windows-only. You run it under Wine, which works fine but eats more RAM than the docs suggest. Allocate 16 GB minimum for a 4-player group. The "8 GB recommended" line is fiction past about 30 hours of playtime.
TL;DR:
sudo dpkg --add-architecture i386
sudo apt install steamcmd wine64 winetricks
sudo adduser --system --group --home /opt/enshrouded enshrouded
sudo -u enshrouded -H steamcmd +force_install_dir /opt/enshrouded \
+login anonymous +app_update 2278520 validate +quit
sudo ufw allow 15637/udp
Then a systemd unit that runs it through Wine, then backups. Standard SteamCMD pattern, same as Valheim and Palworld, with a Wine wrapper layered on.
Why Wine, not Proton
Proton needs Steam running, and a headless server box shouldn't have a Steam client lurking. Wine straight is leaner and the server doesn't use any Proton-specific shims (no DXVK, no Vulkan, no Wayland nonsense — it's a network process).
Bare wine64 works. Don't overthink it.
Install
App ID for the dedicated server is 2278520. The game's app ID is 1203620 — you don't need it. Anonymous login is fine; the server is free.
sudo dpkg --add-architecture i386
sudo apt update
sudo apt install steamcmd wine64 winetricks
sudo adduser --system --group --home /opt/enshrouded enshrouded
sudo -u enshrouded -H steamcmd \
+force_install_dir /opt/enshrouded \
+login anonymous \
+app_update 2278520 validate \
+quit
First wine run initializes the prefix:
sudo -u enshrouded -H WINEPREFIX=/opt/enshrouded/wineprefix WINEARCH=win64 wineboot --init
This downloads Mono and Gecko prompts — say no to both, the server doesn't need them.
Config
Server config is /opt/enshrouded/enshrouded_server.json. First run creates it; stop the server and edit:
{
"name": "MyServer",
"password": "changeme",
"saveDirectory": "./savegame",
"logDirectory": "./logs",
"ip": "0.0.0.0",
"queryPort": 15637,
"slotCount": 16
}
slotCount max is 16. queryPort is also the game port. There's no separate Steam query port like Valheim — Enshrouded uses one UDP port for everything.
Systemd unit
/etc/systemd/system/enshrouded.service:
[Unit]
Description=Enshrouded Dedicated Server
After=network-online.target
Wants=network-online.target
[Service]
Type=simple
User=enshrouded
Group=enshrouded
WorkingDirectory=/opt/enshrouded
Environment=WINEPREFIX=/opt/enshrouded/wineprefix
Environment=WINEARCH=win64
Environment=WINEDEBUG=-all
ExecStart=/usr/bin/wine64 /opt/enshrouded/enshrouded_server.exe
Restart=on-failure
RestartSec=15
RuntimeMaxSec=86400
MemoryMax=20G
[Install]
WantedBy=multi-user.target
Two lines that matter:
RuntimeMaxSec=86400— restart every 24h. Wine slowly leaks GDI handles. After 3-4 days the server starts stuttering, after a week it OOMs. Daily restart at 4am, players never notice.MemoryMax=20G— hard cap. If the process exceeds it, systemd kills it instead of the kernel doing it under load. Cleaner restart, save survives.
WINEDEBUG=-all silences a wall of noise that's otherwise written to stderr at every tick. Read systemd service unit files if any of this is unfamiliar.
sudo systemctl daemon-reload
sudo systemctl enable --now enshrouded
sudo journalctl -u enshrouded -f
First start takes 60-90 seconds. Look for Server is now ready — until then, clients can't connect.
Ports
Single UDP port, default 15637:
sudo ufw allow 15637/udp
If you change queryPort in the JSON, change the firewall rule. Enshrouded uses only UDP — opening TCP does nothing useful.
The RAM thing
Keen Games' page says 8 GB, the Steam page says 8 GB, the wiki says 8 GB. With 4 active players and a few hours of build progress, RSS sits around 11 GB. By 50 hours of playtime it's pushing 14 GB. The world chunks load eagerly and don't unload aggressively.
If you put this on an 8 GB VM, it OOMs within a week. 16 GB is the floor. 24 GB is comfortable. I run it on a 32 GB box because it's also doing other things and Wine likes its breathing room.
Backups
The save lives in /opt/enshrouded/savegame/. The whole directory matters — it's a small SQLite-ish blob plus chunk files. Nightly:
rsync -a --delete /opt/enshrouded/savegame/ /backup/enshrouded/$(date +%F)/
Keep 14 days. Enshrouded's save corruption is rare but when it happens, the symptom is the server starting and then booting everyone within 60 seconds with no error. Restore from yesterday's backup, you lose maybe an hour of progress. rsync backup pattern.
Always stop the server before snapshotting if you can. A crash mid-rsync is fine 95% of the time, but the 5% where the chunk file was being written gives you a corrupt backup. Two-line wrapper:
systemctl stop enshrouded
rsync -a --delete /opt/enshrouded/savegame/ /backup/enshrouded/$(date +%F)/
systemctl start enshrouded
Downtime: 30 seconds. Worth it.
Updates
Enshrouded patches break protocol compatibility roughly every 6-8 weeks. Updating:
sudo systemctl stop enshrouded
sudo -u enshrouded -H steamcmd \
+force_install_dir /opt/enshrouded \
+login anonymous \
+app_update 2278520 validate \
+quit
sudo systemctl start enshrouded
validate re-checks file hashes. After a Wine prefix upgrade or a Wine version bump, run wineboot --update first or the new EXE complains about missing DLL versions.
The two failure modes you'll hit
"Server is starting up" forever. Wine prefix didn't initialize. Check journalctl -u enshrouded for wine: failed to load. Fix: re-run wineboot --init as the enshrouded user.
Players see the server but can't join. Almost always firewall (UFW rule on wrong port) or NAT (port-forward missing on home router). Double-check with:
sudo ss -tulnp | grep 15637
You should see udp UNCONN 0 0 0.0.0.0:15637 .... If the listener isn't there, the server isn't bound — usually a config issue.
If ss shows it but external clients can't connect, the gap is your network, not the server. From outside, nc -uvz <publicip> 15637 proves it one way or the other.
Why this and not a managed host
Same answer as Valheim and Palworld: a Hetzner CPX31 (4 vCPU, 16 GB) is €15/month and runs Enshrouded plus two other game servers. Managed Enshrouded hosts charge €20-25/month for a single 8-slot instance and lock you behind a control panel. For one group of friends, owning the box wins.
The only thing managed hosts do better is automatic patch deployment. With the systemd unit above and a cron-driven update script, you can match that in an evening.