Funk-lab/admin/ops/satisfactory.md
ALI YESILKAYA 507f4822f0
feat(ansible): serveur dédié Satisfactory sur gpu-01 (#74)
* feat(ansible): serveur dédié Satisfactory sur gpu-01

- Nouveau rôle satisfactory_server : install steamcmd (login anonyme,
  app 1690800), service systemd avec update auto en ExecStartPre,
  MemoryMax=16G + Nice=5 (protège le llama-server), firewalld 7777 tcp+udp
- Retries steamcmd (« Missing configuration » rc=8 au premier run)
- Fcontext SELinux bin_t sur steamcmd/ et server/ (203/EXEC sinon)
- gateway : DNAT 192.168.1.200:7777 → gpu-01:7777 (TCP+UDP) + forward
- Doc admin/ops/satisfactory.md (accès, exploitation, pièges rencontrés)

Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>

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

* docs(satisfactory): accès internet via IPv4 full-stack Free

Le remap de port Freebox (17777→7777) ne fonctionne pas : le serveur
annonce ses ports dans le protocole (externe = interne obligatoire).
Option IPv4 full-stack activée → redirections 1:1 7777 tcp+udp + 8888 tcp
vers funk-s01, DNAT existant inchangé.

Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>

---------

Co-authored-by: Claude Fable 5 <noreply@anthropic.com>
2026-07-03 00:56:28 +02:00

3.6 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 (amis) kaya.freeboxos.fr:7777 — redirections Freebox → funk-s01, le DNAT fait le reste

⚠️ Le remap de port (ex. 17777→7777) ne marche PAS : le serveur annonce ses ports au client dans le protocole (API → port de jeu, jeu → reliable port). Externe = interne obligatoire (wiki). Free IPv4 partagée ne permettant pas de rediriger < 16384, l'option IPv4 full-stack (gratuite, espace abonné Free) a été activée le 2026-07-03 (IP fixe 82.67.223.17) pour pouvoir ouvrir 7777/8888 en 1:1. Redirections Freebox requises (destination funk-s01) : 7777/tcp, 7777/udp, 8888/tcp — ports de début/fin/destination identiques.

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.