Installer un serveur 7 Days to Die sur Linux (Ubuntu, Debian, AlmaLinux)

Tutoriels Linux › Serveurs de jeux

Documentation / Tutoriels Linux / Serveurs de jeux / Installer un serveur 7 Days to Die sur Linux (Ubuntu, Debian, AlmaLinux)
Mis à jour le 08/10/2026
320 vues
Intermédiaire
40 minutes

Prérequis

Votre serveur :

Ce guide installe le serveur dédié 7 Days to Die avec SteamCMD, l'outil de Valve : un utilisateur dédié, le serveur (17 Go), son fichier de réglages, une console qu'on commande depuis le terminal, un service qui démarre le serveur avec la machine, le pare-feu, la connexion depuis le jeu, la sauvegarde de nuit et la mise à jour. Choisissez votre système ci-dessus. Copiez la commande avec le bouton Copier, collez-la dans votre terminal, et comparez avec le résultat attendu.

1Mettre à jour le système et installer les bibliothèques 32 bits

SteamCMD, l'outil de Valve qui télécharge les serveurs de jeux, est un programme 32 bits : il lui faut les bibliothèques 32 bits du système. On met d'abord le système à jour ; sans cela, l'installation 32 bits échoue sur AlmaLinux, Rocky, CentOS et Fedora (conflit avec une bibliothèque plus ancienne), et SteamCMD ne peut pas joindre Steam sur une Fedora fraîche (certificats absents).

Mettre à jour le système
apt update && apt upgrade -y
Résultat attendu
...
212 upgraded, 8 newly installed, 0 to remove and 4 not upgraded.
(les nombres dépendent de l'âge de l'image)
Mettre à jour le système
dnf upgrade -y
Résultat attendu
...
Complete!
Mettre à jour le système
dnf upgrade -y
Résultat attendu
...
Complete!
Mettre à jour le système
zypper -n refresh && zypper -n update
Résultat attendu
All repositories have been refreshed.
...
Installer les bibliothèques 32 bits et curl
dpkg --add-architecture i386 && apt update && apt install -y lib32gcc-s1 lib32stdc++6 curl
Installer les bibliothèques 32 bits
dnf install -y glibc.i686 libstdc++.i686
Installer les bibliothèques 32 bits
dnf install -y glibc.i686 libstdc++.i686
Installer les bibliothèques 32 bits
zypper -n install glibc-32bit libstdc++6-32bit

openSUSE Leap 16 livre son noyau avec l'exécution des programmes 32 bits désactivée : sans cette étape, SteamCMD répond « Exec format error ». On l'active dans GRUB et on redémarre (reconnectez-vous en SSH après une minute).

Activer les programmes 32 bits dans le noyau, puis redémarrer
sed -i 's/^GRUB_CMDLINE_LINUX_DEFAULT="/GRUB_CMDLINE_LINUX_DEFAULT="ia32_emulation=1 /' /etc/default/grub && grub2-mkconfig -o /boot/grub2/grub.cfg && reboot
Après le redémarrage : vérifier que l'option est active
grep -o ia32_emulation=1 /proc/cmdline
Résultat attendu
ia32_emulation=1

Le serveur demande au noyau plus de zones mémoire qu'AlmaLinux, Rocky et CentOS n'en accordent par défaut (65530) ; sans ce réglage, son journal avertit « The vm.max_map_count setting is too low ». La valeur est celle que le serveur demande.

Relever la limite de zones mémoire du noyau
echo vm.max_map_count=262144 > /etc/sysctl.d/90-sdtd.conf && sysctl --system | grep max_map_count
Résultat attendu
vm.max_map_count = 262144

Le serveur demande au noyau plus de zones mémoire qu'openSUSE n'en accorde par défaut (65530) ; sans ce réglage, son journal avertit « The vm.max_map_count setting is too low ». La valeur est celle que le serveur demande.

Relever la limite de zones mémoire du noyau
echo vm.max_map_count=262144 > /etc/sysctl.d/90-sdtd.conf && sysctl --system | grep max_map_count
Résultat attendu
vm.max_map_count = 262144

