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

Installer un serveur ARK: Survival Evolved sur Linux (Ubuntu, Debian, AlmaLinux)

Documentation / Tutoriels Linux / Serveurs de jeux / Installer un serveur ARK: Survival Evolved sur Linux (Ubuntu, Debian, AlmaLinux)
Mis à jour le 21/09/2026
10 vues
Intermédiaire
45 minutes

Prérequis

Votre serveur :

Ce guide installe le serveur dédié ARK: Survival Evolved (le serveur Linux natif ; pour ARK: Survival Ascended, qui n'en a pas, voyez la fiche ARK: Survival Ascended) : SteamCMD, un utilisateur dédié, le serveur (22 Go), un script de démarrage qui porte le nom et les mots de passe, un service qui sauvegarde à l'arrêt, RCON, le pare-feu, une sauvegarde chaque nuit et la mise à jour. Le serveur occupe 5 à 6 Go de mémoire vive une fois la carte chargée : sur une machine de 8 Go, ne faites rien tourner d'autre. 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 arkse, dont le dossier personnel est /opt/arkse, 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 arkse
mkdir -p /opt/arkse/server /opt/arkse/steamcmd && useradd -r -s /bin/bash -d /opt/arkse arkse && chown -R arkse:arkse /opt/arkse
Télécharger SteamCMD (en tant que arkse)
su - arkse -c "cd /opt/arkse/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 ARK: Survival Evolved (22 Go)

SteamCMD télécharge le serveur dédié (application 376030) dans /opt/arkse/server : 22 Go, une dizaine de minutes. Il arrive souvent que le premier passage se termine sur « ERROR! Failed to install app '376030' (Missing configuration) » : relancez la même commande, le téléchargement reprend.

Télécharger le serveur (une dizaine de minutes)
su - arkse -c "/opt/arkse/steamcmd/steamcmd.sh +force_install_dir /opt/arkse/server +login anonymous +app_update 376030 validate +quit"
Résultat attendu
...
Success! App '376030' fully installed.
Vérifier qu'aucune bibliothèque ne manque au serveur
ldd /opt/arkse/server/ShooterGame/Binaries/Linux/ShooterGameServer | grep -c 'not found'

4Préparer le serveur : script de démarrage et client RCON

La ligne de commande du serveur porte la carte (TheIsland), le nom affiché (SessionName), le mot de passe des joueurs (ServerPassword), le mot de passe d'administration (ServerAdminPassword, aussi celui de RCON), les ports et le nombre de joueurs. Changez les deux mots de passe avant de créer le script. Le serveur sauvegarde le monde quand il reçoit SIGTERM, puis quitte toujours par un abort : le script relaie l'arrêt et rend 0 au service, qui affiche alors un arrêt propre.

Créer start.sh (changez les deux mots de passe)
cat > /opt/arkse/start.sh << 'EOF'
#!/bin/sh
# Le serveur sauvegarde quand il recoit SIGTERM, puis quitte toujours par un abort :
# ce script relaie l'arret et rend 0 au service quand c'est lui qui l'a demande.
cd /opt/arkse/server/ShooterGame/Binaries/Linux
./ShooterGameServer 'TheIsland?listen?SessionName=Mon serveur ARK?ServerPassword=ChangezMoi?ServerAdminPassword=ChangezMoiAussi?Port=7777?QueryPort=27015?MaxPlayers=10?RCONEnabled=True?RCONPort=27020' -server -log &
PID=$!
trap 'kill $PID; wait $PID; exit 0' TERM
wait $PID
EOF
chmod +x /opt/arkse/start.sh && chown arkse:arkse /opt/arkse/start.sh

RCON permet de parler au serveur depuis le terminal (sauvegarder, lister les joueurs, annoncer). Le petit client ci-dessous parle le protocole RCON de Source : python3 /opt/arkse/rcon.py <mot de passe admin> <commande>.

Créer rcon.py
cat > /opt/arkse/rcon.py << 'EOF'
import socket, struct, sys
mdp = sys.argv[1]
cmd = " ".join(sys.argv[2:])
def paquet(i, t, corps):
    b = struct.pack("<ii", i, t) + corps.encode() + b"\x00\x00"
    return struct.pack("<i", len(b)) + b
s = socket.create_connection(("127.0.0.1", 27020), timeout=10)
s.sendall(paquet(1, 3, mdp))
rep = s.recv(4096)
if len(rep) < 12 or struct.unpack("<i", rep[4:8])[0] == -1:
    print("Mot de passe RCON refuse")
    sys.exit(1)
s.sendall(paquet(2, 2, cmd))
s.settimeout(3)
data = b""
try:
    while True:
        d = s.recv(65536)
        if not d:
            break
        data += d
except socket.timeout:
    pass
s.close()
print(data[12:].decode("utf-8", "replace").replace("\x00", "").strip())
EOF
chown arkse:arkse /opt/arkse/rcon.py

5Démarrer le serveur comme un service

Le service lance start.sh avec l'utilisateur arkse, monte la limite de fichiers ouverts que le serveur demande, coupe l'écriture d'un fichier core à la sortie (sans cela, sur AlmaLinux, Rocky, CentOS, Fedora et openSUSE, chaque arrêt écrit un core de 6 Go pendant deux minutes) et relance le serveur s'il plante. Le premier démarrage charge la carte : comptez deux minutes avant que RCON réponde.

Créer le service arkse
cat > /etc/systemd/system/arkse.service << 'EOF'
[Unit]
Description=Serveur ARK: Survival Evolved
After=network.target

[Service]
User=arkse
Group=arkse
WorkingDirectory=/opt/arkse/server/ShooterGame/Binaries/Linux
ExecStart=/opt/arkse/start.sh
KillMode=mixed
LimitNOFILE=100000
LimitCORE=0
TimeoutStopSec=120
Restart=on-failure
RestartSec=15

[Install]
WantedBy=multi-user.target
EOF
Activer et démarrer le service
systemctl daemon-reload && systemctl enable --now arkse
Résultat attendu
Created symlink /etc/systemd/system/multi-user.target.wants/arkse.service → /etc/systemd/system/arkse.service.
Deux minutes plus tard : le serveur répond à RCON et écoute
systemctl is-active arkse && python3 /opt/arkse/rcon.py ChangezMoiAussi ListPlayers && ss -lunp | grep Shooter | awk '{print $4}' | sort
Résultat attendu
active
No Players Connected
0.0.0.0:27015
0.0.0.0:7777
0.0.0.0:7778
(une erreur Python qui finit par « Connection refused » ou « timed out » = la carte se charge encore : attendez une minute et relancez)

La sonde ci-dessous interroge le serveur comme le fait la liste des serveurs du jeu.

Interroger le serveur comme le fait la liste des serveurs
python3 - << 'EOF'
import socket
s = socket.socket(socket.AF_INET, socket.SOCK_DGRAM); s.settimeout(5)
q = b'\xff\xff\xff\xffTSource Engine Query\x00'
s.sendto(q, ('127.0.0.1', 27015)); r = s.recvfrom(4096)[0]
if r[4:5] == b'A':
    s.sendto(q + r[5:9], ('127.0.0.1', 27015)); r = s.recvfrom(4096)[0]
p = r[6:].split(b'\x00')
print(p[0].decode(), '|', p[1].decode(), '|', p[2].decode())
EOF
Résultat attendu
Mon serveur ARK - (v361.7) | TheIsland | ark_survival_evolved
(le numéro de version suit les mises à jour)

6Gérer le serveur : RCON, arrêt, journal

Les commandes RCON les plus utiles, avec le mot de passe d'administration de start.sh :

python3 /opt/arkse/rcon.py ChangezMoiAussi SaveWorld
Sauvegarde le monde tout de suite (« World Saved »)
python3 /opt/arkse/rcon.py ChangezMoiAussi ListPlayers
Liste les joueurs connectés
python3 /opt/arkse/rcon.py ChangezMoiAussi Broadcast Redémarrage dans 5 minutes
Envoie un message à tous les joueurs (le serveur répond « Server received, But no response!! » : le message est bien passé)
python3 /opt/arkse/rcon.py ChangezMoiAussi DoExit
Sauvegarde et arrête le serveur
Sauvegarder le monde tout de suite
python3 /opt/arkse/rcon.py ChangezMoiAussi SaveWorld
Résultat attendu
World Saved
Arrêter proprement (sauvegarde comprise, quelques secondes)
systemctl stop arkse
Démarrer
systemctl start arkse
Redémarrer
systemctl restart arkse
Voir l'état du service
systemctl status arkse

Le serveur n'écrit son journal ShooterGame.log qu'à sa sortie : pendant qu'il tourne, le fichier reste vide. Pour savoir s'il est prêt, interrogez RCON ou la sonde de l'étape 5 ; après un arrêt, lisez le journal.

Lire le journal du dernier passage du serveur (après un arrêt)
grep -E 'ARK Version|successfully started|Full Startup|Saving world|World Save' /opt/arkse/server/ShooterGame/Saved/Logs/ShooterGame.log
Résultat attendu
[2026.09.21-20.23.26:361][  0]ARK Version: 361.7
[2026.09.21-20.24.43:291][  0]Server: "Mon serveur ARK" has successfully started!
[2026.09.21-20.24.46:280][  0]Full Startup: 81.38 seconds (BP compile: 0.00 seconds)
[2026.09.21-20.25.35:706][217]Saving world...
[2026.09.21-20.25.36:593][217]World Save Complete. Took 0.887259

7Ouvrir les ports dans le pare-feu

Les joueurs se connectent en UDP sur les ports 7777 et 7778 ; le port 27015 en UDP sert à la liste des serveurs. Le port RCON 27020 reste fermé : rcon.py l'utilise depuis le serveur. 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:7778/udp && ufw allow 27015/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-7778/udp --add-port=27015/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-7778/udp --add-port=27015/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-7778/udp --add-port=27015/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:7778/udp              ALLOW       Anywhere
27015/udp                  ALLOW       Anywhere
Vérifier les règles
firewall-cmd --list-ports
Résultat attendu
7777-7778/udp 27015/udp
Vérifier les règles
firewall-cmd --list-ports
Résultat attendu
7777-7778/udp 27015/udp
Vérifier les règles
firewall-cmd --list-ports
Résultat attendu
7777-7778/udp 27015/udp

8Se connecter et régler le serveur

  1. Lancez ARK: Survival Evolved, puis Rejoindre un serveur ; filtrez sur Non officiel et cherchez le nom donné à SessionName (Mon serveur ARK).
  2. Entrez le mot de passe de ServerPassword.
  3. Pour administrer en jeu : ouvrez la console et tapez enablecheats suivi du mot de passe de ServerAdminPassword.

Les réglages du jeu se mettent dans GameUserSettings.ini, section [ServerSettings], créée au premier démarrage ; le serveur y recopie ceux de la ligne de commande (mots de passe, RCON, nom) : pour ceux-là, c'est start.sh qui fait foi. Arrêtez le serveur avant de modifier le fichier.

ServerPVE=True
Interdit le combat entre joueurs
DifficultyOffset=1.0
Difficulté (0.0 à 1.0) : niveau des créatures
TamingSpeedMultiplier=3.0
Apprivoisement 3 fois plus rapide
AutoSavePeriodMinutes=15.000000
Sauvegarde automatique toutes les 15 minutes (valeur créée par le serveur)
Arrêter, ajouter des réglages en tête de [ServerSettings], puis redémarrer
systemctl stop arkse && su - arkse -c "sed -i 's/^\[ServerSettings\]/[ServerSettings]\nServerPVE=True\nTamingSpeedMultiplier=3.0/' /opt/arkse/server/ShooterGame/Saved/Config/LinuxServer/GameUserSettings.ini && grep -n 'ServerPVE\|TamingSpeed' /opt/arkse/server/ShooterGame/Saved/Config/LinuxServer/GameUserSettings.ini" && systemctl start arkse
Résultat attendu
2:ServerPVE=True
3:TamingSpeedMultiplier=3.0
Ouvrir tout le fichier pour d'autres réglages, serveur arrêté (Ctrl+O pour enregistrer, Ctrl+X pour quitter)
systemctl stop arkse && nano /opt/arkse/server/ShooterGame/Saved/Config/LinuxServer/GameUserSettings.ini && systemctl start arkse

9Sauvegarder le monde chaque nuit

Le script demande une sauvegarde par RCON, puis archive les mondes (SavedArks) et les deux fichiers de réglages dans /opt/arkse/backups en gardant les 7 dernières archives ; cron le lance chaque nuit à 4 h. Remplacez ChangezMoiAussi par le mot de passe d'administration de start.sh.

Créer le script de sauvegarde
cat > /opt/arkse/backup.sh << 'EOF'
#!/bin/sh
BACKUP_DIR=/opt/arkse/backups
DATE=$(date +%Y-%m-%d_%H-%M)
mkdir -p $BACKUP_DIR
python3 /opt/arkse/rcon.py ChangezMoiAussi SaveWorld
tar -czf $BACKUP_DIR/arkse-$DATE.tar.gz -C /opt/arkse/server/ShooterGame/Saved SavedArks Config/LinuxServer/GameUserSettings.ini Config/LinuxServer/Game.ini
cd $BACKUP_DIR && ls -t | tail -n +8 | xargs -r rm
EOF
chmod +x /opt/arkse/backup.sh && chown arkse:arkse /opt/arkse/backup.sh
Tester une sauvegarde tout de suite
su - arkse -c '/opt/arkse/backup.sh && ls -la /opt/arkse/backups'
Résultat attendu
World Saved
-rw-rw-r-- 1 arkse arkse 8571433 ... arkse-2026-09-21_21-28.tar.gz
(la taille grandit avec le monde ; une erreur Python à la place de « World Saved » = le serveur chargeait encore, l'archive est faite quand même)
Installer et démarrer cron
apt install -y cron && systemctl enable --now cron
Installer et démarrer cron
dnf install -y cronie && systemctl enable --now crond
Installer et démarrer cron
dnf install -y cronie && systemctl enable --now crond
Installer et démarrer cron
zypper -n install cronie && systemctl enable --now cron
Programmer la sauvegarde chaque nuit à 4 h
su - arkse -c '(crontab -l 2>/dev/null; echo "0 4 * * * /opt/arkse/backup.sh") | crontab - && crontab -l'
Résultat attendu
0 4 * * * /opt/arkse/backup.sh

10Mettre à jour le serveur

Après une mise à jour du jeu, mettez le serveur à jour. La commande arrête le serveur (ce qui sauvegarde), passe par SteamCMD, puis le relance.

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

Erreurs fréquentes

Serveur prêt

Votre serveur ARK: Survival Evolved démarre avec la machine, sauvegarde à l'arrêt et chaque nuit, et écoute sur les ports 7777, 7778 et 27015. Donnez le nom du serveur et son mot de passe à vos joueurs.

💬 Écrivez-nous sur Messenger !