Funk-lab/ansible/roles/satisfactory_server
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
..
defaults feat(ansible): serveur dédié Satisfactory sur gpu-01 (#74) 2026-07-03 00:56:28 +02:00
handlers feat(ansible): serveur dédié Satisfactory sur gpu-01 (#74) 2026-07-03 00:56:28 +02:00
tasks feat(ansible): serveur dédié Satisfactory sur gpu-01 (#74) 2026-07-03 00:56:28 +02:00
templates feat(ansible): serveur dédié Satisfactory sur gpu-01 (#74) 2026-07-03 00:56:28 +02:00
README.md feat(ansible): serveur dédié Satisfactory sur gpu-01 (#74) 2026-07-03 00:56:28 +02:00

satisfactory_server

Serveur dédié Satisfactory sur gpu-01 — installé via steamcmd (login anonyme, app Steam 1690800), lancé par systemd (satisfactory-server.service).

Variables (defaults)

Variable Défaut Rôle
satisfactory_user satisfactory Utilisateur système du service
satisfactory_home /srv/satisfactory Home + racine d'install
satisfactory_install_dir /srv/satisfactory/server Fichiers du jeu (~10 Go)
satisfactory_port 7777 Jeu (UDP) + API HTTPS (TCP)
satisfactory_reliable_port 8888 Reliable Messaging (TCP, ≥ 1.1) — bloqué = kick à ~60 s
satisfactory_update_on_start true steamcmd +app_update en ExecStartPre à chaque (re)start
satisfactory_memory_max 16G MemoryMax systemd — protège llama-server (32 Go partagés)
satisfactory_nice 5 Priorité CPU réduite vs llama-server

Caveats

  • Premier run long : le task d'installation télécharge ~10 Go depuis Steam (guardé par creates: — ne rejoue jamais). Prévoir 10-30 min selon le débit.
  • Mises à jour du jeu : gérées par l'ExecStartPre du service (à chaque restart), pas par Ansible. systemctl restart satisfactory-server = update + relance.
  • Sauvegardes : ~satisfactory/.config/Epic/FactoryGame/Saved/SaveGames/server/non sauvegardées ailleurs (pas de backup automatisé, gap connu).
  • Config serveur (nom, mot de passe admin) : se fait en jeu à la première connexion (menu Server Manager), pas par fichier.
  • RAM : usine late-game > 12 Go possible. MemoryMax=16G fait tuer le jeu par l'OOM-killer plutôt que d'affamer le slot LLM (:1234) — augmenter si besoin via host_vars.
  • Réseau : ton PC (192.168.1.x) joint gpu-01:7777 via storage-01 — la chaîne forward du rôle gateway autorise déjà tout le trafic LAN domestique → LAN cluster. Dans le jeu : ajouter le serveur avec l'adresse 192.168.10.20:7777.
  • Les ports firewalld 7778/udp et 27015/udp présents sur gpu-01 sont des restes des anciens ports « Experimental » (avant la 1.0) — inutiles désormais.