Le serveur cherche les certificats racine dans /etc/ssl/certs/ca-certificates.crt, qu'openSUSE range ailleurs : sans ce lien, il s'arrête au démarrage sur « No connection to EOS backend ».

Donner au serveur les certificats racine du système
mkdir -p /etc/ssl/certs && ln -s /etc/ssl/ca-bundle.pem /etc/ssl/certs/ca-certificates.crt && ls -l /etc/ssl/certs/ca-certificates.crt
Résultat attendu
lrwxrwxrwx 1 root root 22 Sep 21 05:41 /etc/ssl/certs/ca-certificates.crt -> /etc/ssl/ca-bundle.pem

2Créer un utilisateur dédié et installer SteamCMD

Le serveur ne tourne jamais en root : un utilisateur sdtd, dont le dossier personnel est /opt/sdtd, possède SteamCMD et le serveur. Le dossier est créé avant l'utilisateur : sur Rocky et CentOS, SELinux refuse à useradd de le créer lui-même sous /opt.

Créer les dossiers et l'utilisateur sdtd
mkdir -p /opt/sdtd/server /opt/sdtd/steamcmd && useradd -r -s /bin/bash -d /opt/sdtd sdtd && chown -R sdtd:sdtd /opt/sdtd
Télécharger SteamCMD (en tant que sdtd)
su - sdtd -c "cd /opt/sdtd/steamcmd && curl -fsSL https://steamcdn-a.akamaihd.net/client/installer/steamcmd_linux.tar.gz | tar zxf - && ls"
Résultat attendu
linux32
steamcmd.sh

3Télécharger le serveur 7 Days to Die (17 Go)

SteamCMD se met à jour puis télécharge l'application 294420, le serveur dédié 7 Days to Die. Comptez de cinq à quinze minutes selon la machine. Il arrive souvent que le premier passage se termine sur « ERROR! Failed to install app '294420' (Missing configuration) » sans rien télécharger : relancez la même commande, elle passe.

Installer le serveur 7 Days to Die
su - sdtd -c "/opt/sdtd/steamcmd/steamcmd.sh +force_install_dir /opt/sdtd/server +login anonymous +app_update 294420 validate +quit"
Résultat attendu
... Update state (0x101) committing, progress: 90.79 (15985749525 / 17607545324)
 Update state (0x0) unknown, progress: 0.00 (0 / 0)
Success! App '294420' fully installed.
Vérifier la taille et la présence du lanceur
du -sh /opt/sdtd/server && ls -l /opt/sdtd/server/7DaysToDieServer.x86_64
Résultat attendu
17G	/opt/sdtd/server
-rwxrwxr-x 1 sdtd sdtd 14800 Sep 21 02:15 /opt/sdtd/server/7DaysToDieServer.x86_64
(18G sur AlmaLinux ; la date varie)

4Écrire les réglages du serveur et le script de démarrage

Le serveur lit ses réglages dans un fichier XML. On travaille sur une copie placée hors du dossier du serveur : la mise à jour de l'étape 9 remet les fichiers d'origine, et écraserait vos réglages s'ils étaient dedans. La commande change le nom du serveur et pose un mot de passe ; changez-les.

Copier le fichier de réglages, y mettre le nom et le mot de passe
cp /opt/sdtd/server/serverconfig.xml /opt/sdtd/serverconfig.xml
sed -i -e 's/name="ServerName"\([[:space:]]*\)value="[^"]*"/name="ServerName"\1value="Mon serveur 7 Days to Die"/' -e 's/name="ServerPassword"\([[:space:]]*\)value="[^"]*"/name="ServerPassword"\1value="ChangezMoi"/' /opt/sdtd/serverconfig.xml
chown sdtd:sdtd /opt/sdtd/serverconfig.xml
grep -oE 'name="(ServerName|ServerPassword)"[[:space:]]+value="[^"]*"' /opt/sdtd/serverconfig.xml
Résultat attendu
name="ServerName"						value="Mon serveur 7 Days to Die"
name="ServerPassword"					value="ChangezMoi"

Les autres réglages se changent dans le même fichier (nano /opt/sdtd/serverconfig.xml), chacun sur sa ligne property, puis systemctl restart sdtd une fois le service en place :

