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

Installer un serveur Factorio sur Linux (Ubuntu, Debian, AlmaLinux)

Documentation / Tutoriels Linux / Serveurs de jeux / Installer un serveur Factorio sur Linux (Ubuntu, Debian, AlmaLinux)
Mis à jour le 21/09/2026
14 vues
Débutant
20 minutes

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
  • 2 Go de disque libre et 2 Go de RAM
  • Un compte factorio.com pour chaque joueur (le serveur vérifie les comptes)
Votre serveur :

Ce guide installe le serveur dédié officiel de Factorio (version 2.0.77, sans Steam) : un utilisateur dédié, le serveur, ses réglages et sa liste d'administrateurs, la carte, une console qu'on commande depuis le terminal, un service qui sauvegarde la carte à l'arrêt et démarre avec la machine, le pare-feu, la connexion depuis le jeu, la sauvegarde de 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 curl et xz

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

Le serveur se télécharge en archive .tar.xz : Debian ne livre pas xz, sans lui tar répond « xz: Cannot exec ».

Installer curl et xz
apt install -y curl xz-utils
Installer curl et xz
dnf install -y curl xz
Résultat attendu
...
Complete!
Installer curl et xz
dnf install -y curl xz
Installer curl et xz
zypper -n install curl xz

2Créer un utilisateur dédié et télécharger le serveur

Le serveur ne tourne jamais en root : un utilisateur factorio, dont le dossier personnel est /opt/factorio, possède le programme (factorio) et les cartes (saves). 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 factorio
mkdir -p /opt/factorio/saves && useradd -r -s /bin/bash -d /opt/factorio factorio && chown -R factorio:factorio /opt/factorio

L'adresse de téléchargement renvoie toujours vers la version stable du serveur (57 Mo), sans compte ni Steam. L'archive contient le dossier factorio, avec le programme et les fichiers d'exemple.

Télécharger et installer le serveur, puis lire sa version (en tant que factorio)
su - factorio -c "cd /opt/factorio && curl -fsSL -o factorio-headless.tar.xz https://factorio.com/get-download/stable/headless/linux64 && tar xJf factorio-headless.tar.xz && ./factorio/bin/x64/factorio --version | head -1"
Résultat attendu
Version: 2.0.77 (build 84539, linux64, headless)

3Écrire les réglages du serveur et la liste des administrateurs

Le fichier server-settings.json porte le nom du serveur, le nombre de places, le mot de passe demandé aux joueurs et les sauvegardes automatiques. Changez au moins le mot de passe. La liste des administrateurs porte votre pseudo factorio.com : il aura les droits dès sa première connexion.

Créer server-settings.json et server-adminlist.json
cat > /opt/factorio/server-settings.json << 'EOF'
{
  "name": "Mon serveur Factorio",
  "description": "Serveur Factorio",
  "tags": [],
  "max_players": 8,
  "visibility": { "public": false, "lan": false },
  "username": "",
  "password": "",
  "token": "",
  "game_password": "ChangezMoi",
  "require_user_verification": true,
  "max_upload_in_kilobytes_per_second": 0,
  "max_upload_slots": 5,
  "minimum_latency_in_ticks": 0,
  "max_heartbeats_per_second": 60,
  "ignore_player_limit_for_returning_players": false,
  "allow_commands": "admins-only",
  "autosave_interval": 10,
  "autosave_slots": 5,
  "afk_autokick_interval": 0,
  "auto_pause": true,
  "auto_pause_when_players_connect": false,
  "only_admins_can_pause_the_game": true,
  "autosave_only_on_server": true,
  "non_blocking_saving": false
}
EOF
echo '["VotrePseudo"]' > /opt/factorio/server-adminlist.json
chown factorio:factorio /opt/factorio/server-settings.json /opt/factorio/server-adminlist.json
name, description
Le nom et la description, affichés aux joueurs
max_players
Le nombre de places (8) ; 0 = sans limite
visibility
public et lan à false : joignable par adresse seulement ; public à true exige username et token d'un compte factorio.com (sinon : « Missing token »)
game_password
Le mot de passe demandé aux joueurs
require_user_verification
true : chaque joueur doit avoir un compte factorio.com
allow_commands
admins-only : seuls les administrateurs passent des commandes dans le jeu
autosave_interval, autosave_slots
Sauvegarde automatique toutes les 10 minutes, 5 sauvegardes tournantes
auto_pause
true : le jeu s'arrête quand plus personne n'est connecté

