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
- 5 Go de disque libre et 4 Go de RAM
Ce guide installe le serveur dédié SCP: Secret Laboratory avec SteamCMD, l'outil de Valve : un utilisateur dédié, Mono (le serveur en a besoin), le serveur (572 Mo) et son lanceur LocalAdmin, un service avec une console pour lui parler et un arrêt propre, ses réglages (nom, joueurs), le pare-feu, 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
2Créer un utilisateur dédié et installer SteamCMD
Le serveur ne tourne jamais en root : un utilisateur scpsl, dont le dossier personnel est /opt/scpsl, 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/scpsl/server /opt/scpsl/steamcmd && useradd -r -s /bin/bash -d /opt/scpsl scpsl && chown -R scpsl:scpsl /opt/scpslsu - scpsl -c "cd /opt/scpsl/steamcmd && curl -fsSL https://steamcdn-a.akamaihd.net/client/installer/steamcmd_linux.tar.gz | tar zxf - && ls"linux32 steamcmd.sh
3Installer Mono
Le lanceur du serveur, LocalAdmin, est un programme .NET qui tourne avec Mono ; le fichier « linux dependencies.txt » livré avec le serveur le demande. Sur AlmaLinux, Rocky et CentOS, Mono vient du dépôt EPEL.
apt install -y mono-completednf install -y epel-release && dnf install -y mono-completednf install -y mono-completezypper -n install mono-complete libicumono --version | head -n 1Mono JIT compiler version 6.12.0.199 (tarball Thu Apr 3 15:13:01 UTC 2025) (la version dépend du système : 6.8 sur Ubuntu 24.04, 6.12 sur Debian, AlmaLinux, Rocky, CentOS et openSUSE, 6.14 sur Fedora)
4Télécharger le serveur SCP: Secret Laboratory
SteamCMD télécharge l'application 996560, le serveur dédié : 572 Mo, une minute. Il arrive souvent que le premier passage se termine sur « ERROR! Failed to install app '996560' (Missing configuration) » sans rien télécharger : relancez la même commande, elle passe.
su - scpsl -c "/opt/scpsl/steamcmd/steamcmd.sh +force_install_dir /opt/scpsl/server +login anonymous +app_update 996560 validate +quit"... Success! App '996560' fully installed.
du -sh /opt/scpsl/server && ldd /opt/scpsl/server/LocalAdmin /opt/scpsl/server/SCPSL.x86_64 | grep -c 'not found'572M /opt/scpsl/server 0
5Créer le script de démarrage, le script d'arrêt et le service
LocalAdmin lance le serveur sur le port 7777 et lit ses commandes au clavier : au premier lancement il demande d'accepter le contrat de licence (EULA) et de choisir une configuration ; --acceptEULA et --useDefault répondent à sa place. Le script lui donne un tube nommé (/opt/scpsl/console.in) en guise de clavier : c'est la console de l'étape 7. Le script d'arrêt y écrit exit, ce qui ferme le serveur proprement.
cat > /opt/scpsl/start.sh << 'EOF'
#!/bin/sh
# LocalAdmin lit ses commandes sur un tube nomme : c'est la console du serveur (exit pour arreter)
cd /opt/scpsl/server
[ -p /opt/scpsl/console.in ] || mkfifo /opt/scpsl/console.in
sleep infinity > /opt/scpsl/console.in &
exec ./LocalAdmin 7777 --acceptEULA --useDefault --noSetCursor < /opt/scpsl/console.in
EOF
cat > /opt/scpsl/stop.sh << 'EOF'
#!/bin/sh
# stop.sh : demande l'arret a LocalAdmin (exit), attend, puis ferme la console
echo 'exit' > /opt/scpsl/console.in
for i in $(seq 1 30); do kill -0 $MAINPID 2>/dev/null || break; sleep 1; done
for p in $(pgrep -x sleep); do [ "$(readlink /proc/$p/fd/1)" = "/opt/scpsl/console.in" ] && kill $p; done
while kill -0 $MAINPID 2>/dev/null; do sleep 1; done
EOF
chmod +x /opt/scpsl/start.sh /opt/scpsl/stop.sh /opt/scpsl/server/LocalAdmin /opt/scpsl/server/SCPSL.x86_64 && chown -R scpsl:scpsl /opt/scpslcat > /etc/systemd/system/scpsl.service << 'EOF'
[Unit]
Description=Serveur SCP: Secret Laboratory
After=network.target
[Service]
User=scpsl
Group=scpsl
WorkingDirectory=/opt/scpsl/server
ExecStart=/opt/scpsl/start.sh
ExecStop=/opt/scpsl/stop.sh
TimeoutStopSec=60
Restart=on-failure
RestartSec=15
[Install]
WantedBy=multi-user.target
EOFsystemctl daemon-reload && systemctl enable --now scpslCreated symlink /etc/systemd/system/multi-user.target.wants/scpsl.service → /etc/systemd/system/scpsl.service.
systemctl is-active scpsl && grep -h 'Started new session\|Done!\|idle mode' "$(ls -t /opt/scpsl/.config/SCP\ Secret\ Laboratory/LocalAdminLogs/7777/* | head -n 1)" && ss -lunp | grep 7777 | awk '{print $4}'active [2026-09-22 00:30:00.100 +00:00] Started new session on port 7777. [2026-09-22 00:30:03.220 +00:00] Done! Type 'help' to print the list of available commands. [2026-09-22 00:30:39.346 +00:00] Server has entered the idle mode. 0.0.0.0:7777 [::]:7777 (« idle mode » = personne n'est connecté, le serveur attend)
6Régler le serveur : nom, joueurs
Le premier lancement a créé les réglages dans le dossier personnel de l'utilisateur scpsl : ~/.config/SCP Secret Laboratory/config/7777/config_gameplay.txt (nom, joueurs, tir ami...), config_remoteadmin.txt (les administrateurs) et les listes blanches et bannissements. Chaque changement demande un redémarrage (étape 7).
sed -i 's/^server_name: .*/server_name: Mon serveur SCP/; s/^max_players: .*/max_players: 20/' /opt/scpsl/.config/SCP\ Secret\ Laboratory/config/7777/config_gameplay.txt && grep -n '^server_name\|^max_players' /opt/scpsl/.config/SCP\ Secret\ Laboratory/config/7777/config_gameplay.txt && systemctl restart scpsl2:server_name: Mon serveur SCP 8:max_players: 20
server_name- Le nom du serveur
max_players- Nombre de joueurs (20 par défaut)
friendly_fire- true pour que les tirs blessent les coéquipiers
enable_whitelist- true pour n'accepter que les joueurs de UserIDWhitelist.txt
server_ip- auto par défaut : le serveur trouve lui-même son adresse
nano /opt/scpsl/.config/SCP\ Secret\ Laboratory/config/7777/config_gameplay.txt7Utiliser la console et gérer le serveur
Une commande écrite dans le tube est exécutée par LocalAdmin, qui la passe au serveur ; sa réponse s'inscrit dans le journal de LocalAdmin.
echo 'players' > /opt/scpsl/console.in && sleep 3 && tail -n 2 "$(ls -t /opt/scpsl/.config/SCP\ Secret\ Laboratory/LocalAdminLogs/7777/* | head -n 1)"[2026-09-22 00:30:45.106 +00:00] >>> players [2026-09-22 00:30:45.342 +00:00] List of players (0):
tail -f "$(ls -t /opt/scpsl/.config/SCP\ Secret\ Laboratory/LocalAdminLogs/7777/* | head -n 1)"systemctl status scpslsystemctl stop scpslsystemctl start scpslsystemctl restart scpsl8Ouvrir les ports dans le pare-feu
Les joueurs se connectent en UDP sur le port 7777. 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 7777/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=7777/udp && firewall-cmd --reload... success success
dnf install -y firewalld && systemctl enable --now firewalld && firewall-cmd --permanent --add-port=7777/udp && firewall-cmd --reload... success success
firewall-cmd --permanent --add-port=7777/udp && firewall-cmd --reloadsuccess success
ufw statusStatus: active 22/tcp ALLOW Anywhere 7777/udp ALLOW Anywhere
firewall-cmd --list-ports7777/udp
firewall-cmd --list-ports7777/udp
firewall-cmd --list-ports7777/udp
9Se connecter au serveur
- Lancez SCP: Secret Laboratory et connectez-vous par adresse IP : 203.0.113.42:7777 (l'adresse de votre serveur).
- La liste publique du jeu n'affiche que les serveurs vérifiés par l'éditeur (les règles des serveurs vérifiés, citées dans config_gameplay.txt) ; sans vérification, vos joueurs entrent par l'adresse IP.
10Mettre à jour le serveur
Après une mise à jour du jeu, mettez le serveur à jour : la même commande que l'installation, serveur arrêté. Les réglages sont dans le dossier personnel, hors du dossier mis à jour.
systemctl stop scpsl && su - scpsl -c "/opt/scpsl/steamcmd/steamcmd.sh +force_install_dir /opt/scpsl/server +login anonymous +app_update 996560 +quit" && systemctl start scpsl... Success! App '996560' already up to date. (« fully installed » quand une mise à jour a été téléchargée)
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.
LocalAdmin a besoin de la bibliothèque ICU, qu'openSUSE n'installe pas avec Mono : zypper -n install libicu (étape 3), puis systemctl restart scpsl.
Il a été lancé sans --acceptEULA et sans clavier : utilisez le start.sh de l'étape 5, qui accepte l'EULA et prend la configuration par défaut.
Messages du chargement du jeu sans écran ni routeur, sans effet sur le serveur : la ligne « Done! Type 'help' » qui suit dit qu'il est prêt.
La liste publique est réservée aux serveurs vérifiés par l'éditeur. Vos joueurs se connectent par l'adresse IP et le port 7777 (étape 9) ; vérifiez que le port est ouvert (étape 8).
Serveur prêt
Votre serveur SCP: Secret Laboratory démarre avec la machine, s'arrête proprement, se relance s'il tombe et écoute sur le port 7777. Donnez l'adresse IP et le port à vos joueurs.