ServerMaxPlayerCount
Le nombre de places (8)
GameWorld
Navezgane, la carte livrée avec le jeu ; RWG génère un monde aléatoire selon WorldGenSeed et WorldGenSize
GameName
Le nom de la partie : un nouveau nom repart d'une sauvegarde vide
Region, Language
La région (NorthAmericaEast) et la langue affichées dans la liste des serveurs
ServerVisibility
2 : dans la liste publique ; 0 : joignable par adresse seulement
TelnetPassword
Laissez-le vide : la console reste alors fermée au réseau, réservée à la machine
SandboxCode
La difficulté et les règles, codées ; le code se copie depuis l'écran des options du jeu

Le script de démarrage lance le serveur avec sa copie des réglages et écrit sa console dans /opt/sdtd/logs/server.log, remplacé à chaque démarrage.

Créer start.sh
mkdir -p /opt/sdtd/logs
cat > /opt/sdtd/start.sh << 'EOF'
#!/bin/sh
cd /opt/sdtd/server
export LD_LIBRARY_PATH=.
exec ./7DaysToDieServer.x86_64 -logfile /opt/sdtd/logs/server.log -quit -batchmode -nographics -dedicated -configfile=/opt/sdtd/serverconfig.xml
EOF
chmod +x /opt/sdtd/start.sh && chown -R sdtd:sdtd /opt/sdtd

Le serveur écoute les commandes sur le port 8081, réservé à la machine (telnet). Le script cmd.sh y envoie une commande et affiche la réponse ; il sert aux étapes 8 et 9.

Créer cmd.sh
cat > /opt/sdtd/cmd.sh << 'EOF'
#!/bin/bash
# Envoie une commande a la console du serveur (telnet local, port 8081) et affiche sa reponse
exec 3<>/dev/tcp/127.0.0.1/8081
sleep 1
printf '%s\n' "$*" >&3
sleep 2
printf 'exit\n' >&3
timeout 3 cat <&3 | tr -d '\r' | sed -n '/Executing command/,$p' | grep -v 'Executing command\|Telnet connection closed'
EOF
chmod +x /opt/sdtd/cmd.sh && chown sdtd:sdtd /opt/sdtd/cmd.sh

5Démarrer le serveur comme un service

Le service lance start.sh avec l'utilisateur sdtd, relance le serveur s'il plante et le démarre avec la machine. Arrêté par systemctl stop, le serveur sauvegarde le monde avant de quitter.

Créer le service sdtd
cat > /etc/systemd/system/sdtd.service << 'EOF'
[Unit]
Description=Serveur 7 Days to Die
After=network.target

[Service]
User=sdtd
Group=sdtd
WorkingDirectory=/opt/sdtd/server
ExecStart=/opt/sdtd/start.sh
Restart=on-failure
RestartSec=15
LimitNOFILE=100000

[Install]
WantedBy=multi-user.target
EOF
Activer et démarrer le service
systemctl daemon-reload && systemctl enable --now sdtd
Résultat attendu
Created symlink /etc/systemd/system/multi-user.target.wants/sdtd.service → /etc/systemd/system/sdtd.service.

Le démarrage prend environ une minute : le journal se termine par « StartGame done », le port 26900 est ouvert, et la sonde ci-dessous interroge le serveur comme le fait la liste des serveurs. Le serveur prend 2,2 Go de mémoire sans joueur.

Une minute plus tard : le serveur est démarré et écoute
systemctl is-active sdtd && grep 'StartGame done' /opt/sdtd/logs/server.log && ss -lunp | grep ':26900 '
Résultat attendu
active
2026-09-21T02:24:44 48.911 INF StartGame done
UNCONN 0      0            0.0.0.0:26900      0.0.0.0:*    users:(("7DaysToDieServe",pid=38501,fd=70))
Interroger le serveur comme le fait la liste des serveurs
python3 - 127.0.0.1 << 'EOF'
import socket, sys
h = sys.argv[1]
s = socket.socket(socket.AF_INET, socket.SOCK_DGRAM); s.settimeout(5)
q = b'\xff\xff\xff\xffTSource Engine Query\x00'
s.sendto(q, (h, 26900)); r = s.recvfrom(4096)[0]
if r[4:5] == b'A':
    s.sendto(q + r[5:9], (h, 26900)); r = s.recvfrom(4096)[0]
