Prérequis
- Un serveur sous Ubuntu, Debian, AlmaLinux, Rocky, CentOS, Fedora ou openSUSE : voir nos VPS au Canada
- Une connexion SSH ouverte en root : Se connecter en SSH à votre VPS
- 25 Go de disque libre et 4 Go de RAM
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).
apt update && apt upgrade -y... 212 upgraded, 8 newly installed, 0 to remove and 4 not upgraded. (les nombres dépendent de l'âge de l'image)
dnf upgrade -y... Complete!
dnf upgrade -y... Complete!
zypper -n refresh && zypper -n updateAll repositories have been refreshed. ...
dpkg --add-architecture i386 && apt update && apt install -y lib32gcc-s1 lib32stdc++6 curldnf install -y glibc.i686 libstdc++.i686dnf install -y glibc.i686 libstdc++.i686zypper -n install glibc-32bit libstdc++6-32bitopenSUSE 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).
sed -i 's/^GRUB_CMDLINE_LINUX_DEFAULT="/GRUB_CMDLINE_LINUX_DEFAULT="ia32_emulation=1 /' /etc/default/grub && grub2-mkconfig -o /boot/grub2/grub.cfg && rebootgrep -o ia32_emulation=1 /proc/cmdlineia32_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.
echo vm.max_map_count=262144 > /etc/sysctl.d/90-sdtd.conf && sysctl --system | grep max_map_countvm.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.
echo vm.max_map_count=262144 > /etc/sysctl.d/90-sdtd.conf && sysctl --system | grep max_map_countvm.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 ».
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.crtlrwxrwxrwx 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.
mkdir -p /opt/sdtd/server /opt/sdtd/steamcmd && useradd -r -s /bin/bash -d /opt/sdtd sdtd && chown -R sdtd:sdtd /opt/sdtdsu - sdtd -c "cd /opt/sdtd/steamcmd && curl -fsSL https://steamcdn-a.akamaihd.net/client/installer/steamcmd_linux.tar.gz | tar zxf - && ls"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.
su - sdtd -c "/opt/sdtd/steamcmd/steamcmd.sh +force_install_dir /opt/sdtd/server +login anonymous +app_update 294420 validate +quit"... Update state (0x101) committing, progress: 90.79 (15985749525 / 17607545324) Update state (0x0) unknown, progress: 0.00 (0 / 0) Success! App '294420' fully installed.
du -sh /opt/sdtd/server && ls -l /opt/sdtd/server/7DaysToDieServer.x86_6417G /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.
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.xmlname="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.
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/sdtdLe 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.
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.sh5Dé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.
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
EOFsystemctl daemon-reload && systemctl enable --now sdtdCreated 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.
systemctl is-active sdtd && grep 'StartGame done' /opt/sdtd/logs/server.log && ss -lunp | grep ':26900 '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))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())
EOFMon 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.
apt install -y ufw && ufw allow 22/tcp && ufw allow 26900/tcp && ufw allow 26900:26903/udp && ufw --force enable... Firewall is active and enabled on system startup
dnf install -y firewalld && systemctl enable --now firewalld && firewall-cmd --permanent --add-port=26900/tcp --add-port=26900-26903/udp && firewall-cmd --reload... success success
dnf install -y firewalld && systemctl enable --now firewalld && firewall-cmd --permanent --add-port=26900/tcp --add-port=26900-26903/udp && firewall-cmd --reload... success success
firewall-cmd --permanent --add-port=26900/tcp --add-port=26900-26903/udp && firewall-cmd --reloadsuccess success
7Se connecter au serveur
- Lancez 7 Days to Die et ouvrez la liste des serveurs (Rejoindre une partie).
- Utilisez la connexion par adresse IP : l'adresse de votre serveur (203.0.113.42) et le port 26900.
- 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.
/opt/sdtd/cmd.sh 'say "Bonjour à tous"'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.
/opt/sdtd/cmd.sh admin add Steam_76561198000000000 0 && /opt/sdtd/cmd.sh admin listSteam_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)lpgettimesaveworld'say "Bonjour à tous"'admin add Steam_ID 0kick NomDuJoueurwhitelist add Steam_IDsettime dayversionshutdown9Gérer, sauvegarder et mettre à jour le serveur
systemctl status sdtdtail -f /opt/sdtd/logs/server.logsystemctl restart sdtdsystemctl stop sdtdsystemctl stop sdtd && grep -E 'Preparing quit|SaveAndCleanupWorld' /opt/sdtd/logs/server.log && systemctl start sdtd2026-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.
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.shsu - sdtd -c '/opt/sdtd/backup.sh && ls -la /opt/sdtd/backups'-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é)
apt install -y cron && systemctl enable --now crondnf install -y cronie && systemctl enable --now cronddnf install -y cronie && systemctl enable --now crondzypper -n install cronie && systemctl enable --now cronsu - sdtd -c '(crontab -l 2>/dev/null; echo "0 4 * * * /opt/sdtd/backup.sh") | crontab - && crontab -l'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.
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... 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
L'image du serveur a été construite sur un autre disque et GRUB demande où se réinstaller : choisissez le disque de la machine (celui que lsblk affiche, en général /dev/sda) ; la mise à jour continue ensuite.
Un raté passager côté Steam : relancez la même commande, le téléchargement reprend.
Le système n'a pas été mis à jour avant : faites la première boîte de l'étape 1, puis réessayez.
Les programmes 32 bits sont désactivés dans le noyau : appliquez la dernière boîte de l'étape 1 et redémarrez.
Plusieurs serveurs de jeux tournent sur la même machine, chacun avec son utilisateur, et SteamCMD a déjà créé dix dossiers /tmp/dumps, /tmp/dumps01... /tmp/dumps09 qui appartiennent aux autres : lancez rm -rf /tmp/dumps* en root, puis relancez la commande.
Le serveur n'a pas de carte graphique et le dit pour chaque effet visuel : sans conséquence, le démarrage continue jusqu'à « StartGame done ».
Le serveur ne trouve pas les certificats racine et ne peut pas joindre les services en ligne du jeu. C'est le cas d'openSUSE : faites le lien de la dernière boîte de l'étape 1, puis systemctl start sdtd.
La limite du noyau est celle par défaut d'AlmaLinux, Rocky, CentOS et openSUSE : appliquez la boîte sysctl de l'étape 1, puis systemctl restart sdtd.
Le serveur a rencontré une erreur et a quitté proprement (code 0), ce que Restart=on-failure ne relance pas. Les lignes ERR de /opt/sdtd/logs/server.log disent laquelle : certificats sur openSUSE, ou une ligne fausse dans serverconfig.xml.
Le serveur n'est pas démarré, ou pas encore : la console ouvre au bout de quelques secondes (« Started Telnet on 8081 » dans server.log). Vérifiez systemctl is-active sdtd.
La console du serveur n'est pas dans le journal de systemd mais dans /opt/sdtd/logs/server.log, celui que start.sh lui donne.
Ports fermés (étape 6), serveur pas encore démarré (« StartGame done » dans server.log), ou mauvais mot de passe. La sonde de l'étape 5, lancée depuis une autre machine avec l'adresse du serveur, dit si le port répond de l'extérieur.
Ils étaient dans /opt/sdtd/server/serverconfig.xml, que SteamCMD remet à zéro. Le fichier à modifier est /opt/sdtd/serverconfig.xml (étape 4), celui que start.sh passe au serveur.