Désactiver le préchargeur
Tutoriels Linux Serveurs de jeux

Installer un serveur SCP: Secret Laboratory sur Linux (Ubuntu, Debian, AlmaLinux)

Documentation / Tutoriels Linux / Serveurs de jeux / Installer un serveur SCP: Secret Laboratory sur Linux (Ubuntu, Debian, AlmaLinux)
Mis à jour le 22/09/2026
11 vues
Intermédiaire
30 minutes

Prérequis

Votre serveur :

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).

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

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.

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

Installer Mono
apt install -y mono-complete
Installer Mono (dépôt EPEL)
dnf install -y epel-release && dnf install -y mono-complete
Installer Mono
dnf install -y mono-complete
Installer Mono et la bibliothèque ICU (LocalAdmin l'exige, openSUSE ne l'installe pas avec Mono)
zypper -n install mono-complete libicu
Vérifier Mono
mono --version | head -n 1
Résultat attendu
Mono 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.

Installer le serveur SCP: Secret Laboratory
su - scpsl -c "/opt/scpsl/steamcmd/steamcmd.sh +force_install_dir /opt/scpsl/server +login anonymous +app_update 996560 validate +quit"
Résultat attendu
...
Success! App '996560' fully installed.
Vérifier la taille et qu'aucune bibliothèque ne manque (0 = rien ne manque)
du -sh /opt/scpsl/server && ldd /opt/scpsl/server/LocalAdmin /opt/scpsl/server/SCPSL.x86_64 | grep -c 'not found'
Résultat attendu
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.

Créer start.sh et stop.sh
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/scpsl
Créer le service scpsl
cat > /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
EOF
Activer et démarrer le service
systemctl daemon-reload && systemctl enable --now scpsl
Résultat attendu
Created symlink /etc/systemd/system/multi-user.target.wants/scpsl.service → /etc/systemd/system/scpsl.service.
Une minute plus tard : le serveur est prêt et écoute
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}'
Résultat attendu
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).

Changer le nom et le nombre de joueurs, puis redémarrer
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 scpsl
Résultat attendu
2: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
Ouvrir tout le fichier pour d'autres réglages (Ctrl+O pour enregistrer, Ctrl+X pour quitter)
nano /opt/scpsl/.config/SCP\ Secret\ Laboratory/config/7777/config_gameplay.txt

7Utiliser 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.

Envoyer une commande à la console (ici : players) et lire la réponse
echo 'players' > /opt/scpsl/console.in && sleep 3 && tail -n 2 "$(ls -t /opt/scpsl/.config/SCP\ Secret\ Laboratory/LocalAdminLogs/7777/* | head -n 1)"
Résultat attendu
[2026-09-22 00:30:45.106 +00:00] >>> players
[2026-09-22 00:30:45.342 +00:00] List of players (0):
Suivre le journal de LocalAdmin en direct (Ctrl+C pour sortir)
tail -f "$(ls -t /opt/scpsl/.config/SCP\ Secret\ Laboratory/LocalAdminLogs/7777/* | head -n 1)"
Voir l'état du service
systemctl status scpsl
Arrêter proprement (une seconde)
systemctl stop scpsl
Démarrer
systemctl start scpsl
Redémarrer
systemctl restart scpsl

8Ouvrir 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.

Activer le pare-feu (SSH reste autorisé) et ouvrir les ports du jeu
apt install -y ufw && ufw allow 22/tcp && ufw allow 7777/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=7777/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=7777/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=7777/udp && firewall-cmd --reload
Résultat attendu
success
success
Vérifier les règles
ufw status
Résultat attendu
Status: active
22/tcp                     ALLOW       Anywhere
7777/udp                   ALLOW       Anywhere
Vérifier les règles
firewall-cmd --list-ports
Résultat attendu
7777/udp
Vérifier les règles
firewall-cmd --list-ports
Résultat attendu
7777/udp
Vérifier les règles
firewall-cmd --list-ports
Résultat attendu
7777/udp

9Se connecter au serveur

  1. Lancez SCP: Secret Laboratory et connectez-vous par adresse IP : 203.0.113.42:7777 (l'adresse de votre serveur).
  2. 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.

Mettre à jour le serveur (serveur arrêté, puis relancé)
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
Résultat attendu
... Success! App '996560' already up to date.
(« fully installed » quand une mise à jour a été téléchargée)

Erreurs fréquentes

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.

💬 Écrivez-nous sur Messenger !