Questa guida illustra l’installazione di un server Factorio headless utilizzando Docker, basata sull’immagine open-source factoriotools/factorio. L’obiettivo è semplificare la configurazione e l’avvio del server, consentendo di dedicare più tempo al gioco e meno alla risoluzione di problemi tecnici. Verranno fornite configurazioni generali, esempi chiari per ciascun passaggio e istruzioni per personalizzare le impostazioni del server tramite il file server-settings.json.

Prerequisiti

Prima di procedere, assicurarsi di avere:

  • Docker Engine e Docker Compose installati sul server.
  • Una licenza valida di Factorio per l’uso del server headless.
  • Le porte UDP 34197 (e opzionalmente TCP 27015 per RCON) aperte sul firewall.
  • Un editor di testo per creare i file di configurazione (docker-compose.yml e, opzionalmente, un template per server-settings.json).

Docker Compose

Il file docker-compose.yml qui sotto configura un singolo servizio per il server Factorio. Utilizza la versione 3.8 di Docker Compose e imposta il riavvio automatico (restart: always). Il volume ./factorio:/factorio garantisce la persistenza dei dati, inclusi salvataggi, mod e configurazioni. Le impostazioni del server (come nome, descrizione e password) non sono gestite tramite variabili d’ambiente dirette, ma modificando il file server-settings.json nel volume (vedi sezione “Configurazione del servizio”).

yaml
version: '3.8'

services:

    factorio:
        image: factoriotools/factorio:latest
        container_name: factorio
        restart: always
        ports:
            - "34197:34197/udp"
            - "27015:27015/tcp"  # Opzionale: per RCON
        environment:
            TZ: Europe/Rome
            GENERATE_NEW_SAVE: false  # Genera una nuova mappa se true
            LOAD_LATEST_SAVE: true    # Carica l'ultimo salvataggio
            PORT: 34197
        volumes:
            - ./factorio:/factorio

Note:

  • L’immagine :latest utilizza l’ultima versione stabile di Factorio. Per una versione specifica, sostituire con :2.0.0 (ad esempio).
  • La porta UDP 34197 è standard per Factorio; la TCP 27015 è per RCON (Remote Console), utile per la gestione remota.
  • Non sono incluse variabili per RCON password, che viene generata automaticamente e salvata in /factorio/rconpw. Per sicurezza, modificarla manualmente.

Il file .env (opzionale)

Per variabili sensibili come il token Factorio (per aggiornamenti mod), creare un file .env nella stessa posizione del docker-compose.yml:

bash
FACTORIO_TOKEN=il_tuo_token_factorio
FACTORIO_USERNAME=il_tuo_username

Queste variabili possono essere referenziate nel docker-compose.yml come ${FACTORIO_TOKEN} per abilitare UPDATE_MODS_ON_START: true.

Consiglio: Generare un token sicuro dal sito factorio.com e utilizzarlo solo se necessario per gli aggiornamenti automatici dei mod.

Avvio dei container

Per avviare il container, spostarsi nella directory contenente i file docker-compose.yml (e .env, se utilizzato) ed eseguire:

bash
docker-compose up -d

Questo avvia il servizio in modalità detached. Il primo avvio genera i file di configurazione nel volume ./factorio. Per connettersi al server dal client Factorio, utilizzare l’indirizzo IP del server e la porta 34197.

Dettaglio dei servizi

Il file docker-compose.yml definisce un singolo servizio principale (factorio), responsabile dell’esecuzione del server headless. Le caratteristiche principali sono:

  • Avvio del container: La politica di riavvio (restart: always) garantisce il riavvio automatico in caso di problemi, ideale per ambienti di produzione.
  • Persistenza dei dati: Il volume ./factorio:/factorio memorizza salvataggi, mod, log e configurazioni (inclusi server-settings.json e map-settings.json), preservandoli tra riavvii e aggiornamenti.
  • Variabili d’ambiente supportate: Di seguito, una tabella con le principali variabili configurabili. Queste influenzano l’avvio e la generazione della mappa, ma non le impostazioni del server (gestite via JSON).
