7 Days to Die Server on Linux
7 Days to Die is a survival game combining scavenging, crafting, and tower-defense elements. This guide covers complete server installation using SteamCMD, configuration through serverconfig.xml, world generation and seed management, port configuration, admin functions, performance optimization, and systemd management. 7 Days servers are moderately resource-intensive and require careful tuning for optimal multiplayer performance.
Table of Contents
- System Requirements
- Installing SteamCMD and 7 Days Server
- Server Configuration
- Serverconfig.xml Setup
- World Generation
- Admin and Moderation
- Port Configuration
- Running with Systemd
- Performance Optimization
- Backup and Recovery
- Monitoring
- Conclusion
System Requirements
7 Days to Die servers require adequate resources:
- Ubuntu 20.04 LTS or CentOS 7+
- 8GB RAM minimum (16GB recommended for 50+ players)
- 60GB+ disk space (SSD recommended)
- 4+ CPU cores
- Stable internet connection
- Root or sudo access
Server performance heavily depends on world size and player count.
Installing SteamCMD and 7 Days Server
Install system dependencies:
sudo apt-get update
sudo apt-get install -y curl wget file bzip2 gzip unzip python3 util-linux ca-certificates binutils lib32gcc1 lib32stdc++6
Create dedicated steam user:
sudo useradd -m -s /bin/bash steam
sudo -u steam mkdir -p /home/steam/steamcmd
Install SteamCMD:
cd /home/steam/steamcmd
sudo -u steam curl -sqL "https://steamcdn-a.akamaihd.net/client/installer/steamcmd_linux.tar.gz" | sudo -u steam tar zxvf -
Verify SteamCMD:
sudo -u steam /home/steam/steamcmd/steamcmd.sh +quit
Create 7 Days directory:
sudo -u steam mkdir -p /home/steam/7dtd
Install 7 Days to Die server (app ID 294420). This takes 15+ minutes:
sudo -u steam /home/steam/steamcmd/steamcmd.sh \
+force_install_dir /home/steam/7dtd \
+login anonymous \
+app_update 294420 \
+quit
Verify installation:
ls -la /home/steam/7dtd/
file /home/steam/7dtd/7DaysToDieServer.x86_64
Create data directories:
sudo -u steam mkdir -p /home/steam/7dtd-data/{Saves,Logs}
Server Configuration
Create startup script:
sudo tee /home/steam/7dtd/start_server.sh > /dev/null <<'EOF'
#!/bin/bash
GAME_DIR="/home/steam/7dtd"
DATA_DIR="/home/steam/7dtd-data"
WORLD_NAME="${WORLD_NAME:-Navezgane}"
MAX_PLAYERS="${MAX_PLAYERS:-8}"
SERVER_PORT="${SERVER_PORT:-26900}"
QUERY_PORT="${QUERY_PORT:-26900}"
cd "$GAME_DIR"
mkdir -p "$DATA_DIR/Saves"
mkdir -p "$DATA_DIR/Logs"
exec "$GAME_DIR/7DaysToDieServer.x86_64" \
-configfile="$DATA_DIR/serverconfig.xml" \
-savedir "$DATA_DIR/Saves" \
-serverport "$SERVER_PORT" \
-queryport "$QUERY_PORT" \
2>&1 | tee "$DATA_DIR/Logs/7dtd_$(date +%Y%m%d).log"
EOF
sudo chmod +x /home/steam/7dtd/start_server.sh
sudo chown steam:steam /home/steam/7dtd/start_server.sh
Serverconfig.xml Setup
Create comprehensive server configuration:
sudo tee /home/steam/7dtd-data/serverconfig.xml > /dev/null <<'EOF'
<?xml version="1.0" encoding="UTF-8"?>
<ServerSettings>
<property name="ServerName" value="My 7 Days Server" />
<property name="ServerDescription" value="Cooperative survival server" />
<property name="ServerPassword" value="" />
<property name="ServerAdminPassword" value="adminpass123" />
<property name="ServerPort" value="26900" />
<property name="QueryPort" value="26901" />
<property name="ServerIsPublic" value="true" />
<property name="GameWorld" value="Navezgane" />
<property name="GameName" value="My Game" />
<property name="GameDifficulty" value="2" />
<property name="MaxPlayers" value="8" />
<property name="PersistentPlayerProfiles" value="true" />
<property name="PlayerKillingMode" value="3" />
<property name="ControlPanelEnabled" value="false" />
<property name="ControlPanelPort" value="8080" />
<property name="TelnetEnabled" value="true" />
<property name="TelnetPort" value="8081" />
<property name="TelnetPassword" value="telnetpass" />
<property name="TerminalWindowEnabled" value="true" />
<!-- Gameplay Settings -->
<property name="DayNightLength" value="60" />
<property name="DayLightLength" value="18" />
<property name="DropOnDeath" value="1" />
<property name="DropOnQuit" value="1" />
<property name="BedrollDeadZoneSize" value="10" />
<property name="AllowCheats" value="false" />
<property name="LandClaimSize" value="41" />
<property name="LandClaimDeadZone" value="30" />
<property name="LandClaimExpiryTime" value="3" />
<property name="SafeZoneLevel" value="5" />
<!-- Performance Settings -->
<property name="MaxSpawnedZombies" value="64" />
<property name="MaxSpawnedAnimals" value="50" />
<property name="ResetHWAccel" value="true" />
<property name="EAC" value="true" />
<property name="SaveGameFolder" value="" />
<!-- Voice Communication -->
<property name="VoiceEnabled" value="true" />
<!-- Admin & Moderation -->
<property name="BanAdmins" value="true" />
<property name="AdminFileName" value="admin.xml" />
<property name="UserDataFolder" value="" />
</ServerSettings>
EOF
sudo chown steam:steam /home/steam/7dtd-data/serverconfig.xml
Configuration options explained:
GameWorld: Map to use (Navezgane, random seed number, or custom)GameDifficulty: 0=Scavenger, 1=Nomad, 2=Survivor, 3=Hardcore, 4=NightmareMaxPlayers: Maximum concurrent players (8, 16, 32, 64)PlayerKillingMode: 0=No PvP, 1=Kill Allowed, 2=Kill Friendly, 3=Kill AllLandClaimSize: Land protection area (smaller = less CPU intensive)MaxSpawnedZombies: Maximum zombies in world (higher = more challenging but resource-heavy)TelnetEnabled: Enable remote console accessEAC: Easy Anti-Cheat enabled
World Generation
Configure world generation options:
sudo tee /home/steam/7dtd-data/world-gen-settings.xml > /dev/null <<'EOF'
<?xml version="1.0" encoding="UTF-8"?>
<WorldGenSettings>
<!-- Map Settings -->
<WorldName value="CustomWorld" />
<Seed value="0" />
<WorldSize value="512" />
<!-- Terrain Generation -->
<TerrainRadius value="256" />
<HeightScale value="60" />
<TerrainScale value="32" />
<!-- POI (Points of Interest) -->
<POIMaxDistance value="1000" />
<POIMinDistance value="100" />
<POIDensity value="5" />
<!-- Biome Settings -->
<BiomesScale value="128" />
<BiomesBlend value="32" />
<!-- Water Settings -->
<WaterLevel value="32" />
</WorldGenSettings>
EOF
sudo chown steam:steam /home/steam/7dtd-data/world-gen-settings.xml
Create new world with custom seed:
# Stop server
sudo systemctl stop 7dtd.service
# Delete old world
rm -rf /home/steam/7dtd-data/Saves/Navezgane
# Server will generate new world on next start with provided seed
# Modify serverconfig.xml GameWorld value to: RandomSeed123456
sudo systemctl start 7dtd.service
Admin and Moderation
Create admin configuration file:
sudo tee /home/steam/7dtd-data/admin.xml > /dev/null <<'EOF'
<?xml version="1.0" encoding="UTF-8"?>
<AdminTools>
<permission name="kick">
<require_permission name="admin" />
</permission>
<permission name="ban">
<require_permission name="admin" />
</permission>
<permission name="unban">
<require_permission name="admin" />
</permission>
<permission name="say">
<require_permission name="moderator" />
</permission>
<permission name="teleport">
<require_permission name="admin" />
</permission>
<permission name="give">
<require_permission name="admin" />
</permission>
<permission name="god">
<require_permission name="admin" />
</permission>
<permission name="heal">
<require_permission name="admin" />
</permission>
<!-- Define admin users -->
<user steamid="76561198000000000" name="AdminName" permission_level="0" />
<user steamid="76561198000000001" name="ModeratorName" permission_level="1" />
</AdminTools>
EOF
sudo chown steam:steam /home/steam/7dtd-data/admin.xml
Common admin commands (via Telnet console):
# Player management
kick playername reason
ban playername
unban playername
banlist
adminadd playername
# Server control
say "Message to all players"
pm playername "Private message"
teleport playername x y z
# Game control
kick-inactive 5 # Kick players inactive 5+ days
reset-land-protections # Reset all land claims
remove-land-claim x y # Remove specific claim
# Info commands
players # List all players
list-players # Show player IDs
listknown # Show known players
getgameinfo # Server info
stats # Show statistics
# Difficulty commands
setgamedifficulty 3 # Change difficulty (0-4)
Connect to Telnet console:
telnet localhost 8081
# Enter password when prompted
help # Show all available commands
quit # Disconnect
Port Configuration
7 Days to Die uses specific ports:
# Game port (UDP)
GAME_PORT=26900
# Query port (UDP)
QUERY_PORT=26901
# Telnet console (TCP)
TELNET_PORT=8081
# Control panel (TCP, if enabled)
CONTROL_PANEL_PORT=8080
# Configure firewall
sudo ufw allow 26900/udp
sudo ufw allow 26901/udp
sudo ufw allow 8081/tcp
sudo ufw allow 8080/tcp
# For iptables
sudo iptables -A INPUT -p udp --dport 26900 -j ACCEPT
sudo iptables -A INPUT -p udp --dport 26901 -j ACCEPT
sudo iptables -A INPUT -p tcp --dport 8081 -j ACCEPT
# Verify ports
sudo netstat -tulnp | grep -E "26900|26901|8081"
Running with Systemd
Create systemd service:
sudo tee /etc/systemd/system/7dtd.service > /dev/null <<'EOF'
[Unit]
Description=7 Days to Die Server
After=network.target
Wants=network-online.target
[Service]
Type=simple
User=steam
Group=steam
WorkingDirectory=/home/steam/7dtd
EnvironmentFile=/home/steam/7dtd/server.env
ExecStart=/home/steam/7dtd/start_server.sh
Restart=on-failure
RestartSec=15
StandardOutput=journal
StandardError=journal
# Resource limits
LimitNOFILE=65536
LimitNPROC=16384
MemoryMax=20G
# Security
NoNewPrivileges=true
ProtectSystem=strict
ProtectHome=yes
ReadWritePaths=/home/steam/7dtd-data
[Install]
WantedBy=multi-user.target
EOF
Create environment file:
sudo tee /home/steam/7dtd/server.env > /dev/null <<'EOF'
WORLD_NAME=Navezgane
MAX_PLAYERS=8
SERVER_PORT=26900
QUERY_PORT=26901
EOF
sudo chown steam:steam /home/steam/7dtd/server.env
sudo chmod 600 /home/steam/7dtd/server.env
Enable and start:
sudo systemctl daemon-reload
sudo systemctl enable 7dtd.service
sudo systemctl start 7dtd.service
sudo systemctl status 7dtd.service
Monitor logs:
sudo journalctl -u 7dtd.service -f
tail -f /home/steam/7dtd-data/Logs/7dtd_$(date +%Y%m%d).log
Performance Optimization
Optimize system for 7 Days performance:
# Increase file limits
sudo sysctl -w fs.file-max=2097152
echo "fs.file-max=2097152" | sudo tee -a /etc/sysctl.conf
# Network optimization
sudo sysctl -w net.core.rmem_max=134217728
sudo sysctl -w net.core.wmem_max=134217728
# UDP optimization
sudo sysctl -w net.core.rmem_default=131072
sudo sysctl -w net.core.wmem_default=131072
# Apply changes
sudo sysctl -p
Monitor performance:
# CPU and memory usage
watch -n 1 'ps aux | grep 7DaysToDieServer | grep -v grep'
htop -p $(pgrep -f 7DaysToDieServer)
# Detailed process info
ps -o pid,vsz,rss,pcpu,pmem,comm $(pgrep -f 7DaysToDieServer)
# Disk I/O
iostat -x 1
# Network stats
iftop -i eth0
Reduce resource consumption:
# Lower MaxSpawnedZombies in serverconfig.xml
# Reduce LandClaimSize for faster performance
# Lower MaxPlayers if CPU becomes bottleneck
Backup and Recovery
Create automated backup script:
sudo tee /home/steam/backup_7dtd.sh > /dev/null <<'EOF'
#!/bin/bash
DATA_DIR="/home/steam/7dtd-data"
BACKUP_DIR="$DATA_DIR/backups"
RETENTION_DAYS=30
TIMESTAMP=$(date +%Y%m%d_%H%M%S)
mkdir -p "$BACKUP_DIR"
# Backup world saves
tar -czf "$BACKUP_DIR/7dtd_backup_${TIMESTAMP}.tar.gz" \
-C "$DATA_DIR" Saves/ \
2>/dev/null
if [ $? -eq 0 ]; then
SIZE=$(du -sh "$BACKUP_DIR/7dtd_backup_${TIMESTAMP}.tar.gz" | awk '{print $1}')
echo "[$(date)] Backup created: $SIZE"
else
echo "[$(date)] Backup failed!" >&2
exit 1
fi
# Cleanup old backups
find "$BACKUP_DIR" -name "7dtd_backup_*.tar.gz" -mtime +${RETENTION_DAYS} -delete
EOF
sudo chmod +x /home/steam/backup_7dtd.sh
sudo chown steam:steam /home/steam/backup_7dtd.sh
Add to crontab:
sudo tee -a /var/spool/cron/crontabs/steam > /dev/null <<'EOF'
0 2 * * * /home/steam/backup_7dtd.sh >> /home/steam/7dtd-data/Logs/backup.log 2>&1
EOF
Restore backup:
sudo systemctl stop 7dtd.service
BACKUP="/home/steam/7dtd-data/backups/7dtd_backup_20240101_020000.tar.gz"
sudo -u steam tar -xzf "$BACKUP" -C /home/steam/7dtd-data/
sudo systemctl start 7dtd.service
Monitoring
Create monitoring script:
sudo tee /home/steam/monitor_7dtd.sh > /dev/null <<'EOF'
#!/bin/bash
echo "=== 7 Days to Die Server Status ==="
echo ""
# Service status
if systemctl is-active --quiet 7dtd.service; then
echo "✓ Service is running"
else
echo "✗ Service is NOT running"
exit 1
fi
# Process info
PID=$(pgrep -f 7DaysToDieServer)
if [ ! -z "$PID" ]; then
MEM=$(ps -p $PID -o rss= | awk '{print $1/1024 " MB"}')
CPU=$(ps -p $PID -o %cpu= | awk '{print $1 "%"}')
echo "Memory: $MEM"
echo "CPU: $CPU"
fi
# Port status
echo ""
if ss -ulnp | grep -q "26900"; then
echo "✓ Game port 26900 listening"
else
echo "✗ Game port not listening"
fi
# Disk usage
echo ""
USAGE=$(df -h /home/steam/7dtd-data | awk 'NR==2 {print $5}')
echo "Disk usage: $USAGE"
# Recent errors
echo ""
ERRORS=$(tail -20 /home/steam/7dtd-data/Logs/7dtd_*.log 2>/dev/null | grep -i "error\|fatal" | wc -l)
echo "Recent errors: $ERRORS"
EOF
sudo chmod +x /home/steam/monitor_7dtd.sh
Conclusion
Your 7 Days to Die server is now fully configured with admin controls, world generation support, and automated backups. 7 Days to Die provides intense survival experiences with horde mechanics and cooperative gameplay.
Key takeaways:
- Configure difficulty and zombie spawning for your community
- Use Telnet console for easy admin management
- Implement regular backups before major updates
- Monitor server performance, especially zombie count
- Keep server updated with latest patches
- Use land claims to protect player creations
- Plan world resets periodically to refresh gameplay
A well-maintained 7 Days server can support engaging long-term survival experiences for your player community.


