How to Install 7 Days to Die Dedicated Server on Ubuntu 24.04
7 Days to Die is one of the most mod-friendly survival games on Steam, and running your own dedicated server turns it into a shared world your friends can join any time -- with the rules, difficulty, and mods you choose. This guide walks you through installing a 7 Days to Die dedicated server on an Ubuntu 24.04 VPS from SSH to a hardened, systemd-managed deployment with automatic backups.
Want to skip the manual install? Our Business plan VPS is sized specifically for 7DtD and ships with Ubuntu 24.04 ready to go. Launch a VPS now and be in-game in under an hour.
Table of Contents
Why Self-Host 7 Days to Die?
Managed 7 Days to Die hosting providers charge EUR 15-25 per month for a 10-slot, shared-CPU server with tight mod restrictions and no shell access. Self-hosting on a VPS flips that trade-off. For roughly the same cost, you get a full Linux machine, a static IP, and a server you control end to end.
- Real cost savings over paid game hosts. A typical EUR 20/month 10-slot plan balloons to EUR 30+ when you add mod support, scheduled backups, and a larger player cap. A Business VPS at EUR 29.99/month handles all of that and lets you run extra game servers, a Discord bot, or a map viewer on the same machine.
- Complete mod freedom. Drop any mod into the
Modsfolder and restart. Install overhauls like Darkness Falls, Undead Legacy, or War of the Walkers without filing a ticket. Hot-patch XML files, edit loot tables, write server-side scripts, and wire in server tools like Allocs Server Fixes or CSMM (Command Server Management Module). - Persistent worlds and snapshots. With
rsyncandcron, you own your save data. Roll back a corrupt horde night, migrate a world to a bigger VPS, or keep weekly archives for your community -- none of that is possible on locked-down managed hosts. - Tuning beyond a web panel. Managed hosts expose a handful of sliders. On your own VPS you edit
serverconfig.xmldirectly, enable telnet for live admin commands, tune kernel swappiness for large worlds, and monitor performance withhtop,pidstat, andjournalctl. - Run more than one game. 7 Days to Die is RAM-heavy but not always CPU-bound. The same Business VPS can comfortably host a small Terraria or Project Zomboid world alongside 7DtD for the gaming evenings when the zombies are not in fashion.
Recommended Plan: CloudCore Business
7 Days to Die is one of the more RAM-hungry survival games on the market -- the generated world streams chunks aggressively and each connected player adds memory pressure as they explore new territory. We recommend the CloudCore Business plan:
- 6 vCPU cores
- 8 GB RAM
- 120 GB NVMe SSD
- Unmetered bandwidth
- From EUR 29.99/month
Prerequisites
Before you begin, make sure you have:
- A VPS running Ubuntu 24.04 LTS with root or sudo access
- SSH access to your server
- At least 8 GB of RAM (6 GB minimum for a tiny 4-player vanilla world)
- At least 15 GB of free disk space -- the server files are approximately 3 GB, but an active world plus backups can grow past 10 GB
- Basic familiarity with the Linux command line (editing config files, restarting services)
ssh root@your-server-ipStep 1: Update the System and Create a Dedicated User
Start with a clean, patched system and create a non-root user to run the game. Never run a public-facing game server as root.
sudo apt update && sudo apt upgrade -yUbuntu 24.04 no longer needs the multiverse repository for SteamCMD dependencies, but it doesn't hurt to make sure it's enabled:
sudo add-apt-repository multiverse -y
sudo dpkg --add-architecture i386
sudo apt updateCreate a dedicated system user named sdtd that will own the server files:
sudo adduser --disabled-password --gecos "" sdtdSwitch to that user for the remainder of the install:
sudo -iu sdtdYour shell prompt should now show sdtd@your-server.
Step 2: Install SteamCMD
SteamCMD is Valve's command-line Steam client, used by virtually every Source- and Unity-based dedicated server on Linux.
Exit back to your sudo user temporarily to install system packages:
exitInstall the required dependencies:
sudo apt install -y lib32gcc-s1 lib32stdc++6 libc6-i386 curl unzip tmuxSwitch back to the sdtd user and install SteamCMD into its home directory:
sudo -iu sdtd
mkdir -p ~/steamcmd && cd ~/steamcmd
curl -sSL https://steamcdn-a.akamaihd.net/client/installer/steamcmd_linux.tar.gz | tar -xzYou should now have two files: steamcmd.sh and linux32/steamcmd. Test it:
./steamcmd.sh +quitThe first run auto-updates SteamCMD and finishes with OK. If you see it exit cleanly, you're ready for the next step.
Step 3: Download 7 Days to Die Server Files (App 294420)
The 7 Days to Die dedicated server lives on Steam under AppID 294420. It is a free download -- you don't need to own the game to run the server (though you do need to own it to connect).
From the sdtd home directory, pull the server files:
cd ~
./steamcmd/steamcmd.sh \
+force_install_dir /home/sdtd/7dtd \
+login anonymous \
+app_update 294420 validate \
+quitExpected output (abbreviated):
Redirecting stderr to '/home/sdtd/Steam/logs/stderr.txt'
[ 0%] Checking for available updates...
[----] Verifying installation...
Logging in user 'anonymous' to Steam Public...OK
Update state (0x3) reconfiguring, progress: 0.00 (0 / 0)
Update state (0x61) downloading, progress: 12.34 (432156789 / 3502109876)
...
Success! App '294420' fully installed.The download size is approximately 3 GB. On a decent VPS with gigabit networking, this takes 2-5 minutes.
Verify the files are in place:
ls /home/sdtd/7dtdYou should see entries like startserver.sh, 7DaysToDieServer.x86_64, 7DaysToDieServer_Data/, serverconfig.xml, Mods/, and 7DaysToDie_Data/.
Updating the server later: Re-run the exact same SteamCMD command to pull the latest patch. Always stop the systemd service first (sudo systemctl stop 7dtd) before runningapp_update.
Step 4: Open the Required Firewall Ports
7 Days to Die uses the following ports by default:
| Port | Protocol | Purpose |
|---|---|---|
| 26900 | UDP | Main game port |
| 26900 | TCP | Steam connectivity |
| 26901 | UDP | LiteNetLib server |
| 26902 | UDP | LiteNetLib reliability |
| 26903 | UDP | Server allocator (optional) |
| 8080 | TCP | Web dashboard (Allocs Fixes, optional) |
| 8081 | TCP | Telnet administration (optional, restrict!) |
exitAllow the required ports via UFW:
sudo ufw allow 26900:26903/udp
sudo ufw allow 26900/tcpFor telnet admin access, allow the port only from your own IP:
sudo ufw allow from YOUR.HOME.IP.HERE to any port 8081 proto tcpEnable the firewall if it's not already on (make sure port 22 is allowed first):
sudo ufw allow 22/tcp
sudo ufw enable
sudo ufw statusStep 5: Configure serverconfig.xml
The heart of your server's behaviour lives in serverconfig.xml. Every setting -- from world size to zombie movement speed -- is a <property> element inside this file.
Switch back to the sdtd user and open the file:
sudo -iu sdtd
nano /home/sdtd/7dtd/serverconfig.xmlHere are the essential properties to set. Look for each one and update its value:
<!-- Server identity --> <property name="ServerName" value="CloudCore 7DtD"/> <property name="ServerDescription" value="A self-hosted 7DtD server on vps-server.host"/> <property name="ServerWebsiteURL" value="https://vps-server.host"/> <property name="ServerPassword" value=""/> <property name="ServerLoginConfirmationText" value=""/> <property name="Region" value="Europe"/> <property name="Language" value="English"/><!-- Network --> <property name="ServerPort" value="26900"/> <property name="ServerVisibility" value="2"/> <!-- 0=private, 1=friends-only, 2=public --> <property name="ServerDisabledNetworkProtocols" value="SteamNetworking"/> <property name="ServerMaxWorldTransferSpeedKiBs" value="512"/>
<!-- Slots --> <property name="ServerMaxPlayerCount" value="8"/> <property name="ServerReservedSlots" value="0"/> <property name="ServerReservedSlotsPermission" value="100"/> <property name="ServerAdminSlots" value="0"/> <property name="ServerAdminSlotsPermission" value="0"/>
<!-- Admin / telnet --> <property name="ControlPanelEnabled" value="false"/> <property name="ControlPanelPort" value="8080"/> <property name="ControlPanelPassword" value="CHANGE_ME_STRONG_PASSWORD"/> <property name="TelnetEnabled" value="true"/> <property name="TelnetPort" value="8081"/> <property name="TelnetPassword" value="CHANGE_ME_TELNET_PASSWORD"/> <property name="TelnetFailedLoginLimit" value="10"/> <property name="TelnetFailedLoginsBlocktime" value="10"/> <property name="AdminFileName" value="serveradmin.xml"/>
<!-- World --> <property name="GameWorld" value="Navezgane"/> <!-- or "RWG" for random-gen --> <property name="WorldGenSeed" value="asdf1234"/> <property name="WorldGenSize" value="8192"/> <property name="GameName" value="CloudCoreSurvival"/> <property name="GameMode" value="GameModeSurvival"/>
<!-- Difficulty and XP --> <property name="GameDifficulty" value="2"/> <!-- 0=Scavenger (easy) to 5=Insane --> <property name="BlockDamagePlayer" value="100"/> <property name="BlockDamageAI" value="100"/> <property name="BlockDamageAIBM" value="100"/> <property name="XPMultiplier" value="100"/> <!-- 100 = default, 200 = double XP --> <property name="PlayerSafeZoneLevel" value="5"/> <property name="PlayerSafeZoneHours" value="5"/>
<!-- Zombies and difficulty knobs --> <property name="BuildCreate" value="false"/> <property name="DayNightLength" value="60"/> <property name="DayLightLength" value="18"/> <property name="DropOnDeath" value="1"/> <property name="DropOnQuit" value="0"/> <property name="BedrollDeadZoneSize" value="15"/> <property name="BedrollExpiryTime" value="45"/> <property name="MaxSpawnedZombies" value="64"/> <property name="MaxSpawnedAnimals" value="50"/> <property name="EnemySpawnMode" value="true"/> <property name="EnemyDifficulty" value="0"/> <!-- 0=Normal, 1=Feral --> <property name="ZombieFeralSense" value="0"/> <property name="ZombieMove" value="0"/> <!-- 0=walk during day --> <property name="ZombieMoveNight" value="3"/> <!-- 3=sprint at night --> <property name="ZombieFeralMove" value="3"/> <property name="ZombieBMMove" value="3"/> <property name="BloodMoonFrequency" value="7"/> <property name="BloodMoonRange" value="0"/> <property name="BloodMoonWarning" value="8"/> <property name="BloodMoonEnemyCount" value="8"/>
<!-- Loot and performance --> <property name="LootAbundance" value="100"/> <property name="LootRespawnDays" value="7"/> <property name="LandClaimCount" value="1"/> <property name="LandClaimSize" value="41"/> <property name="LandClaimDeadZone" value="30"/> <property name="LandClaimExpiryTime" value="7"/> <property name="LandClaimDecayMode" value="0"/> <property name="LandClaimOnlineDurabilityModifier" value="4"/> <property name="LandClaimOfflineDurabilityModifier" value="4"/> <property name="LandClaimOfflineDelay" value="0"/>
Before saving, change every CHANGE_ME_* placeholder to a strong unique password. The telnet port is particularly sensitive -- anyone with the password can shut down or modify the server in real time.
Save and exit nano (Ctrl+O, Enter, Ctrl+X).
Step 6: Create the startserver.sh Launcher
The server ships with a default startserver.sh but it's worth creating a version you fully control. From the sdtd user:
nano /home/sdtd/7dtd/start-server.shPaste:
#!/bin/bash
cd /home/sdtd/7dtd
exec ./7DaysToDieServer.x86_64 \
-logfile /home/sdtd/7dtd/logs/latest.log \
-quit -batchmode -nographics \
-configfile=serverconfig.xml \
-dedicatedSave, exit, then make it executable and create the logs directory:
chmod +x /home/sdtd/7dtd/start-server.sh
mkdir -p /home/sdtd/7dtd/logsYou can test it once interactively to confirm it starts:
/home/sdtd/7dtd/start-server.sh &
sleep 30
tail -n 30 /home/sdtd/7dtd/logs/latest.logYou should see lines like GMSG: Server started and StartGame done. Stop it so systemd can take over:
pkill -f 7DaysToDieServer.x86_64Step 7: Create a systemd Service
systemd ensures the server starts at boot, restarts if it crashes, and integrates with journalctl for logs.
Exit back to your sudo user:
exitCreate the unit file:
sudo nano /etc/systemd/system/7dtd.servicePaste:
[Unit] Description=7 Days to Die Dedicated Server After=network-online.target Wants=network-online.target[Service] Type=simple User=sdtd Group=sdtd WorkingDirectory=/home/sdtd/7dtd ExecStart=/home/sdtd/7dtd/start-server.sh Restart=on-failure RestartSec=15 TimeoutStopSec=120 KillSignal=SIGINT
Hardening
NoNewPrivileges=true PrivateTmp=true ProtectSystem=full ProtectHome=read-only ReadWritePaths=/home/sdtd
[Install] WantedBy=multi-user.target
Reload systemd and enable the service so it starts on boot:
sudo systemctl daemon-reload
sudo systemctl enable --now 7dtdCheck that it's running:
sudo systemctl status 7dtdYou should see Active: active (running). Follow the logs in real time:
sudo journalctl -u 7dtd -fOr tail the game's own log:
sudo -u sdtd tail -f /home/sdtd/7dtd/logs/latest.logWorld generation on first launch can take 2-5 minutes depending on world size. Look for GameServer.StartGame complete -- once you see that line, the server is ready for players.
Step 8: Add Admins via serveradmin.xml
7 Days to Die uses permission levels from 0 (full admin) to 1000 (no rights). Most commands require level 90 or lower.
Edit the admins file (it's created on first launch):
sudo -u sdtd nano /home/sdtd/7dtd/Saves/serveradmin.xmlAdd entries inside the <admins> block:
<adminTools> <admins> <admin steamID="76561198012345678" permission_level="0" /> <admin steamID="76561198087654321" permission_level="1" /> </admins><whitelist> <!-- Optional: if populated, only listed Steam IDs can join --> </whitelist>
<blacklist> <blacklisted steamID="76561198099999999" /> </blacklist>
<permissions> <permission cmd="admin" permission_level="0" /> <permission cmd="kick" permission_level="1" /> <permission cmd="ban" permission_level="1" /> <permission cmd="teleport" permission_level="0" /> <permission cmd="listplayers" permission_level="90" /> <permission cmd="say" permission_level="90" /> </permissions> </adminTools>
To find a player's 17-digit Steam ID, have them join once and run listplayers via telnet, or look up their profile at steamid.io.
Reload admins without restarting the server via telnet:
telnet your-server-ip 8081
Enter your telnet password
admin reload
exitStep 9: Install Mods
The Mods directory at /home/sdtd/7dtd/Mods is where you drop extracted mod folders. Each mod is self-contained -- a directory with a ModInfo.xml at the root.
Example: install Allocs Server Fixes (the most common quality-of-life mod for admins):
sudo -iu sdtd
cd /home/sdtd/7dtd/Mods
wget https://github.com/alloc/7dtd-server-fixes/archive/refs/heads/master.zip -O allocs.zip
unzip allocs.zip
mv 7dtd-server-fixes-master Allocs_ServerFixes
rm allocs.zipRestart the server:
exit
sudo systemctl restart 7dtdFor overhaul modpacks like Darkness Falls or Undead Legacy, download the release ZIP from the official modpack page, extract it on your local machine, and upload the resulting folder via scp:
scp -r ./DarknessFalls sdtd@your-server-ip:/home/sdtd/7dtd/Mods/Each player who connects must also install the same modpack locally for full parity. Server-side-only mods (like Allocs Fixes) don't require client installation.
List what is loaded:
ls /home/sdtd/7dtd/ModsStep 10: Schedule Backups with rsync
The world state, player inventories, land claims, and admin lists all live under /home/sdtd/.local/share/7DaysToDie/Saves. Losing that directory means losing your world, so back it up on a schedule.
Create a backup script:
sudo -iu sdtd
nano /home/sdtd/backup-7dtd.shPaste:
#!/bin/bash set -eSRC=/home/sdtd/.local/share/7DaysToDie/Saves DEST=/home/sdtd/backups/7dtd STAMP=$(date +%Y-%m-%d_%H-%M) RETENTION_DAYS=14
mkdir -p "$DEST/$STAMP"
Incremental rsync snapshot using hardlinks
LATEST=$(ls -1t "$DEST" 2>/dev/null | grep -v '^current$' | head -n 1 || true) if [ -n "$LATEST" ] && [ -d "$DEST/$LATEST" ]; then rsync -a --delete --link-dest="$DEST/$LATEST" "$SRC/" "$DEST/$STAMP/" else rsync -a "$SRC/" "$DEST/$STAMP/" fiUpdate a 'current' symlink
ln -sfn "$DEST/$STAMP" "$DEST/current"Prune old snapshots
find "$DEST" -maxdepth 1 -type d -name '20*' -mtime +$RETENTION_DAYS -exec rm -rf {} +
echo "Backup complete: $DEST/$STAMP"
Make it executable and test it:
chmod +x /home/sdtd/backup-7dtd.sh
/home/sdtd/backup-7dtd.shSchedule it with cron (hourly backups, pruned after 14 days):
crontab -eAdd:
0 /home/sdtd/backup-7dtd.sh >> /home/sdtd/backups/backup.log 2>&1Off-site copies: for real durability, rsync the backups/ directory to a second VPS, object storage, or your home NAS. A second cron line can do that hourly or daily:
30 3 * rsync -az /home/sdtd/backups/current/ backup@off-site-host:/backups/7dtd/ >> /home/sdtd/backups/offsite.log 2>&1Troubleshooting
| Problem | Cause | Solution |
|---|---|---|
7DaysToDieServer.x86_64: not found | Missing 32-bit libraries on Ubuntu 24.04 | sudo apt install -y lib32gcc-s1 lib32stdc++6 then re-run the service |
| Server starts, players can't join | Firewall blocking UDP | Verify sudo ufw status shows 26900-26903/udp allowed, check your provider's edge firewall too |
RWG: out of memory during world gen | World size too large for available RAM | Lower WorldGenSize to 6144 or 4096, or switch to Navezgane map |
| Server uses 100% of one CPU core | Normal; 7DtD is mostly single-threaded for world logic | Ensure the VPS has >=3 GHz single-thread performance; use MaxSpawnedZombies=64 and reduce blood-moon counts on lower-end CPUs |
telnet: Connection refused | TelnetEnabled=false or port blocked | Set TelnetEnabled="true", restart service, allow 8081/tcp from your IP only |
| Rapidly rising memory, OOM after a few days | Known long-run memory behaviour | Restart the service nightly via cron: 0 5 * /usr/bin/systemctl restart 7dtd |
Admin reload has no effect | XML syntax error in serveradmin.xml | Validate with xmllint --noout /home/sdtd/7dtd/Saves/serveradmin.xml |
| Players report "Different server version" after update | Client/server version mismatch after patch | Re-run SteamCMD app_update 294420 validate, ask players to let Steam update the client |
# systemd journal
sudo journalctl -u 7dtd -n 200 --no-pagerGame's own logs
sudo -u sdtd tail -f /home/sdtd/7dtd/logs/latest.logTelnet live console
telnet your-server-ip 8081FAQ
How much RAM does a 7 Days to Die dedicated server need?
Plan for at least 6 GB of RAM for a small 4-player server and 8-12 GB for a typical 8-player world. Heavily modded Darkness Falls or Undead Legacy servers can push 14-16 GB once the world matures and players have built multiple bases. The CloudCore Business plan (8 GB RAM) is the minimum we recommend; larger communities should pick a 16 GB plan. 7DtD is unusual among survival games because memory pressure grows with how much of the world has been explored, not just concurrent player count.
Which ports does a 7 Days to Die server use?
The dedicated server uses UDP ports 26900-26903 by default. Port 26900 is the game port (also used over TCP for Steam handshake), 26901-26902 are used for LiteNetLib peer-to-peer communication, and 26903 is used when the server allocator is enabled. The optional telnet administration port (default 8081/TCP) and the control-panel port (default 8080/TCP) should be firewalled to admin IPs only -- never expose them to the public internet.
Why self-host 7 Days to Die instead of buying hosting?
Dedicated 7DtD hosts typically charge EUR 15-25 for a 10-slot server with shared CPU and restricted mod support. A VPS at EUR 29.99/month gives you full root access, unrestricted mod freedom, the ability to run multiple game servers on the same machine, and no per-slot pricing. You can install Allocs Server Fixes, custom overhauls, and server-side mods without filing a support ticket. Over a year of active hosting you typically save 30-50% while gaining full control over backups, world migration, and performance tuning.
Can I install mods like Darkness Falls on a self-hosted server?
Yes. Mods are installed by copying their folders into /home/sdtd/7dtd/Mods. Overhaul modpacks like Darkness Falls and Undead Legacy ship as a single folder you drop into place, then restart the server. Clients must have the same mod installed locally for full compatibility -- server-only mods (like Allocs Server Fixes) are the exception and don't require client installation. Refer to 7daystodie.com/dedicated-server for the official modding reference.
How do I give another player admin rights?
Edit /home/sdtd/7dtd/Saves/serveradmin.xml and add an <admin steamID="STEAM_ID_HERE" permission_level="0" /> entry inside the <admins> block. Permission levels range from 0 (full admin) to 1000 (no rights). Use the in-game /listplayers command or your Steam profile URL to find the 17-digit Steam ID, then restart the server or run the admin reload command via telnet to apply the change without a full restart.
How do I back up my 7 Days to Die world?
The entire world state lives under /home/sdtd/.local/share/7DaysToDie/Saves. Use rsync in a cron job (for example, hourly) to copy that directory to a backup location or off-site storage. A full backup of a mid-game world is usually 500 MB to 2 GB, so incremental rsync backups with --link-dest are fast and storage-efficient. Add a second cron line that pushes the backup to a remote host for real disaster-recovery coverage.
Does 7 Days to Die support Linux natively?
Yes. The Fun Pimps ship a Linux build of the dedicated server directly via SteamCMD under AppID 294420. You do not need Wine, Proton, or any compatibility layer. The Linux build is the preferred deployment target for most community servers because it uses less RAM than the Windows build and integrates cleanly with systemd, journalctl, and standard Unix tooling like rsync and cron.
Next Steps
Your 7 Days to Die server is now running. Some useful follow-ups:
- Add server tools -- Allocs Server Fixes unlocks a web dashboard, map viewer, and extra telnet commands. CSMM (Command Server Management Module) adds a full web admin panel with player stats, economy, and chat logs.
- Host a Discord integration -- run
discord-7dtd-botorBattleMetricson the same VPS to show live player counts and relay chat into your community Discord. - Run more games on the same box -- if your Business VPS has headroom, add a Rust server, a Terraria server, a Project Zomboid server, or a Satisfactory server. systemd makes it easy to keep them all managed side by side.
- Monitor performance -- deploy Netdata or a Prometheus + Grafana stack to graph CPU, memory, and per-service resource use. You'll spot memory leaks before they OOM your server.
- Set up a staging world -- clone the Saves directory into a second server instance on a different port so you can test mod updates against your real world before rolling them out.
Ready to deploy?>
Our CloudCore Business VPS is sized for RAM-heavy survival games like 7 Days to Die. Full root SSH, DDoS protection, NVMe storage, and unmetered bandwidth -- from EUR 29.99/month.>
Launch your 7DtD-ready VPS now.