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

Installer un serveur Team Fortress 2 sur Linux (Ubuntu, Debian, AlmaLinux)

Documentation / Tutoriels Linux / Serveurs de jeux / Installer un serveur Team Fortress 2 sur Linux (Ubuntu, Debian, AlmaLinux)
Mis à jour le 21/09/2026
11 vues
Intermédiaire
40 minutes

Prérequis

Votre serveur :

Ce guide installe le serveur dédié Team Fortress 2 avec SteamCMD, l'outil de Valve : un utilisateur dédié, le serveur (15 Go), la bibliothèque 32 bits que son module de relecture exige, server.cfg, un service qui le démarre avec la machine, le pare-feu, la sonde qui prouve qu'il répond, la connexion depuis le jeu, RCON et la mise à jour. openSUSE Leap 16 n'y figure pas : sans bibliothèque curl 32 bits, le serveur ne démarre pas. 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!
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

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

Le serveur ne tourne jamais en root : un utilisateur tf2, dont le dossier personnel est /opt/tf2, 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 tf2
mkdir -p /opt/tf2/server /opt/tf2/steamcmd && useradd -r -s /bin/bash -d /opt/tf2 tf2 && chown -R tf2:tf2 /opt/tf2
Télécharger SteamCMD (en tant que tf2)
su - tf2 -c "cd /opt/tf2/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 Team Fortress 2 (15 Go)

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

Installer le serveur Team Fortress 2
su - tf2 -c "/opt/tf2/steamcmd/steamcmd.sh +force_install_dir /opt/tf2/server +login anonymous +app_update 232250 validate +quit"
Résultat attendu
... Update state (0x81) verifying update, progress: 99.32 (14807713392 / 14908968403)
 Update state (0x0) unknown, progress: 0.00 (0 / 0)
Success! App '232250' fully installed.
Vérifier la taille et la présence du lanceur
du -sh /opt/tf2/server && ls -l /opt/tf2/server/srcds_run
Résultat attendu
14G	/opt/tf2/server
-rwxrwxr-x 1 tf2 tf2 9729 Sep 21 17:19 /opt/tf2/server/srcds_run
(14G ou 15G selon le système ; les droits et la date varient)

4Donner au serveur sa bibliothèque curl 32 bits

Le module de relecture du serveur, replay_srv.so, cherche libcurl-gnutls.so.4 en 32 bits ; sans elle, le serveur s'arrête sur « FATAL ERROR: Could not load: replay_srv.so » et plante. Sur Ubuntu et Debian, le paquet existe tel quel ; sur AlmaLinux, Rocky, CentOS et Fedora, on installe la libcurl 32 bits et on lui donne le nom attendu dans le dossier du serveur.

Installer la libcurl 32 bits
apt install -y libcurl3t64-gnutls:i386
Installer la libcurl 32 bits et la lier sous le nom attendu
dnf install -y libcurl.i686 && ln -sf /usr/lib/libcurl.so.4 /opt/tf2/server/bin/libcurl-gnutls.so.4
Installer la libcurl 32 bits et la lier sous le nom attendu
dnf install -y libcurl.i686 && ln -sf /usr/lib/libcurl.so.4 /opt/tf2/server/bin/libcurl-gnutls.so.4
Vérifier qu'il ne manque plus rien au module (0 = rien ne manque)
cd /opt/tf2/server && LD_LIBRARY_PATH=.:bin ldd bin/replay_srv.so | grep -c 'not found'

5Préparer le serveur : bibliothèque Steam, configuration, script de démarrage

Le serveur est un programme 32 bits : il cherche steamclient.so dans ~/.steam/sdk32, on y met un lien vers celui de SteamCMD. Le fichier server.cfg porte le nom du serveur et le mot de passe RCON ; changez-les.

Lier steamclient.so pour le serveur
su - tf2 -c "mkdir -p ~/.steam/sdk32 && ln -sf /opt/tf2/steamcmd/linux32/steamclient.so ~/.steam/sdk32/steamclient.so"
Créer server.cfg
cat > /opt/tf2/server/tf/cfg/server.cfg << 'EOF'
hostname "Mon serveur Team Fortress 2"
rcon_password "ChangezMoi"
sv_password ""
sv_region 0
mp_timelimit 30
mp_maxrounds 5
EOF

Le script de démarrage porte la carte et le nombre de joueurs. Avec un jeton GSLT, ajoutez +sv_setsteamaccount suivi du jeton à la fin de la ligne exec ; sans jeton, le serveur démarre en compte anonyme, joignable par son adresse, moins bien classé dans la liste publique.

