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
- 15 Go de disque libre et 4 Go de RAM
Ce guide installe le serveur dédié Arma Reforger sur Linux : SteamCMD, un utilisateur dédié, le serveur (9,6 Go), son fichier config.json (nom, mots de passe, scénario), un service qui sauvegarde la partie à l'arrêt, la sonde qui prouve qu'il répond, le pare-feu, une sauvegarde chaque nuit 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 reforger, dont le dossier personnel est /opt/reforger, 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/reforger/server /opt/reforger/steamcmd && useradd -r -s /bin/bash -d /opt/reforger reforger && chown -R reforger:reforger /opt/reforgersu - reforger -c "cd /opt/reforger/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 Arma Reforger (9,6 Go)
SteamCMD télécharge le serveur dédié (application 1874900) dans /opt/reforger/server : quelques minutes. Il arrive souvent que le premier passage se termine sur « ERROR! Failed to install app '1874900' (Missing configuration) » : relancez la même commande, le téléchargement reprend.
su - reforger -c "/opt/reforger/steamcmd/steamcmd.sh +force_install_dir /opt/reforger/server +login anonymous +app_update 1874900 validate +quit"... Success! App '1874900' fully installed.
ldd /opt/reforger/server/ArmaReforgerServer | grep -c 'not found'4Écrire config.json
Le serveur lit tout dans un fichier JSON : le port du jeu (2001), le port d'interrogation (17777, celui de la liste des serveurs), puis dans game le nom affiché, le mot de passe des joueurs, le mot de passe d'administration et le scénario. Changez les deux mots de passe avant de créer le fichier ; laissez password vide ("") pour un serveur ouvert.
cat > /opt/reforger/config.json << 'EOF'
{
"bindAddress": "0.0.0.0",
"bindPort": 2001,
"publicAddress": "",
"publicPort": 2001,
"a2s": {
"address": "0.0.0.0",
"port": 17777
},
"game": {
"name": "Mon serveur Arma Reforger",
"password": "ChangezMoi",
"passwordAdmin": "ChangezMoiAussi",
"scenarioId": "{ECC61978EDCC2B5A}Missions/23_Campaign.conf",
"maxPlayers": 32,
"visible": true,
"crossPlatform": true,
"supportedPlatforms": [
"PLATFORM_PC",
"PLATFORM_XBL",
"PLATFORM_PSN"
],
"gameProperties": {
"serverMaxViewDistance": 2500,
"serverMinGrassDistance": 50,
"networkViewDistance": 1000,
"disableThirdPerson": false,
"fastValidation": true,
"battlEye": true
},
"mods": []
},
"operating": {
"lobbyPlayerSynchronise": true,
"disableCrashReporter": true,
"playerSaveTime": 120,
"aiLimit": -1
}
}
EOF
chown reforger:reforger /opt/reforger/config.jsonLe scénario ci-dessus est Conflict sur Everon. Pour en changer, remplacez la valeur de scenarioId par l'une de celles-ci, puis redémarrez le serveur (étape 6) :
{ECC61978EDCC2B5A}Missions/23_Campaign.conf- Conflict, Everon
{C700DB41F0C546E1}Missions/23_Campaign_Arland.conf- Conflict, Arland
{59AD59368755F41A}Missions/21_GM_Eden.conf- Game Master, Everon
{2BBBE828037C6F4B}Missions/22_GM_Arland.conf- Game Master, Arland
{DAA03C6E6099D50F}Missions/24_CombatOps.conf- Combat Ops, Arland
5Démarrer le serveur comme un service
Le serveur s'enregistre auprès du service en ligne du jeu en HTTPS et cherche les certificats racines dans /etc/ssl/certs/ca-certificates.crt, un nom que ces systèmes n'utilisent pas : sans ce lien, le journal répète « Curl error=Problem with the SSL CA cert » et le serveur ne démarre jamais.
ln -s /etc/pki/tls/certs/ca-bundle.crt /etc/ssl/certs/ca-certificates.crt && ls -la /etc/ssl/certs/ca-certificates.crtlrwxrwxrwx. 1 root root 32 ... /etc/ssl/certs/ca-certificates.crt -> /etc/pki/tls/certs/ca-bundle.crt
Le serveur s'enregistre auprès du service en ligne du jeu en HTTPS et cherche les certificats racines dans /etc/ssl/certs/ca-certificates.crt, un nom qu'openSUSE n'utilise pas : sans ce lien, le journal répète « Curl error=Problem with the SSL CA cert » et le serveur ne démarre jamais.
ln -s /etc/ssl/ca-bundle.pem /etc/ssl/certs/ca-certificates.crt && ls -la /etc/ssl/certs/ca-certificates.crtlrwxrwxrwx 1 root root 22 ... /etc/ssl/certs/ca-certificates.crt -> /etc/ssl/ca-bundle.pem
Le service lance le serveur avec l'utilisateur reforger, avec config.json et un dossier de profil (/opt/reforger/profile) qui reçoit les journaux et les sauvegardes. À l'arrêt, le serveur sauvegarde la partie avant de quitter. Le démarrage prend une trentaine de secondes.
cat > /etc/systemd/system/reforger.service << 'EOF'
[Unit]
Description=Serveur Arma Reforger
After=network.target
[Service]
User=reforger
Group=reforger
WorkingDirectory=/opt/reforger/server
ExecStart=/opt/reforger/server/ArmaReforgerServer -config /opt/reforger/config.json -profile /opt/reforger/profile -maxFPS 60
TimeoutStopSec=60
Restart=on-failure
RestartSec=15
[Install]
WantedBy=multi-user.target
EOFsystemctl daemon-reload && systemctl enable --now reforgerCreated symlink /etc/systemd/system/multi-user.target.wants/reforger.service → /etc/systemd/system/reforger.service.
systemctl is-active reforger && grep -h 'Starting RPL server\|Server registered\|Entered online game state' $(ls -d /opt/reforger/profile/logs/logs_* | tail -n 1)/console.log && ss -lunp | grep enfMain | awk '{print $4}' | sortactive 21:58:52.759 NETWORK : Starting RPL server, listening on address 0.0.0.0:2001, fastValidation=true 21:58:54.052 BACKEND : Server registered with address: 203.0.113.42:2001 21:58:54.480 DEFAULT : Entered online game state. 0.0.0.0:17777 0.0.0.0:2001 (l'adresse enregistrée est l'adresse IP publique de votre serveur)
La sonde ci-dessous interroge le port 17777 comme le fait la liste des serveurs du jeu.
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', 17777)); r = s.recvfrom(4096)[0]
if r[4:5] == b'A':
s.sendto(q + r[5:9], ('127.0.0.1', 17777)); r = s.recvfrom(4096)[0]
p = r[6:].split(b'\x00')
print(p[0].decode(), '|', p[1].decode())
EOFMon serveur Arma Reforger | #AR-Campaign_ScenarioName_Everon
6Gérer le serveur : journal, arrêt, redémarrage
Le serveur écrit un dossier de journaux par démarrage dans /opt/reforger/profile/logs ; console.log est le journal principal. Il y a des dizaines de lignes marquées (E) sur des matériaux, des entités ou des polices : le serveur n'a pas les ressources graphiques du jeu, ces lignes sont normales.
tail -f $(ls -d /opt/reforger/profile/logs/logs_* | tail -n 1)/console.logsystemctl status reforgersystemctl stop reforgergrep -h PERSISTENCE $(ls -d /opt/reforger/profile/logs/logs_* | tail -n 1)/console.log22:00:11.648 DEFAULT : [PERSISTENCE] Save (SHUTDOWN) started. 22:00:11.730 DEFAULT : [PERSISTENCE] Save completed successfully.
systemctl start reforgersystemctl restart reforger7Ouvrir les ports dans le pare-feu
Les joueurs se connectent en UDP sur le port 2001 ; le port 17777 en UDP sert à la liste des serveurs. 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 2001/udp && ufw allow 17777/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=2001/udp --add-port=17777/udp && firewall-cmd --reload... success success
dnf install -y firewalld && systemctl enable --now firewalld && firewall-cmd --permanent --add-port=2001/udp --add-port=17777/udp && firewall-cmd --reload... success success
firewall-cmd --permanent --add-port=2001/udp --add-port=17777/udp && firewall-cmd --reloadsuccess success
ufw statusStatus: active 22/tcp ALLOW Anywhere 2001/udp ALLOW Anywhere 17777/udp ALLOW Anywhere
firewall-cmd --list-ports2001/udp 17777/udp
firewall-cmd --list-ports2001/udp 17777/udp
firewall-cmd --list-ports2001/udp 17777/udp
8Se connecter au serveur
- Lancez Arma Reforger, ouvrez la liste des serveurs et cherchez le nom donné à game.name (Mon serveur Arma Reforger).
- Entrez le mot de passe de game.password.
- Le mot de passe de game.passwordAdmin sert à prendre les droits d'administration dans le jeu.
9Sauvegarder la partie chaque nuit
Le script archive config.json et les sauvegardes du serveur (profile/profile/.save) dans /opt/reforger/backups en gardant les 7 dernières archives ; cron le lance chaque nuit à 4 h.
cat > /opt/reforger/backup.sh << 'EOF'
#!/bin/sh
BACKUP_DIR=/opt/reforger/backups
DATE=$(date +%Y-%m-%d_%H-%M)
mkdir -p $BACKUP_DIR
tar -czf $BACKUP_DIR/reforger-$DATE.tar.gz -C /opt/reforger config.json profile/profile/.save
cd $BACKUP_DIR && ls -t | tail -n +8 | xargs -r rm
EOF
chmod +x /opt/reforger/backup.sh && chown reforger:reforger /opt/reforger/backup.shsu - reforger -c '/opt/reforger/backup.sh && ls -la /opt/reforger/backups'-rw-rw-r-- 1 reforger reforger 10842 ... reforger-2026-09-21_22-00.tar.gz (la taille grandit avec la partie)
apt install -y cron && systemctl enable --now crondnf install -y cronie && systemctl enable --now cronddnf install -y cronie && systemctl enable --now crondzypper -n install cronie && systemctl enable --now cronsu - reforger -c '(crontab -l 2>/dev/null; echo "0 4 * * * /opt/reforger/backup.sh") | crontab - && crontab -l'0 4 * * * /opt/reforger/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 la partie), passe par SteamCMD, puis le relance.
systemctl stop reforger && su - reforger -c "/opt/reforger/steamcmd/steamcmd.sh +force_install_dir /opt/reforger/server +login anonymous +app_update 1874900 +quit" && systemctl start reforger... Success! App '1874900' already up to date. (ou « 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.
Le serveur n'a pas les ressources graphiques du jeu et le signale à chaque chargement : ces lignes n'empêchent rien. Ce qui compte, c'est « Server registered with address » et « Entered online game state ».
Le serveur ne trouve pas le fichier des certificats racines sous le nom qu'il attend : sur AlmaLinux, Rocky, CentOS et openSUSE, faites la boîte « Donner au serveur le fichier des certificats » de l'étape 5, puis systemctl restart reforger.
Vérifiez que la machine sort sur Internet, que config.json est un JSON valide (le journal dit « JSON is Valid » quand c'est le cas) et que scenarioId est l'une des valeurs de l'étape 4.
Vérifiez que la sonde de l'étape 5 répond, que les ports 2001 et 17777 sont ouverts en UDP (étape 7) et que visible vaut true dans config.json.
Serveur prêt
Votre serveur Arma Reforger démarre avec la machine, sauvegarde la partie à l'arrêt et chaque nuit, et écoute sur les ports 2001 et 17777. Donnez le nom du serveur et son mot de passe à vos joueurs.