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)
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
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. ...
Le serveur se télécharge en archive .tar.xz : Debian ne livre pas xz, sans lui tar répond « xz: Cannot exec ».
apt install -y curl xz-utilsdnf install -y curl xz... Complete!
dnf install -y curl xzzypper -n install curl xz2Cré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.
mkdir -p /opt/factorio/saves && useradd -r -s /bin/bash -d /opt/factorio factorio && chown -R factorio:factorio /opt/factorioL'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.
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"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.
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.jsonname, 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.
su - factorio -c '/opt/factorio/factorio/bin/x64/factorio --create /opt/factorio/saves/MaCarte.zip' | tail -2 && ls -l /opt/factorio/savesDone. 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.
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.shcat > /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
EOFsystemctl daemon-reload && systemctl enable --now factorioCreated 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.
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 '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.
apt install -y ufw && ufw allow 22/tcp && ufw allow 34197/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=34197/udp && firewall-cmd --reload... success success
dnf install -y firewalld && systemctl enable --now firewalld && firewall-cmd --permanent --add-port=34197/udp && firewall-cmd --reload... success success
firewall-cmd --permanent --add-port=34197/udp && firewall-cmd --reloadsuccess success
7Se connecter au serveur
- Lancez Factorio, connecté à votre compte factorio.com, puis Multijoueur et la connexion par adresse.
- Entrez l'adresse IP de votre serveur et le port : 203.0.113.42:34197.
- 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.
echo /players > /opt/factorio/console.in && sleep 2 && journalctl -u factorio --no-pager -o cat -n 1Players (0):
/players/save/promote Pseudo/kick Pseudo/config get max-players/version/quit9Gérer, sauvegarder et mettre à jour le serveur
systemctl status factoriojournalctl -u factorio -fsystemctl restart factoriosystemctl stop factoriosystemctl stop factorio && journalctl -u factorio --no-pager -o cat -n 30 | grep -E 'SIGTERM|Saving map|Goodbye' && systemctl start factorio19.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.
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.shsu - factorio -c '/opt/factorio/backup.sh && ls -la /opt/factorio/backups'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)
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 - factorio -c '(crontab -l 2>/dev/null; echo "0 4 * * * /opt/factorio/backup.sh") | crontab - && crontab -l'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.
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 factorioVersion: 2.0.77 (build 84539, linux64, headless) (le numéro est celui de la version stable du moment)
Erreurs fréquentes
L'image du serveur a été construite sur un autre disque et GRUB demande où se réinstaller : choisissez le disque de la machine (celui que lsblk affiche, en général /dev/sda) ; la mise à jour continue ensuite.
xz n'est pas installé : c'est le cas de Debian. Faites la boîte de l'étape 1, puis relancez le téléchargement.
Le système n'a pas la bibliothèque C standard du serveur (glibc) : c'est le cas d'Alpine. Prenez un des systèmes de ce guide.
visibility.public est à true sans compte : le serveur tourne, mais n'est pas dans la liste publique. Mettez username et token d'un compte factorio.com (le jeton est sur la page du profil), ou remettez public à false.
require_user_verification exige un compte factorio.com connecté dans le jeu. Sans compte (version sans DRM hors ligne), mettez-le à false et redémarrez le serveur.
La console du serveur s'est fermée : c'est ce qui arrive à chaque arrêt du service, sans conséquence. En dehors d'un arrêt, vérifiez que start.sh a bien la ligne sleep infinity.
Le serveur tourne et tient le dossier : arrêtez-le (systemctl stop factorio), créez la carte, puis redémarrez-le.
Le joueur ne s'est jamais connecté à ce serveur : le pseudo est inconnu. Pour un administrateur, la liste de l'étape 3 suffit ; il sera promu à sa première connexion.
Port 34197 UDP fermé (étape 6), ou serveur pas démarré (« Hosting game » dans le journal), ou versions différentes entre le jeu et le serveur (étape 9).
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.