Launch sale20% off everything — celebrating the launch of GHosting!
← All guides

How to Host a 7 Days to Die Dedicated Server on Linux

7 Days to Die has an official 64-bit dedicated server for Linux. It keeps the world online without leaving one player's gaming PC running, but a reliable setup needs more than starting the binary. The current V3 server uses a Sandbox Code for most world rules, crossplay caps the server at eight players, and the network path covers three consecutive port numbers.

Survivors defending a fortified base during a 7 Days to Die blood moon Skip SteamCMD and run 7 Days to Die on a managed server

What you need

  • An x86_64 Linux machine that stays online. Ubuntu 24.04 is a straightforward base for the commands below.
  • At least 4 GB of RAM for a small vanilla group. Larger explored worlds, spread-out players, high zombie caps and overhaul mods need more. Our RAM and CPU guide covers the sizing tradeoffs.
  • At least 25 GB of free disk. That leaves working room around the game binaries for saves, logs, updates and backups.
  • A reachable public address. Home hosts need router access and a real public IP. A normal port forward cannot get through carrier-grade NAT.

Run the game under its own unprivileged account. Do not run a public game server as root, and do not expose the optional telnet or web dashboard just to get a console.

1. Install SteamCMD and app 294420

On Ubuntu, SteamCMD comes from the multiverse repository and needs 32-bit runtime packages even though the game server itself is 64-bit:

sudo dpkg --add-architecture i386
sudo apt-get update
sudo apt-get install -y software-properties-common
sudo add-apt-repository -y multiverse
sudo apt-get update
sudo apt-get install steamcmd

sudo adduser --system --group --home /home/sevendays sevendays
sudo install -d -o sevendays -g sevendays \
  /srv/seven-days/runtime /srv/seven-days/data \
  /srv/seven-days/runtime/Mods

Accept Valve's Steam license when the package asks. Then download the official dedicated-server tool with anonymous login:

sudo -u sevendays /usr/games/steamcmd \
  +@sSteamCmdForcePlatformType linux \
  +@sSteamCmdForcePlatformBitness 64 \
  +force_install_dir /srv/seven-days/runtime \
  +login anonymous \
  +app_update 294420 validate \
  +quit

Steam app 294420 is the dedicated server, not the game client app. The Valve dedicated-server reference uses the same app ID. Keep the replaceable runtime separate from the data directory so a validation or update cannot become your backup strategy.

2. Create a minimal V3 serverconfig.xml

Save the following as /srv/seven-days/runtime/serverconfig.xml and replace the name, description, password and region. This starts a crossplay-capable Navezgane world with eight slots and a public browser listing:

<?xml version="1.0"?>
<ServerSettings>
  <property name="ServerName" value="After Work Survivors"/>
  <property name="ServerDescription" value="Private co-op world"/>
  <property name="ServerPassword" value="change-me"/>
  <property name="Region" value="Europe"/>
  <property name="ServerPort" value="26900"/>
  <property name="ServerVisibility" value="2"/>
  <property name="ServerMaxPlayerCount" value="8"/>
  <property name="ServerDisabledNetworkProtocols" value="SteamNetworking"/>
  <property name="ServerAllowCrossplay" value="true"/>
  <property name="IgnoreEOSSanctions" value="false"/>
  <property name="WebDashboardEnabled" value="false"/>
  <property name="TelnetEnabled" value="false"/>
  <property name="EACEnabled" value="true"/>
  <property name="PersistentPlayerProfiles" value="false"/>

  <property name="GameWorld" value="Navezgane"/>
  <property name="GameName" value="after-work-survivors"/>
  <property name="GameMode" value="GameModeSurvival"/>
  <property name="UserDataFolder" value="/srv/seven-days/data"/>
  <property name="SandboxCode" value="AAAJABJARFBNC"/>
</ServerSettings>

ServerVisibility is 2 for public and 0 for unlisted. The browser region is only a discovery category, so choose the region where the machine actually lives. GameWorld may instead be one of the pre-generated maps shipped with the current server. Do not casually change GameName after players have started: it identifies the save, and a different value can look like a wipe because the process opens another world.

V3 moved most gameplay rules into SandboxCode. Build the rules in the game's Sandbox Options screen, or use our V3.1 Sandbox Code generator and decoder, then replace the example code. Map, port, password, player count, browser visibility and anti-cheat remain separate properties. The official V3.1 stable notes warned owners to recheck older preset codes after Sandbox Options changed, so validate a saved code again after a major game update.