4Créer la carte

Le serveur génère la carte une fois, avec les réglages par défaut ; il la chargera ensuite à chaque démarrage. Pour une carte différente, copiez /opt/factorio/factorio/data/map-gen-settings.example.json, modifiez-le et ajoutez --map-gen-settings suivi du fichier à la commande.

Générer la carte MaCarte
su - factorio -c '/opt/factorio/factorio/bin/x64/factorio --create /opt/factorio/saves/MaCarte.zip' | tail -2 && ls -l /opt/factorio/saves
Résultat attendu
Done.
   2.652 Goodbye
total 808
-rw-rw-r-- 1 factorio factorio 827316 Sep 21 15:48 MaCarte.zip
(le temps et la taille varient avec la carte)

5Donner une console au serveur et le démarrer comme un service

Le script de démarrage donne au serveur une console qui reste ouverte, le tube nommé /opt/factorio/console.in : tout ce qu'on y écrit arrive au serveur comme si on le tapait devant lui. Le service lance le script avec l'utilisateur factorio, relance le serveur s'il plante et le démarre avec la machine ; à l'arrêt, le serveur sauvegarde la carte de lui-même.

Créer start.sh
cat > /opt/factorio/start.sh << 'EOF'
#!/bin/sh
cd /opt/factorio
[ -p /opt/factorio/console.in ] || mkfifo /opt/factorio/console.in
sleep infinity > /opt/factorio/console.in &
exec ./factorio/bin/x64/factorio --start-server /opt/factorio/saves/MaCarte.zip --server-settings /opt/factorio/server-settings.json --server-adminlist /opt/factorio/server-adminlist.json < /opt/factorio/console.in
EOF
chmod +x /opt/factorio/start.sh && chown factorio:factorio /opt/factorio/start.sh
Créer le service factorio
cat > /etc/systemd/system/factorio.service << 'EOF'
[Unit]
Description=Serveur Factorio
After=network.target

[Service]
User=factorio
Group=factorio
WorkingDirectory=/opt/factorio
ExecStart=/opt/factorio/start.sh
Restart=on-failure
RestartSec=10

[Install]
WantedBy=multi-user.target
EOF
Activer et démarrer le service
systemctl daemon-reload && systemctl enable --now factorio
Résultat attendu
Created symlink /etc/systemd/system/multi-user.target.wants/factorio.service → /etc/systemd/system/factorio.service.

Le serveur est en jeu une seconde après le démarrage : le journal dit « Hosting game » puis « InGame », et le port 34197 est ouvert en UDP. Il prend 360 Mo de mémoire au repos.

Le serveur est démarré et écoute (la commande attend 5 secondes avant de regarder)
sleep 5 && systemctl is-active factorio && journalctl -u factorio --no-pager -o cat -n 30 | grep -E 'Hosting game|to\(InGame\)' | cut -c1-120 && ss -lunp | grep ':34197 '
Résultat attendu
active
   0.857 Hosting game at IP ADDR:({0.0.0.0:34197})
   1.008 Info ServerMultiplayerManager.cpp:808: updateTick(1) changing state from(CreatingGame) to(InGame)
UNCONN 0      0            0.0.0.0:34197      0.0.0.0:*    users:(("factorio",pid=8356,fd=7))
UNCONN 0      0               [::]:34197         [::]:*    users:(("factorio",pid=8356,fd=8))

6Ouvrir les ports dans le pare-feu

Factorio parle en UDP sur le port 34197. 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 34197/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=34197/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=34197/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=34197/udp && firewall-cmd --reload
Résultat attendu
success
success

7Se connecter au serveur

  1. Lancez Factorio, connecté à votre compte factorio.com, puis Multijoueur et la connexion par adresse.
  2. Entrez l'adresse IP de votre serveur et le port : 203.0.113.42:34197.
  3. Entrez le mot de passe de server-settings.json (game_password).

8Commander le serveur depuis le terminal

Chaque commande s'écrit dans la console du serveur avec echo ; la réponse arrive dans le journal, que la deuxième partie de la commande affiche.