Variabile Descrizione Valore predefinito Note
TZ Fuso orario del container. - Esempio: Europe/Rome.
GENERATE_NEW_SAVE Genera una nuova mappa se non esiste un salvataggio. false Impostare su true per una nuova partita; combina con PRESET per preset (es. death-world).
LOAD_LATEST_SAVE Carica l’ultimo salvataggio disponibile. true Impostare su false per caricare un salvataggio specifico via SAVE_NAME.
PORT Porta UDP su cui il server ascolta. 34197 Modificare la mappatura porte in Docker se diverso dal default.
RCON_PORT Porta TCP per RCON (gestione remota). 27015 Opzionale; mappare solo se necessario.
SAVE_NAME Nome del file di salvataggio da caricare/generare. _autosave1 Usare con LOAD_LATEST_SAVE: false.
PRESET Preset per la generazione della mappa (se GENERATE_NEW_SAVE: true). - Esempi: default, rail-world, ribbon-world.
UPDATE_MODS_ON_START Aggiorna i mod all’avvio. false Richiede USERNAME e TOKEN da factorio.com.
TOKEN Token per aggiornamenti mod. - Sensibile; impostare via .env.
USERNAME Username Factorio per aggiornamenti mod. - Impostare via .env.

Per impostazioni avanzate, consultare la documentazione ufficiale .


Configurazione del servizio

Dopo l’avvio iniziale, personalizzare il server modificando i file nel volume ./factorio/config. In particolare:

Modifica di server-settings.json

Il file server-settings.json controlla impostazioni come nome del server, descrizione, password e numero massimo di giocatori. Dopo il primo avvio, arrestare il container (docker-compose down), modificare il file e riavviare (docker-compose up -d).

Esempio di server-settings.json base (personalizzare i valori):

json
{
  "name": "Factorio Super Server",
  "description": "Un server Factorio dedicato per amici e avventure industriali.",
  "visibility": "lan",  // Opzioni: "public", "lan", false
  "max_players": 10,
  "require_user_verification": true,
  "require_user_group_membership_for_joining": false,
  "auto_save_interval": 300,  // Secondi tra salvataggi automatici
  "auto_save_slots": 5,       // Numero di slot per salvataggi
  "minimum_latency_in_ticks": 0,  // Latenza minima per nascondere giocatori
  "afk_autokick_interval": 0,     // Autokick per inattività (0 = disabilitato)
  "password": "5up3r_P4s5w0rd",   // Password per accesso (cambiare!)
  "allow_commands": "admins-only",
  "game_password": "",  // Password per comandi
  "verify_user_identity": true
}

Note:

  • Per una configurazione dinamica, creare un template con placeholder (es. "name": "${SERVER_NAME}") e sovrascrivere l’entrypoint nel docker-compose.yml per usare envsubst (vedi documentazione GitHub per esempi).
  • Assicurarsi che i file nel volume siano di proprietà dell’utente 845 (Factorio): sudo chown -R 845:845 ./factorio.

Gestione RCON

Per accedere via RCON, utilizzare tool come rcon-cli o comandi Docker: docker exec -it factorio rcon /players. La password è in ./factorio/rconpw; modificarla per sicurezza.

Aggiunta di mod

Copiare i file mod nella directory ./factorio/mods e riavviare il container. Per aggiornamenti automatici, impostare UPDATE_MODS_ON_START: true con credenziali Factorio.


Note sulla sicurezza

  • Password: Utilizzare password complesse per il server e RCON. Non esporre porte inutili (es. rimuovere mappatura RCON se non usata).
  • Firewall: Limitare l’accesso alla porta UDP 34197 solo agli IP autorizzati.
  • Aggiornamenti: Eseguire regolarmente docker-compose pull per aggiornare l’immagine e mantenere la sicurezza.
  • Permessi: Impostare i permessi corretti sul volume per evitare errori di accesso.

Conclusione

Seguendo questa guida, è possibile installare e configurare un server Factorio headless tramite Docker in modo efficiente e persistente. La modifica di server-settings.json offre flessibilità per personalizzazioni avanzate, mentre le variabili d’ambiente semplificano aspetti come la generazione della mappa. Per ulteriori dettagli, consultare la documentazione di factoriotools/factorio-docker .