p = r[6:].split(b'\x00')
print(p[0].decode(), '|', p[1].decode(), '|', p[2].decode(), '|', p[3].decode())
EOF
Résultat attendu
Mon serveur 7 Days to Die | Navezgane | 7DTD | 7 Days To Die

6Ouvrir les ports dans le pare-feu

Le jeu utilise le port 26900 en TCP et en UDP, et les ports UDP 26901 à 26903. La commande active le pare-feu du système en gardant SSH autorisé, puis ouvre les ports.

Activer le pare-feu (SSH reste autorisé) et ouvrir les ports du jeu
apt install -y ufw && ufw allow 22/tcp && ufw allow 26900/tcp && ufw allow 26900:26903/udp && ufw --force enable
Résultat attendu
...
Firewall is active and enabled on system startup
Activer le pare-feu (SSH reste autorisé) et ouvrir les ports du jeu
dnf install -y firewalld && systemctl enable --now firewalld && firewall-cmd --permanent --add-port=26900/tcp --add-port=26900-26903/udp && firewall-cmd --reload
Résultat attendu
...
success
success
Activer le pare-feu (SSH reste autorisé) et ouvrir les ports du jeu
dnf install -y firewalld && systemctl enable --now firewalld && firewall-cmd --permanent --add-port=26900/tcp --add-port=26900-26903/udp && firewall-cmd --reload
Résultat attendu
...
success
success
Ouvrir les ports du jeu (firewalld est déjà actif sur openSUSE)
firewall-cmd --permanent --add-port=26900/tcp --add-port=26900-26903/udp && firewall-cmd --reload
Résultat attendu
success
success

7Se connecter au serveur

  1. Lancez 7 Days to Die et ouvrez la liste des serveurs (Rejoindre une partie).
  2. Utilisez la connexion par adresse IP : l'adresse de votre serveur (203.0.113.42) et le port 26900.
  3. Entrez le mot de passe de serverconfig.xml.

Le temps de jeu ne s'écoule que lorsqu'un joueur est connecté : un serveur vide reste au jour 1, 7 h.

8Commander le serveur depuis le terminal

Chaque commande passe par cmd.sh, qui rend la réponse du serveur. Les commandes s'écrivent en anglais ; help les liste toutes (198), help suivi d'un nom détaille l'une d'elles.

Envoyer un message aux joueurs (les guillemets gardent la phrase entière)
/opt/sdtd/cmd.sh 'say "Bonjour à tous"'
Résultat attendu
2026-09-21T03:00:13 75.613 INF Chat (from '-non-player-', entity id '-1', to 'Global'): Bonjour à tous

Un administrateur se déclare par son identifiant Steam à 17 chiffres (SteamID64), précédé de Steam_ ; l'identifiant d'un joueur s'inscrit dans server.log quand il se connecte. Le niveau 0 donne tous les droits, dans le jeu comme sur la console.