Demander la liste des joueurs, puis lire la réponse
echo /players > /opt/factorio/console.in && sleep 2 && journalctl -u factorio --no-pager -o cat -n 1
Résultat attendu
Players (0):
Liste les joueurs (« Players (0): ») ; /players online, ceux qui sont connectés
/players
Sauvegarde la carte tout de suite (« Saving map to ... », « Saving finished »)
/save
Fait d'un joueur un administrateur (déjà fait pour la liste de l'étape 3 : « will be promoted upon joining the game »)
/promote Pseudo
Expulse un joueur ; /ban Pseudo le bannit (« Added Pseudo to the banlist. »), /unban Pseudo le rétablit
/kick Pseudo
Lit un réglage (« 8 ») ; /config set max-players 12 le change sans redémarrer (« Maximum number of players changed to 12. »)
/config get max-players
La version du serveur (« 2.0.77 »)
/version
Sauvegarde et arrête le serveur (c'est ce que fait systemctl stop factorio)
/quit

9Gérer, sauvegarder et mettre à jour le serveur

Voir l'état du service
systemctl status factorio
Suivre le journal du serveur en direct (Ctrl+C pour sortir)
journalctl -u factorio -f
Redémarrer
systemctl restart factorio
Arrêter
systemctl stop factorio
Vérifier que l'arrêt a sauvegardé
systemctl stop factorio && journalctl -u factorio --no-pager -o cat -n 30 | grep -E 'SIGTERM|Saving map|Goodbye' && systemctl start factorio
Résultat attendu
  19.393 Received SIGTERM, shutting down
  19.393 Info MainLoop.cpp:437: Saving map as /opt/factorio/saves/MaCarte.zip
  19.652 Goodbye

La carte vit dans /opt/factorio/saves, avec les sauvegardes automatiques. Le script ci-dessous demande une sauvegarde au serveur, attend qu'elle soit écrite, puis archive les cartes et les réglages ; chaque nuit, il conserve les 7 dernières archives.

Créer le script de sauvegarde
cat > /opt/factorio/backup.sh << 'EOF'
#!/bin/sh
BACKUP_DIR=/opt/factorio/backups
DATE=$(date +%Y-%m-%d_%H-%M)
mkdir -p $BACKUP_DIR
echo /save > /opt/factorio/console.in
sleep 5
tar -czf $BACKUP_DIR/factorio-$DATE.tar.gz -C /opt/factorio saves server-settings.json server-adminlist.json
cd $BACKUP_DIR && ls -t | tail -n +8 | xargs -r rm
EOF
chmod +x /opt/factorio/backup.sh && chown factorio:factorio /opt/factorio/backup.sh
Tester une sauvegarde tout de suite
su - factorio -c '/opt/factorio/backup.sh && ls -la /opt/factorio/backups'
Résultat attendu
total 804
drwxrwxr-x 2 factorio factorio     46 Sep 21 15:48 .
drwxr-xr-x 5 factorio factorio    190 Sep 21 15:48 ..
-rw-rw-r-- 1 factorio factorio 820615 Sep 21 15:48 factorio-2026-09-21_15-48.tar.gz
(la taille grandit avec l'usine)
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 - factorio -c '(crontab -l 2>/dev/null; echo "0 4 * * * /opt/factorio/backup.sh") | crontab - && crontab -l'
Résultat attendu
0 4 * * * /opt/factorio/backup.sh

Le jeu et le serveur doivent avoir la même version : après une mise à jour du jeu, la même adresse donne la nouvelle archive stable. Serveur arrêté, on la décompresse par-dessus l'ancienne ; les cartes et les réglages, hors du dossier factorio, ne bougent pas.

Mettre à jour le serveur (serveur arrêté, puis relancé)
systemctl stop factorio && su - factorio -c "cd /opt/factorio && curl -fsSL -o factorio-headless.tar.xz https://factorio.com/get-download/stable/headless/linux64 && tar xJf factorio-headless.tar.xz && ./factorio/bin/x64/factorio --version | head -1" && systemctl start factorio
Résultat attendu
Version: 2.0.77 (build 84539, linux64, headless)
(le numéro est celui de la version stable du moment)

Erreurs fréquentes

Serveur prêt

Votre serveur Factorio démarre avec la machine, sauvegarde sa carte à l'arrêt, toutes les 10 minutes et chaque nuit, et écoute sur le port 34197. Pour d'autres jeux, voyez les serveurs de jeux.

💬 Écrivez-nous sur Messenger !