3. Open and forward all three ports

With the default base port, allow TCP and UDP 26900, then UDP 26901 and 26902. On Ubuntu with UFW:

sudo ufw allow 26900/tcp
sudo ufw allow 26900:26902/udp

A home router needs the same rules forwarded to the Linux machine's fixed LAN address. If you change ServerPort to another number P, move the whole set: TCP and UDP P, plus UDP P+1 and P+2. Forwarding only 26900 is a common reason a process appears healthy locally while remote discovery or joins fail.

Compare the public address shown by an IP-checking site with the WAN address in the router. If they differ, or the router has an address in 100.64.0.0/10, the connection is probably behind carrier-grade NAT. Ask the ISP for a public address or use a hosted server instead of stacking more forwarding rules.

4. Run the server under systemd

First fix ownership and confirm that the binary is executable:

sudo chown -R sevendays:sevendays /srv/seven-days
sudo chmod +x /srv/seven-days/runtime/7DaysToDieServer.x86_64

Create /etc/systemd/system/seven-days.service:

[Unit]
Description=7 Days to Die dedicated server
After=network-online.target
Wants=network-online.target

[Service]
Type=simple
User=sevendays
Group=sevendays
WorkingDirectory=/srv/seven-days/runtime
Environment=LD_LIBRARY_PATH=/srv/seven-days/runtime
ExecStart=/srv/seven-days/runtime/7DaysToDieServer.x86_64 -quit -batchmode -nographics -dedicated -configfile=/srv/seven-days/runtime/serverconfig.xml
Restart=on-failure
RestartSec=10
KillSignal=SIGINT
TimeoutStopSec=120
LimitNOFILE=65535

[Install]
WantedBy=multi-user.target

Enable it, follow the first boot, and give a new world time to initialize:

sudo systemctl daemon-reload
sudo systemctl enable --now seven-days.service
sudo journalctl -u seven-days.service -f

Check the log for an XML error before debugging the network. Then verify the listeners with sudo ss -lntup | grep 2690. Open sockets prove the process bound its ports, but the final readiness test is still one real join from outside the server's network.

5. Join and troubleshoot the first connection

  • Match versions exactly. Update the server and every client to the same stable build before changing firewall rules.
  • Try direct connect. Use the public IP and base port 26900. If that works but browser search does not, check ServerVisibility, Region and the browser's own filters.
  • Check all protocols. The base number needs TCP and UDP, while the next two need UDP. A TCP-only test cannot validate the whole path.
  • Keep EAC and mods aligned. A client/server mod mismatch or an anti-cheat setting that conflicts with a mod can fail after networking succeeds.
  • Do not test only from the host's LAN. Router loopback can make a local test pass even when no outside player can reach the machine.

When public listing is enabled, our game server port checker can send the query from outside your network. An unlisted server may deliberately give a checker no useful reply, so pair that result with the server log and a real direct join.

Mods, backups and safe updates

Put server-side mod folders below /srv/seven-days/runtime/Mods while the service is stopped. Read each mod's instructions: some require matching client files, some require EAC to be disabled, and overhaul packs often require a fresh world. Back up before changing any of the three together: game version, mod set or world.

sudo systemctl stop seven-days.service
sudo tar -C /srv/seven-days -czf /var/backups/seven-days-before-update.tgz \
  data runtime/serverconfig.xml runtime/Mods

sudo -u sevendays /usr/games/steamcmd \
  +@sSteamCmdForcePlatformType linux \
  +@sSteamCmdForcePlatformBitness 64 \
  +force_install_dir /srv/seven-days/runtime \
  +login anonymous +app_update 294420 validate +quit

sudo systemctl start seven-days.service

Keep a dated copy of that archive somewhere outside the server. SteamCMD can restore official binaries, but it cannot restore the group's world, player profiles or a mod that disappeared. After an update, check the current log, all listeners and one real join before deleting the previous backup.

Managed 7 Days to Die hosting

GHosting's 7 Days to Die hosting installs app 294420, reserves the full three-port span, keeps world data persistent, and exposes the current operational settings plus a validated Sandbox Code field. Plans are prepaid and never renew automatically.

GHosting is an independent hosting provider and is not affiliated with or endorsed by The Fun Pimps or Valve.