Déclarer un administrateur (remplacez l'identifiant), puis lister les droits
/opt/sdtd/cmd.sh admin add Steam_76561198000000000 0 && /opt/sdtd/cmd.sh admin list
Résultat attendu
Steam_76561198000000000 added with permission level of 0.
Defined User Permissions:
  Level: UserID (Player name if online, stored name)
      0: Steam_76561198000000000 (stored name: )
Defined Group Permissions:
  Normal,  Mods: SteamID (Stored name)
Liste les joueurs connectés (« Total of 0 in the game »)
lp
L'heure du jeu (« Day 1, 07:00 »)
gettime
Sauvegarde le monde tout de suite (« World saved »)
saveworld
Message à tous les joueurs ; sans les guillemets, seul le premier mot part
'say "Bonjour à tous"'
Donne tous les droits à un joueur ; admin remove Steam_ID les retire
admin add Steam_ID 0
Expulse un joueur ; ban add NomDuJoueur 1 week le bannit
kick NomDuJoueur
Réserve le serveur aux joueurs listés : la liste s'active à la première entrée, se vide avec whitelist remove
whitelist add Steam_ID
Passe à midi (« Set time to 12000 ») ; settime night, à minuit ; settime 3 8 0 au jour 3, 8 h
settime day
La version du serveur et des modules chargés
version
Sauvegarde et arrête le serveur (c'est ce que fait systemctl stop sdtd)
shutdown

9Gérer, sauvegarder et mettre à jour le serveur

Voir l'état du service
systemctl status sdtd
Suivre la console du serveur en direct (Ctrl+C pour sortir)
tail -f /opt/sdtd/logs/server.log
Redémarrer
systemctl restart sdtd
Arrêter
systemctl stop sdtd
Vérifier que l'arrêt a sauvegardé
systemctl stop sdtd && grep -E 'Preparing quit|SaveAndCleanupWorld' /opt/sdtd/logs/server.log && systemctl start sdtd
Résultat attendu
2026-09-21T03:00:18 80.668 INF Preparing quit
2026-09-21T03:00:18 80.675 INF SaveAndCleanupWorld

Le monde vit dans /opt/sdtd/.local/share/7DaysToDie/Saves, avec serveradmin.xml (droits, bannissements). Le script ci-dessous demande une sauvegarde au serveur (serveur arrêté ou en cours de démarrage, il archive la dernière écrite), puis archive les sauvegardes et les réglages ; chaque nuit, il conserve les 7 dernières archives.

Créer le script de sauvegarde
cat > /opt/sdtd/backup.sh << 'EOF'
#!/bin/bash
BACKUP_DIR=/opt/sdtd/backups
DATE=$(date +%Y-%m-%d_%H-%M)
mkdir -p $BACKUP_DIR
/opt/sdtd/cmd.sh saveworld > /dev/null 2>&1
tar -czf $BACKUP_DIR/sdtd-$DATE.tar.gz -C /opt/sdtd .local/share/7DaysToDie/Saves serverconfig.xml
cd $BACKUP_DIR && ls -t | tail -n +8 | xargs -r rm
EOF
chmod +x /opt/sdtd/backup.sh && chown sdtd:sdtd /opt/sdtd/backup.sh
Tester une sauvegarde tout de suite
su - sdtd -c '/opt/sdtd/backup.sh && ls -la /opt/sdtd/backups'
Résultat attendu
-rw-rw-r-- 1 sdtd sdtd 1801407 Sep 21 02:45 sdtd-2026-09-21_02-45.tar.gz
(la taille grandit avec le monde exploré)
Installer et démarrer cron
apt install -y cron && systemctl enable --now cron
Installer et démarrer cron
dnf install -y cronie && systemctl enable --now crond
Installer et démarrer cron
dnf install -y cronie && systemctl enable --now crond
Installer et démarrer cron
zypper -n install cronie && systemctl enable --now cron
Programmer la sauvegarde chaque nuit à 4 h
su - sdtd -c '(crontab -l 2>/dev/null; echo "0 4 * * * /opt/sdtd/backup.sh") | crontab - && crontab -l'
Résultat attendu
0 4 * * * /opt/sdtd/backup.sh

Après une mise à jour du jeu, les joueurs à jour ne peuvent plus entrer sur un serveur en retard : la mise à jour est la même commande que l'installation, serveur arrêté. Vos réglages, hors du dossier du serveur, ne bougent pas.

Mettre à jour le serveur (serveur arrêté, puis relancé)
systemctl stop sdtd && su - sdtd -c "/opt/sdtd/steamcmd/steamcmd.sh +force_install_dir /opt/sdtd/server +login anonymous +app_update 294420 +quit" && systemctl start sdtd
Résultat attendu
... Success! App '294420' already up to date.
(« fully installed » quand une mise à jour a été téléchargée)
Serveur prêt

Votre serveur 7 Days to Die démarre avec la machine, sauvegarde son monde à l'arrêt et chaque nuit, et écoute sur le port 26900. La même base SteamCMD sert aux autres serveurs de jeux.

Erreurs fréquentes

💬 Écrivez-nous sur Messenger !