mirror of
https://github.com/Alkatrazz24/Funk-lab.git
synced 2026-07-08 05:34:43 +02:00
* 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>
123 lines
3.7 KiB
YAML
123 lines
3.7 KiB
YAML
---
|
|
# --- Dépendances steamcmd (binaire 32 bits) ---
|
|
|
|
- name: Install steamcmd 32-bit dependencies
|
|
ansible.builtin.dnf:
|
|
name:
|
|
- glibc.i686
|
|
- libstdc++.i686
|
|
- policycoreutils-python-utils # semanage (contexte SELinux, cf. plus bas)
|
|
state: present
|
|
|
|
# --- Utilisateur système ---
|
|
|
|
- name: Create satisfactory system user
|
|
ansible.builtin.user:
|
|
name: "{{ satisfactory_user }}"
|
|
system: true
|
|
shell: /sbin/nologin
|
|
home: "{{ satisfactory_home }}"
|
|
create_home: true
|
|
state: present
|
|
|
|
- name: Create install directories
|
|
ansible.builtin.file:
|
|
path: "{{ item }}"
|
|
state: directory
|
|
owner: "{{ satisfactory_user }}"
|
|
group: "{{ satisfactory_user }}"
|
|
mode: '0750'
|
|
loop:
|
|
- "{{ satisfactory_steamcmd_dir }}"
|
|
- "{{ satisfactory_install_dir }}"
|
|
|
|
# --- steamcmd ---
|
|
|
|
- name: Download steamcmd
|
|
ansible.builtin.get_url:
|
|
url: "https://steamcdn-a.akamaihd.net/client/installer/steamcmd_linux.tar.gz"
|
|
dest: /tmp/steamcmd_linux.tar.gz
|
|
mode: '0644'
|
|
|
|
- name: Extract steamcmd
|
|
ansible.builtin.unarchive:
|
|
src: /tmp/steamcmd_linux.tar.gz
|
|
dest: "{{ satisfactory_steamcmd_dir }}"
|
|
remote_src: true
|
|
owner: "{{ satisfactory_user }}"
|
|
group: "{{ satisfactory_user }}"
|
|
creates: "{{ satisfactory_steamcmd_dir }}/steamcmd.sh"
|
|
|
|
# --- Installation initiale du jeu (~10 Go — long au premier run) ---
|
|
# Les mises à jour suivantes passent par l'ExecStartPre du service
|
|
# (satisfactory_update_on_start), pas par ce task.
|
|
|
|
# Retries : au tout premier run, steamcmd échoue souvent avec « Missing configuration »
|
|
# (rc=8) — l'app info n'est pas encore en cache. Le run suivant passe.
|
|
- name: Install Satisfactory dedicated server via steamcmd (first run only)
|
|
ansible.builtin.command:
|
|
cmd: >
|
|
{{ satisfactory_steamcmd_dir }}/steamcmd.sh
|
|
+force_install_dir {{ satisfactory_install_dir }}
|
|
+login anonymous
|
|
+app_update {{ satisfactory_app_id }} validate
|
|
+quit
|
|
creates: "{{ satisfactory_install_dir }}/FactoryServer.sh"
|
|
become: true
|
|
become_user: "{{ satisfactory_user }}"
|
|
environment:
|
|
HOME: "{{ satisfactory_home }}"
|
|
register: satisfactory_steamcmd_install
|
|
retries: 3
|
|
delay: 10
|
|
until: satisfactory_steamcmd_install.rc | default(0) == 0
|
|
|
|
# --- SELinux ---
|
|
# L'unarchive depuis /tmp laisse steamcmd.sh en user_tmp_t et le jeu hérite de var_t
|
|
# (/srv) : systemd (init_t) refuse d'exécuter ces types → 203/EXEC Permission denied.
|
|
# bin_t sur les deux arborescences exécutables règle le problème.
|
|
|
|
- name: Set bin_t SELinux context on executable trees
|
|
community.general.sefcontext:
|
|
target: "{{ satisfactory_home }}/(steamcmd|server)(/.*)?"
|
|
setype: bin_t
|
|
state: present
|
|
when: ansible_selinux.status | default('disabled') == 'enabled'
|
|
|
|
- name: Apply SELinux contexts
|
|
ansible.builtin.command:
|
|
cmd: restorecon -R {{ satisfactory_home }}
|
|
changed_when: false
|
|
when: ansible_selinux.status | default('disabled') == 'enabled'
|
|
|
|
# --- Service systemd ---
|
|
|
|
- name: Install satisfactory-server systemd unit
|
|
ansible.builtin.template:
|
|
src: satisfactory-server.service.j2
|
|
dest: /etc/systemd/system/satisfactory-server.service
|
|
mode: '0644'
|
|
notify:
|
|
- Reload systemd
|
|
- Restart satisfactory-server
|
|
|
|
- name: Enable satisfactory-server service
|
|
ansible.builtin.systemd:
|
|
name: satisfactory-server
|
|
enabled: true
|
|
daemon_reload: true
|
|
state: started
|
|
|
|
# --- Firewall ---
|
|
# 7777 : jeu (UDP) + API HTTPS (TCP). 8888 : reliable messaging (TCP, depuis la 1.1).
|
|
|
|
- name: Open game ports in firewall
|
|
ansible.posix.firewalld:
|
|
port: "{{ item }}"
|
|
permanent: true
|
|
state: enabled
|
|
immediate: true
|
|
loop:
|
|
- "{{ satisfactory_port }}/tcp"
|
|
- "{{ satisfactory_port }}/udp"
|
|
- "{{ satisfactory_reliable_port }}/tcp"
|