Funk-lab/admin/ops/satisfactory.md
alkatrazz 8dbfa2f8dd fix(satisfactory): ouvrir le port 8888/tcp Reliable Messaging
Depuis la 1.1, le client ouvre un socket TCP :8888 en plus du jeu UDP
:7777. Bloqué par firewalld, le join réussissait puis le client était
déconnecté (~60 s) avec « connection to the host has been lost »
(log client : LogReliableMessaging: Failed to connect to server socket).

- firewalld gpu-01 : + 8888/tcp (variable satisfactory_reliable_port)
- gateway s01 : DNAT + forward étendus à 8888/tcp
- doc : tableau des 3 sockets + piège n°3

Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
2026-07-03 00:02:05 +02:00

3 KiB

Serveur dédié Satisfactory (gpu-01)

Serveur de jeu Satisfactory hébergé sur gpu-01 (192.168.10.20), à côté du llama-server. Installé par le rôle Ansible satisfactory_server (steamcmd, login anonyme Steam, app 1690800) — service systemd satisfactory-server.

Accès

Depuis Adresse
LAN domestique (192.168.1.x) 192.168.10.20:7777 (route via s01) ou 192.168.1.200:7777 (DNAT)
Internet (optionnel) port-forward box → 192.168.1.200:7777 (TCP+UDP) — le DNAT fait le reste

Dans le jeu : Server Manager → Add Server. Nom du serveur et mot de passe admin se définissent en jeu à la première connexion (pas de fichier de config).

Réseau

Le serveur utilise trois sockets (Satisfactory ≥ 1.1) :

Port Proto Rôle
7777 UDP Jeu
7777 TCP API HTTPS (Server Manager)
8888 TCP Reliable Messaging — bloqué = déconnexion ~60 s après chaque join
  • gpu-01 firewalld : 7777/tcp+udp + 8888/tcp ouverts (gérés par le rôle). Les ports 7778/udp et 27015/udp encore ouverts sont des restes pré-1.0, inutiles.
  • storage-01 nftables (rôle gateway) : DNAT 192.168.1.200 → 192.168.10.20 (7777 TCP+UDP, 8888 TCP) + règles forward associées. Redéploiement : --tags gateway.

Exploitation

# état / logs (sur gpu-01)
systemctl status satisfactory-server
journalctl -u satisfactory-server -f

# mise à jour du jeu = simple restart (steamcmd +app_update en ExecStartPre)
systemctl restart satisfactory-server
  • Install : /srv/satisfactory/server (~10 Go, disque OS), user système satisfactory
  • Sauvegardes : /srv/satisfactory/.config/Epic/FactoryGame/Saved/SaveGames/server/⚠️ aucun backup automatisé (gap connu, comme etcd/PostgreSQL)
  • Garde-fous ressources (32 Go partagés avec llama-server) : MemoryMax=16G — une usine late-game qui explose la RAM fait tuer le jeu, pas le LLM — et Nice=5 (priorité CPU au llama-server). À ajuster via host_vars si besoin.

Pièges rencontrés à l'installation (2026-07-02)

  1. steamcmd « Missing configuration » (rc=8) au tout premier +app_update — bug connu steamcmd (app info pas encore en cache). Le rôle fait des retries.
  2. SELinux 203/EXEC : steamcmd.sh extrait depuis /tmp gardait le contexte user_tmp_t, le jeu héritait de var_t (/srv) — systemd (init_t) refuse d'exécuter ces types. Le rôle pose un fcontext bin_t sur steamcmd/ et server/ + restorecon. Symptôme : Failed at step EXEC ... Permission denied.
  3. Déconnexion ~60 s après chaque join (« Your connection to the host has been lost ») : le port 8888/tcp (Reliable Messaging) n'était pas ouvert. Le join UDP réussit, puis le client tente le socket TCP 8888, se fait rejeter par firewalld et abandonne. Diagnostic dans le log client (.../FactoryGame/Saved/Logs/FactoryGame.log) : LogReliableMessaging: Error: Failed to connect to server socket.