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
- 8 Go de disque libre (le serveur pèse 3,2 Go)
- 8 Go de RAM au minimum (le serveur en occupe 6,5 Go sans joueur, davantage avec)
- Une adresse IPv4 publique : le serveur teste lui-même ses ports sur cette adresse au démarrage
Sons of the Forest n'existe qu'en serveur Windows. Ce guide le fait tourner sous Linux avec GE-Proton, la couche de compatibilité de Steam dans sa version communautaire, et un écran virtuel (le serveur en exige un) : un utilisateur dédié, SteamCMD, le serveur (3,2 Go), la bibliothèque Steam que Proton exige, Proton, la configuration (nom, mot de passe, propriétaires), le pare-feu (le serveur teste ses ports au démarrage), un service qui démarre avec la machine et arrête le serveur en sauvegardant, la connexion depuis le jeu 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
Proton a besoin de la bibliothèque Vulkan du système, même sans carte graphique : sans elle, il s'arrête sur « libvulkan.so.1: cannot open shared object file ». Le serveur, lui, exige un écran X même sans rien afficher : Xvfb est cet écran virtuel.
apt install -y libvulkan1 xvfbdnf install -y vulkan-loader xorg-x11-server-Xvfbdnf install -y vulkan-loader xorg-x11-server-Xvfbzypper -n install libvulkan1 xorg-x11-server-Xvfb2Créer un utilisateur dédié et installer SteamCMD
Le serveur ne tourne jamais en root : un utilisateur sotf, dont le dossier personnel est /opt/sotf, 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/sotf/server /opt/sotf/steamcmd && useradd -r -s /bin/bash -d /opt/sotf sotf && chown -R sotf:sotf /opt/sotfsu - sotf -c "cd /opt/sotf/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 Sons of the Forest (3,2 Go)
SteamCMD pour Linux sait télécharger une application Windows : l'option @sSteamCmdForcePlatformType windows le lui demande. L'application 2465200 est le serveur dédié Sons of the Forest, 3,2 Go. Si la commande se termine sur « Missing configuration », relancez-la : c'est un raté passager de Steam, fréquent avec cette application.
su - sotf -c "/opt/sotf/steamcmd/steamcmd.sh +@sSteamCmdForcePlatformType windows +force_install_dir /opt/sotf/server +login anonymous +app_update 2465200 validate +quit"... Success! App '2465200' fully installed.
ls /opt/sotf/server/SonsOfTheForestDS.exe && du -sh /opt/sotf/server/opt/sotf/server/SonsOfTheForestDS.exe 3.3G /opt/sotf/server
4Installer la bibliothèque Steam que Proton exige
Le serveur parle à Steam (liste des serveurs, connexions des joueurs) à travers Proton, qui cherche la bibliothèque Steam native dans ~/.steam/sdk64/steamclient.so. Sans elle, le journal du serveur s'arrête sur « [Self-Tests] [Networking] Testing public accessibility... » et rien ne suit. SteamCMD a téléchargé cette bibliothèque à son premier lancement (linux64/steamclient.so) : un lien suffit.
su - sotf -c "mkdir -p /opt/sotf/.steam/sdk64 && ln -sf /opt/sotf/steamcmd/linux64/steamclient.so /opt/sotf/.steam/sdk64/steamclient.so && ls -l /opt/sotf/.steam/sdk64/"total 0 lrwxrwxrwx 1 sotf sotf 41 Sep 22 03:15 steamclient.so -> /opt/sotf/steamcmd/linux64/steamclient.so
5Installer GE-Proton
Proton est la couche qui fait tourner les programmes Windows dans Steam ; GE-Proton en est une version communautaire utilisable sans le client Steam. La version 10-34 est celle qui fonctionne sur tous les systèmes de ce guide.
su - sotf -c "mkdir -p /opt/sotf/proton && cd /opt/sotf/proton && curl -fsSL https://github.com/GloriousEggroll/proton-ge-custom/releases/download/GE-Proton10-34/GE-Proton10-34.tar.gz | tar xzf - && ls"GE-Proton10-34
SELinux, en mode strict sur Rocky et CentOS (permissif sur AlmaLinux), refuse à Proton de charger ses fichiers Windows : le service tourne en boucle sans créer le journal du serveur, et /var/log/audit/audit.log montre « denied { execmod } ... comm="wine64" ». On marque le dossier /opt/sotf comme contenant des bibliothèques de ce type.
dnf install -y policycoreutils-python-utils && semanage fcontext -a -t textrel_shlib_t '/opt/sotf(/.*)?' && restorecon -R /opt/sotf6Écrire la configuration, la liste des propriétaires et l'identifiant Steam
Le serveur vérifie au démarrage que trois fichiers existent : dans son dossier de données (/opt/sotf/data), dedicatedserver.cfg, la configuration, et ownerswhitelist.txt, les joueurs qui l'administrent en jeu (un SteamID64 par ligne) ; à côté de l'exécutable, steam_appid.txt, l'identifiant Steam du jeu (1326470), que le script de lancement Windows écrit lui-même. Sans eux, il les crée avec des valeurs par défaut puis attend sans rien faire, journal désactivé. On les écrit avant le premier démarrage : changez le nom, le mot de passe (ChangezMoi) et l'identifiant Steam du propriétaire (76561198000000000 par le vôtre, visible sur https://store.steampowered.com/account/). LogFilesEnabled à true fait écrire le journal du serveur dans /opt/sotf/data/logs.
mkdir -p /opt/sotf/data
cat > /opt/sotf/data/dedicatedserver.cfg << 'EOF'
{
"IpAddress": "0.0.0.0",
"GamePort": 8766,
"QueryPort": 27016,
"BlobSyncPort": 9700,
"ServerName": "Mon serveur Sons of the Forest",
"MaxPlayers": 8,
"Password": "ChangezMoi",
"LanOnly": false,
"SaveSlot": 1,
"SaveMode": "Continue",
"GameMode": "Normal",
"SaveInterval": 600,
"IdleDayCycleSpeed": 0.0,
"IdleTargetFramerate": 5,
"ActiveTargetFramerate": 60,
"LogFilesEnabled": true,
"TimestampLogFilenames": true,
"TimestampLogEntries": true,
"SkipNetworkAccessibilityTest": false,
"GameSettings": {},
"CustomGameModeSettings": {}
}
EOF
echo 76561198000000000 > /opt/sotf/data/ownerswhitelist.txt
printf 1326470 > /opt/sotf/server/steam_appid.txt
chown -R sotf:sotf /opt/sotf/data /opt/sotf/server/steam_appid.txt && ls /opt/sotf/data && cat /opt/sotf/server/steam_appid.txtdedicatedserver.cfg ownerswhitelist.txt 1326470
ServerName, Password- Le nom dans la liste des serveurs et le mot de passe demandé aux joueurs (vide = serveur ouvert)
MaxPlayers- Le nombre de joueurs, de 1 à 8
GameMode- Normal, Hard, Peaceful, Creative ou Custom (avec CustomGameModeSettings)
SaveSlot, SaveMode- L'emplacement de sauvegarde et Continue (reprend la partie) ou New (recommence à chaque démarrage)
SaveInterval- Sauvegarde automatique toutes les 600 secondes
GamePort, QueryPort, BlobSyncPort- Les trois ports UDP : 8766, 27016 et 9700
LanOnly- true pour ne pas apparaître dans la liste publique
7Ouvrir les ports dans le pare-feu
Le serveur teste lui-même ses trois ports UDP (8766, 27016, 9700) sur l'adresse publique à chaque démarrage et, d'après son guide officiel, ne démarre pas si l'un d'eux est fermé : le pare-feu s'ouvre avant le premier lancement. 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 8766/udp && ufw allow 27016/udp && ufw allow 9700/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=8766/udp --add-port=27016/udp --add-port=9700/udp && firewall-cmd --reload... success success
dnf install -y firewalld && systemctl enable --now firewalld && firewall-cmd --permanent --add-port=8766/udp --add-port=27016/udp --add-port=9700/udp && firewall-cmd --reload... success success
firewall-cmd --permanent --add-port=8766/udp --add-port=27016/udp --add-port=9700/udp && firewall-cmd --reloadsuccess success
ufw statusStatus: active 22/tcp ALLOW Anywhere 8766/udp ALLOW Anywhere 27016/udp ALLOW Anywhere 9700/udp ALLOW Anywhere
firewall-cmd --list-ports8766/udp 27016/udp 9700/udp
firewall-cmd --list-ports8766/udp 27016/udp 9700/udp
firewall-cmd --list-ports8766/udp 27016/udp 9700/udp
8Créer le script de démarrage et le service
Le script lance l'écran virtuel Xvfb, puis le serveur dessus avec Proton en mode OpenGL (PROTON_USE_WINED3D=1) : avec sa traduction Vulkan habituelle, Proton plante sur l'écran virtuel avant même d'écrire le journal. À l'arrêt du service, le script envoie au serveur le signal Ctrl+C, qui le fait sauvegarder et quitter, puis ferme l'écran. Le premier démarrage passe les tests puis charge le monde : comptez deux minutes avant « Dedicated server loaded ».
mkdir -p /opt/sotf/steam /opt/sotf/prefix
cat > /opt/sotf/start.sh << 'EOF'
#!/bin/sh
# Ecran X virtuel (Xvfb) + Proton en mode OpenGL (wined3d : la traduction Vulkan plante sur cet ecran) ; a l'arret, le serveur quitte d'abord (Ctrl+C), l'ecran ensuite
export STEAM_COMPAT_CLIENT_INSTALL_PATH=/opt/sotf/steam
export STEAM_COMPAT_DATA_PATH=/opt/sotf/prefix
export PROTON_USE_WINED3D=1
cd /opt/sotf/server
Xvfb :99 -screen 0 1024x768x24 -nolisten tcp &
XPID=$!
DISPLAY=:99 /opt/sotf/proton/GE-Proton10-34/proton run ./SonsOfTheForestDS.exe -userdatapath /opt/sotf/data &
PID=$!
trap 'pkill -INT -x SonsOfTheForest; wait $PID; kill $XPID; exit 0' TERM
wait $PID
kill $XPID
EOF
chmod +x /opt/sotf/start.sh && chown -R sotf:sotf /opt/sotfcat > /etc/systemd/system/sotf.service << 'EOF'
[Unit]
Description=Serveur Sons of the Forest
After=network.target
[Service]
User=sotf
Group=sotf
WorkingDirectory=/opt/sotf
ExecStart=/opt/sotf/start.sh
KillMode=mixed
TimeoutStopSec=120
Restart=on-failure
RestartSec=30
[Install]
WantedBy=multi-user.target
EOFsystemctl daemon-reload && systemctl enable --now sotfCreated symlink /etc/systemd/system/multi-user.target.wants/sotf.service → /etc/systemd/system/sotf.service.
systemctl is-active sotf && grep -h 'is open\|Self tests passed\|Steam server created\|Dedicated server loaded' "$(ls -t /opt/sotf/data/logs/*.txt | head -n 1)" && ss -lunp | grep '8766\|27016\|9700' | awk '{print $4}' | sortactive [03:16:11.989][Log] [Self-Tests] [Networking] UDP GamePort [8766] is open. [03:16:12.022][Log] [Self-Tests] [Networking] UDP QueryPort [27016] is open. [03:16:12.055][Log] [Self-Tests] [Networking] UDP BlobSyncPort [9700] is open. [03:16:12.055][Log] [Self-Tests] Self tests passed. [03:16:16.001][Log] Steam server created. [03:16:59.753][Log] Dedicated server loaded. 0.0.0.0:27016 0.0.0.0:8766 0.0.0.0:9700
9Gérer et sauvegarder le serveur
Le monde vit dans /opt/sotf/data/Saves/DedicatedServer/Multiplayer/0000000001 (l'emplacement 1) : le serveur y écrit toutes les dix minutes (SaveInterval) et à chaque arrêt du service. Chaque changement de dedicatedserver.cfg demande un redémarrage ; ownerswhitelist.txt est relu sans redémarrer. L'archive ci-dessous garde une copie datée des sauvegardes et de la configuration.
systemctl status sotfjournalctl -u sotf -fsystemctl restart sotfsystemctl stop sotftail -f "$(ls -t /opt/sotf/data/logs/*.txt | head -n 1)"systemctl stop sotf && tar -czf /opt/sotf/sotf-$(date +%F).tar.gz -C /opt/sotf/data Saves dedicatedserver.cfg ownerswhitelist.txt && systemctl start sotf && ls -la /opt/sotf/*.tar.gz-rw-r--r-- 1 root root 245770 Sep 22 03:18 /opt/sotf/sotf-2026-09-22.tar.gz
10Se connecter au serveur
- Lancez Sons of the Forest et ouvrez la liste des serveurs dédiés (Dedicated server browser) : cherchez le nom donné dans dedicatedserver.cfg (Mon serveur Sons of the Forest) ; le serveur y apparaît une fois « Dedicated server loaded » écrit dans son journal.
- Entrez le mot de passe (ChangezMoi).
- Les joueurs dont le SteamID est dans ownerswhitelist.txt administrent le serveur depuis le menu pause du jeu (rôles et permissions des autres joueurs).
11Mettre à jour le serveur
Après une mise à jour du jeu, mettez le serveur à jour : la même commande que l'installation, serveur arrêté. La configuration, les sauvegardes et le journal sont dans /opt/sotf/data, hors du dossier mis à jour.
systemctl stop sotf && su - sotf -c "/opt/sotf/steamcmd/steamcmd.sh +@sSteamCmdForcePlatformType windows +force_install_dir /opt/sotf/server +login anonymous +app_update 2465200 validate +quit" && systemctl start sotf... Success! App '2465200' fully installed.
Erreurs fréquentes
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.
La bibliothèque Vulkan manque : dernière boîte de l'étape 1.
Proton a démarré avec sa traduction Vulkan, qui plante sur l'écran virtuel : start.sh doit exporter PROTON_USE_WINED3D=1 (étape 8).
Proton ne trouve pas la bibliothèque Steam native : refaites l'étape 4 (le lien ~/.steam/sdk64/steamclient.so doit exister pour l'utilisateur sotf).
dedicatedserver.cfg ou ownerswhitelist.txt manquait au démarrage : le serveur les a créés avec les valeurs par défaut (journal désactivé) et attend. Refaites l'étape 6, puis systemctl restart sotf.
Le fichier steam_appid.txt manquait à côté de l'exécutable : le serveur l'a créé et attend. systemctl restart sotf suffit (l'étape 6 l'écrit d'avance).
Un autre écran virtuel occupe déjà le numéro 99 sur cette machine (un autre serveur de jeu, par exemple), ou son verrou est resté après un arrêt brutal. Si aucun Xvfb ne tourne (pgrep Xvfb ne répond rien), effacez /tmp/.X99-lock et /tmp/.X11-unix/X99 ; sinon remplacez :99 par :98 aux deux endroits de start.sh.
SELinux bloque Proton : faites la boîte SELinux de l'étape 5, puis systemctl restart sotf.
Messages de Proton lancé sans session graphique, sans carte son ni client Steam, sans effet : le journal du serveur (/opt/sotf/data/logs) dit s'il est chargé.
C'est la réponse du serveur au signal envoyé par start.sh : la ligne « Autosave complete » qui suit confirme que le monde a été sauvegardé avant la fermeture.
Serveur prêt
Votre serveur Sons of the Forest démarre avec la machine, sauvegarde toutes les dix minutes et à l'arrêt, et écoute sur les ports 8766, 27016 et 9700. Donnez le nom du serveur et le mot de passe à vos joueurs.