I’m writing this guide because I needed it and it didn’t exist. Not in one place, anyway. Every tutorial I found was either written for sysadmins who already know what iptables means, or it was some five-year-old forum post with half the commands broken. So here’s the whole thing, start to finish, with commands you can actually copy-paste.
If you’ve never SSH’d into anything before, you’re in the right place.
Why Linux?
Two reasons. It’s cheaper (most VPS providers charge less for Linux), and 7D2D actually runs about 10-15% faster on Linux compared to Windows on the same hardware. Something about less overhead. The game doesn’t care, your players won’t notice the difference except that everything’s a bit smoother.
Get a Server
You need a VPS or a dedicated box. Not your gaming PC, not your laptop. A server that’s always on, with a public IP.
Minimum specs:
- 2 CPU cores (4 is better for larger maps)
- 8 GB RAM (seriously, don’t try 4 GB)
- 15 GB SSD storage
- Ubuntu 22.04 or 24.04 LTS
Any major provider works. Hetzner, OVH, Linode, DigitalOcean, Vultr, whatever. Pick Ubuntu 22.04 LTS when they ask which OS. It’s the most documented, most tested, and least likely to give you weird dependency issues.
Once you have the server, you’ll get an IP address and either a root password or SSH key. Connect to it:
ssh root@your-server-ip
If you’re on Windows, use Windows Terminal or PowerShell. They have SSH built in now. No need for PuTTY unless you want it.
Don’t Run as Root
First thing. Make a dedicated user. Running game servers as root is asking for trouble.
useradd -m -s /bin/bash steam
passwd steam
Pick a password. You’ll also want to be able to sudo from this account later, so:
usermod -aG sudo steam
Now switch to it:
su - steam
Everything from here on happens as the steam user unless I say otherwise.
Install SteamCMD
SteamCMD is Valve’s command-line tool for downloading dedicated servers. Every Steam game server uses it.
sudo dpkg --add-architecture i386
sudo add-apt-repository multiverse -y
sudo apt update
sudo apt install -y steamcmd lib32gcc-s1
It’ll ask you to accept a license agreement. Hit Tab, then Enter. After that, SteamCMD lives at /usr/games/steamcmd.
Download the 7D2D Server
One command. The app ID for the dedicated server is 294420 (not 251570, that’s the game client).
/usr/games/steamcmd \
+@sSteamCmdForcePlatformType linux \
+force_install_dir /home/steam/7d2d-server \
+login anonymous \
+app_update 294420 validate \
+quit
This downloads about 12 GB. Go get a coffee. When it’s done, your server lives at /home/steam/7d2d-server/.
To update the server later, run the exact same command. SteamCMD only downloads what’s changed.
Configure It
The config file is at /home/steam/7d2d-server/serverconfig.xml. Open it:
nano /home/steam/7d2d-server/serverconfig.xml
If you’ve never used nano: arrow keys to move around, type to edit, Ctrl+O then Enter to save, Ctrl+X to exit. That’s it. That’s the whole editor.
There are a ton of settings in here. You don’t need to touch most of them. Here are the ones that actually matter:
<!-- Give your server a name -->
<property name="ServerName" value="My 7D2D Server"/>
<!-- Set a password (or leave empty for public) -->
<property name="ServerPassword" value=""/>
<!-- How many players -->
<property name="ServerMaxPlayerCount" value="8"/>
<!-- Show up in the server browser -->
<property name="ServerVisibility" value="2"/>
<!-- Pick your world -->
<property name="GameWorld" value="Navezgane"/>
<!-- Or use "RWG" for random gen with a seed -->
<!-- <property name="GameWorld" value="RWG"/> -->
<!-- <property name="WorldGenSeed" value="whatever"/> -->
<!-- <property name="WorldGenSize" value="4096"/> -->
<!-- Difficulty: 0=Scavenger, 1=Adventurer, 2=Nomad, 3=Warrior, 4=Survivalist, 5=Insane -->
<property name="GameDifficulty" value="2"/>
<!-- IMPORTANT: Disable EAC if you want to run ANY mods -->
<property name="EACEnabled" value="false"/>
<!-- Enable telnet for graceful shutdown (localhost only) -->
<property name="TelnetEnabled" value="true"/>
<property name="TelnetPort" value="8081"/>
<property name="TelnetPassword" value=""/>
Save and exit.
The EAC thing is important. If you install mods and leave EACEnabled as true, players get kicked on connect. Your players also need to launch their game with EAC disabled on their end. It’s just how it works with modded servers.
Open the Firewall
Your server needs to accept connections on a few ports. If you skip this step, nobody can connect.
sudo ufw allow 26900/tcp
sudo ufw allow 26900:26902/udp
sudo ufw enable
That’s the game ports. If you’re planning to install KitsuneCommand (web management panel), also open:
sudo ufw allow 8888/tcp
sudo ufw allow 8889/tcp
Port 8888 is the web panel, 8889 is the WebSocket for real-time updates.
Don’t open port 8081 (telnet). That should only be accessible from localhost.
Start It Up
cd /home/steam/7d2d-server
./startserver.sh -configfile=serverconfig.xml
First launch takes a while, especially if you picked RWG (random world generation). The server has to generate the entire world. On Navezgane it’s much faster since the map is pre-made.
You’ll see a bunch of output scroll by. When you see something like GameServer.Init successful, you’re good. Players can connect using your server IP and port 26900.
But wait. If you close your SSH session, the server dies. You need to keep it running.
Keep It Running
Two options. Pick one.
Option A: screen (Quick and Dirty)
Install it if it’s not there:
sudo apt install -y screen
Start the server inside a screen session:
screen -S 7d2d
cd /home/steam/7d2d-server && ./startserver.sh -configfile=serverconfig.xml
Now press Ctrl+A, then D. The server keeps running in the background. Close your SSH, go to bed, whatever.
To come back later:
screen -r 7d2d
Option B: systemd (Proper Way)
This makes the server start automatically when the machine boots, restart if it crashes, and give you clean log access. Switch to root for this part:
sudo nano /etc/systemd/system/7daystodie.service
Paste this:
[Unit]
Description=7 Days to Die Dedicated Server
After=network-online.target
[Service]
Type=simple
User=steam
Group=steam
WorkingDirectory=/home/steam/7d2d-server
ExecStart=/home/steam/7d2d-server/startserver.sh -configfile=serverconfig.xml
Restart=on-failure
RestartSec=10
[Install]
WantedBy=multi-user.target
Then:
sudo systemctl daemon-reload
sudo systemctl enable 7daystodie
sudo systemctl start 7daystodie
Check if it’s running:
sudo systemctl status 7daystodie
Follow the live logs:
sudo journalctl -u 7daystodie -f
Stop it:
sudo systemctl stop 7daystodie
That -f flag on journalctl is like tail -f for people who know what that means. For people who don’t, it just shows new log lines as they happen. Ctrl+C to stop watching.
Installing Mods
Mods go in the Mods/ folder. Create it if it doesn’t exist:
mkdir -p /home/steam/7d2d-server/Mods
Then drop the mod folder in. Each mod needs a ModInfo.xml at its root level. So the structure looks like:
7d2d-server/
Mods/
SomeMod/
ModInfo.xml
SomeMod.dll
KitsuneCommand/
ModInfo.xml
KitsuneCommand.dll
Config/
wwwroot/
linux-x64/
libSkiaSharp.so
Stop the server before adding or removing mods. Then start it again. Mods load on startup.
Remember: EACEnabled must be false in your serverconfig.xml. I know I said this already. I’m saying it again because you will forget and spend 20 minutes wondering why it doesn’t work.
KitsuneCommand Specifically
If you’re installing KitsuneCommand, grab the release ZIP, extract it, and copy the KitsuneCommand folder into Mods/. It auto-detects Linux and loads the right native libraries. After the server starts, open http://your-server-ip:8888 and check the server console output for your auto-generated admin password.
On Linux, KitsuneCommand uses your system’s SQLite library, so make sure it’s installed:
sudo apt install -y libsqlite3-0
It’s probably already there. Ubuntu ships with it.
Updating the Server
Stop the server first, then run the SteamCMD command again:
sudo systemctl stop 7daystodie
/usr/games/steamcmd \
+@sSteamCmdForcePlatformType linux \
+force_install_dir /home/steam/7d2d-server \
+login anonymous \
+app_update 294420 validate \
+quit
sudo systemctl start 7daystodie
Your world save and mods are untouched. SteamCMD only updates game files.
Shit That Goes Wrong
Here’s the stuff that’ll trip you up, because it tripped me up.
“Server not showing in browser” It takes 5-10 minutes for Steam to index a new server. Be patient. Also double-check your firewall ports. Also make sure ServerVisibility is 2 in the config.
Random world gen eats all your RAM If you set WorldGenSize to 8192 or higher on an 8 GB server, it will eat everything and crash. Start with 4096. It’s a perfectly good map size.
“Fallback handler could not load library” warnings You’ll see these in the console on startup. They’re Mono/Unity noise. Ignore them. The server runs fine.
The server silently dies after you close SSH You forgot to use screen or systemd. Scroll back up. Pick one.
Mods installed but players get kicked EACEnabled is still true. Fix it. Both server-side in the config AND players need to launch their client with EAC off.
Permission denied on startserver.sh
chmod +x /home/steam/7d2d-server/startserver.sh
Can’t connect at all Run sudo ufw status and make sure ports 26900 (TCP and UDP) plus 26901-26902 (UDP) are actually open. If you’re on a cloud provider, also check their web dashboard for security groups or network firewall rules. UFW handles the OS-level firewall, but some providers have an additional layer on top.
The Full Cheat Sheet
For the impatient, here’s everything condensed. Run as root first, then switch to steam:
# As root
useradd -m -s /bin/bash steam
passwd steam
dpkg --add-architecture i386
add-apt-repository multiverse -y
apt update
apt install -y steamcmd lib32gcc-s1 screen libsqlite3-0
ufw allow 26900/tcp
ufw allow 26900:26902/udp
ufw allow 8888/tcp
ufw allow 8889/tcp
ufw enable
# Switch to steam user
su - steam
# Download server
/usr/games/steamcmd \
+@sSteamCmdForcePlatformType linux \
+force_install_dir /home/steam/7d2d-server \
+login anonymous \
+app_update 294420 validate \
+quit
# Edit config
nano /home/steam/7d2d-server/serverconfig.xml
# Create Mods folder
mkdir -p /home/steam/7d2d-server/Mods
# Start
cd /home/steam/7d2d-server && ./startserver.sh -configfile=serverconfig.xml
That’s it. You have a Linux 7D2D server. Go kill some zombies.