Créer start.sh
cat > /opt/tf2/start.sh << 'EOF'
#!/bin/sh
cd /opt/tf2/server
exec ./srcds_run -game tf -console -condebug -norestart -ip 0.0.0.0 -port 27015 +maxplayers 24 +map ctf_2fort
EOF
chmod +x /opt/tf2/start.sh && chown -R tf2:tf2 /opt/tf2
+map ctf_2fort
La carte de départ ; 233 cartes sont livrées dans tf/maps (cp_dustbowl, pl_upward, koth_harvest_final...)
+maxplayers 24
Le nombre de joueurs
-condebug
Écrit la console du serveur dans tf/console.log
mp_timelimit, mp_maxrounds
Dans server.cfg : la durée d'une carte en minutes et le nombre de manches avant de changer
tf/cfg/mapcycle.txt
L'ordre des cartes ; sans lui, le serveur suit mapcycle_default.txt

6Démarrer le serveur comme un service

Le service systemd lance start.sh avec l'utilisateur tf2, relance le serveur s'il plante et le démarre avec la machine.

Créer le service tf2
cat > /etc/systemd/system/tf2.service << 'EOF'
[Unit]
Description=Serveur Team Fortress 2
After=network.target

[Service]
User=tf2
Group=tf2
WorkingDirectory=/opt/tf2/server
ExecStart=/opt/tf2/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 tf2
Résultat attendu
Created symlink /etc/systemd/system/multi-user.target.wants/tf2.service → /etc/systemd/system/tf2.service.

Le serveur est prêt en une minute : il annonce sa connexion à Steam dans tf/console.log et écoute sur le port 27015. Il prend 630 Mo de mémoire sans joueur.

Une minute plus tard : le serveur est connecté à Steam et écoute
systemctl is-active tf2 && grep -E 'Connection to Steam|VAC secure' /opt/tf2/server/tf/console.log && ss -lunp | grep 27015
Résultat attendu
active
Connection to Steam servers successful.
VAC secure mode is activated.
UNCONN 0      0            0.0.0.0:27015      0.0.0.0:*    users:(("srcds_linux",pid=5914,fd=13))

La sonde ci-dessous interroge le serveur comme le fait la liste des serveurs. Remplacez 203.0.113.42 par l'adresse IP de votre serveur : la sonde ne répond pas sur 127.0.0.1.

Interroger le serveur comme le fait la liste des serveurs
python3 - 203.0.113.42 << '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, 27015)); r = s.recvfrom(4096)[0]
if r[4:5] == b'A':
    s.sendto(q + r[5:9], (h, 27015)); 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 Team Fortress 2 | ctf_2fort | tf | Team Fortress

7Ouvrir les ports dans le pare-feu

Les joueurs se connectent en UDP sur le port 27015 ; le TCP sert à RCON. 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 27015/udp && ufw allow 27015/tcp && 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=27015/udp --add-port=27015/tcp && 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=27015/udp --add-port=27015/tcp && firewall-cmd --reload
Résultat attendu
...
success
success

8Se connecter et administrer

  1. Lancez Team Fortress 2 et activez la console dans les options (Clavier, Avancé, Activer la console de développement).
  2. Ouvrez la console avec la touche ~ (ou ` selon le clavier).
  3. Si le serveur a un mot de passe (sv_password), tapez d'abord : password votre_mot_de_passe
  4. Tapez : connect 203.0.113.42:27015 (l'adresse IP de votre serveur).

Depuis la console du jeu, une fois connecté, vous commandez le serveur avec le mot de passe RCON de server.cfg :

S'identifier comme administrateur (une fois par session)
rcon_password ChangezMoi
Changer de carte
rcon changelevel cp_dustbowl
Expulser un joueur (le numéro vient de rcon status)
rcon kickid NUMERO
Voir les joueurs connectés
rcon status
Mettre un mot de passe au serveur
rcon sv_password motdepasse
Changer la durée d'une carte
rcon mp_timelimit 20

9Gérer et mettre à jour le serveur

Voir l'état du service
systemctl status tf2
Voir la console du serveur en direct (Ctrl+C pour sortir)
tail -f /opt/tf2/server/tf/console.log
Redémarrer
systemctl restart tf2
Arrêter
systemctl stop tf2

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é. Le lien libcurl-gnutls.so.4 de l'étape 4 (AlmaLinux, Rocky, CentOS, Fedora) reste en place après la mise à jour ; s'il disparaissait un jour avec une refonte du dossier bin, le serveur replanterait sur replay_srv.so : refaites alors la boîte.

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

Erreurs fréquentes

Serveur prêt

Votre serveur Team Fortress 2 démarre avec la machine, se relance s'il tombe et écoute sur le port 27015. La même base SteamCMD sert aux autres serveurs de jeux.

💬 Écrivez-nous sur Messenger !