Checklist rapida per configurazione Docker FiveM
Una configurazione Docker utile mantiene i dati di txAdmin persistenti, espone le porte giuste e rende gli aggiornamenti reversibili.
- Usa Docker Compose v2 e monta txData o la directory dei dati del server.
- Esponi 30120 TCP/UDP per FiveM e 40120 solo dove è previsto l'accesso a txAdmin.
- Fai backup di server.cfg, risorse, txData e dati del database prima di cambiare artefatti o immagini.
Percorsi correlati nello shop: Pacchetti server | FiveM Scripts | Strumenti di amministrazione
Run a FiveM server (FXServer) in Docker with this copy-paste guide: a minimal compose.yaml utilizzando spritsail/fivem image, correct port mapping for 30120 (TCP+UDP) and 40120 (txAdmin), persistent bind mounts for server.cfg, resources, and txAdmin data, license-key handling, and safe update and rollback steps.
In breve
- Installa Docker Engine + Docker Compose v2 su Ubuntu. (Documentazione Docker)
- Crea una cart progetti, aggiungi
.env(impostaLICENSE_KEY,SERVER_NAME, porte) e un minimocompose.yaml. - Inizia con
docker compose up -d; guarda i log condocker compose logs -f. - Modificare
data/server.cfg(hostname, endpoint, risorse); riavvia il contenitore. - Apri il firewall per 30120/TCP+UDP E 40120/TCP (txAdmin). La porta predefinita di txAdmin è 40120. (Documenti Cfx.re)
- Eseguire sempre il container con stdin/tty abilitato per evitare crash. (GitHub)
Prerequisiti
- Sistema operativo: Linux Ubuntu 22.04+ (note per macOS/Windows sotto).
- Hardware: 2+ vCPU, 4–8 GB RAM (di più per risorse pesanti), SSD ra recommandato.
- Docker: Installa Docker Engine E Compose v2 dalla documentazione ufficiale. (Documentazione Docker)
- Chiave licenza FiveM: Generala nel portale Cfx.re (Keymaster). Tienila segreta. (supporto.cfx.re)
- Firewall/NAT: Capacità di aprire/forwardare le porte 30120 (TCP+UDP) e opzionalmente 40120 (TCP). (Documenti Cfx.re)
- (Opzionale) Un dominio/sottodominio per txAdmin.
Panoramica dell'architettura
Un contenitore esegue Server FX utilizzando spritsail/fivem immagine. I dati vengono bind-mounted persistere server.cfg, risorse e log. Le porte 30120/TCP+UDP sono esposte ai giocatori; 40120/TCP espone txAdmin quando abilitato. Un healthcheck può sondare http://127.0.0.1:30120/info.json. (GitHub)
+-------------------- Docker Host (Ubuntu) --------------------+ | /home/fivem/data --> /config (in container) | | /home/fivem/txData --> /txData (txAdmin data) | | | | Exposed: 30120/tcp+udp [FXServer] | 40120/tcp [txAdmin] | | Healthcheck: GET 127.0.0.1:30120/info.json | +-------------------------------------------------------------+
Avvio rapido (copia-incolla)
1) Crea una cartella di progetto
# Optional: dedicated system user and directories
sudo useradd -r -m -d /home/fivem -s /usr/sbin/nologin fivem || true
sudo mkdir -p /home/fivem/{data,txData}
sudo chown -R "$USER":"$USER" /home/fivem
cd /home/fivem
2) Crea .env
cat > .env <<'EOF' # === REQUIRED === LICENSE_KEY=REPLACE_WITH_YOUR_CFX_KEY # Convenience (used by ports mapping below) FXSERVER_PORT=30120 TXADMIN_PORT=40120 # Not read by the image directly; use it when editing server.cfg SERVER_NAME="My Docker FiveM" # Optional: if omitted, default config generation sets a random RCON password RCON_PASSWORD= EOF
3) Minimo compose.yaml (fissa un tag)
Configurazione minima funzion utilizando l'immagine upstream. Usa tty+stdin per prevenire crash. (GitHub)
# compose.yaml
services:
fivem:
image: spritsail/fivem:stable
container_name: fivem
environment:
- LICENSE_KEY=${LICENSE_KEY}
# Optional toggles (see table below):
# - NO_DEFAULT_CONFIG=1 # required if you want to use txAdmin
# - NO_LICENSE_KEY=1 # if you put the key in server.cfg instead
# - NO_ONESYNC=1 # disable OneSync in default config
# - RCON_PASSWORD=${RCON_PASSWORD}
volumes:
- ./data:/config # server.cfg, resources, logs
ports:
- "${FXSERVER_PORT}:30120/tcp"
- "${FXSERVER_PORT}:30120/udp"
tty: true # prevent startup crash (equiv. to -t)
stdin_open: true # prevent startup crash (equiv. to -i)
restart: unless-stopped
Avvia:
docker compose up -d docker compose logs -f
4) Variante estesa (txAdmin, healthcheck, limiti)
# compose.extended.yaml
services:
fivem:
image: spritsail/fivem:stable
container_name: fivem
environment:
- LICENSE_KEY=${LICENSE_KEY}
- NO_DEFAULT_CONFIG=1 # enable txAdmin (no default +exec)
# - NO_LICENSE_KEY=1 # if storing key in server.cfg
# - RCON_PASSWORD=${RCON_PASSWORD}
volumes:
- ./data:/config
- ./txData:/txData # persist txAdmin data
ports:
- "${FXSERVER_PORT}:30120/tcp"
- "${FXSERVER_PORT}:30120/udp"
- "${TXADMIN_PORT}:40120/tcp" # txAdmin Web UI (default 40120)
tty: true
stdin_open: true
healthcheck:
test: ["CMD-SHELL", "wget -qO- http://127.0.0.1:30120/info.json >/dev/null 2>&1"]
interval: 30s
timeout: 5s
retries: 5
start_period: 30s
# Basic resource knobs for standalone Compose (not Swarm 'deploy')
cpus: 2
mem_limit: "6g"
ulimits:
nofile:
soft: 1048576
hard: 1048576
restart: unless-stopped
Se
wgetnon è disponibile nell'immagine, rimuovi il healthcheck o sostituiscilo con una sonda TCP. txAdmin persiste sotto/txData, porta 40120 è il suo default. (GitHub)
Configurazione e persistenza
- Al primo avvio, i default vengono scritti nel bind mount
./data(percorso del container/config). Modifica./data/server.cfge riavvia il container. (GitHub)
Tipico server.cfg bit:
# data/server.cfg # Network endpoints (leave 0.0.0.0 to listen on all interfaces) endpoint_add_tcp "0.0.0.0:30120" endpoint_add_udp "0.0.0.0:30120" # Server name set sv_hostname "My Docker FiveM" # License key (use this only if NOT using LICENSE_KEY env) # sv_licenseKey "REPLACE_WITH_YOUR_CFX_KEY" # Example: ensure a basic resource # ensure chat
Layout della directory (host):
/home/fivem ├─ data/ -> /config (server.cfg, resources/, logs/) └─ txData/ -> /txData (txAdmin profiles & DB)
Backup
- Backup del bind mount:
tar -C /home/fivem -czf fivem-backup_$(date +%F).tgz data txData
- Se si passa a named volumes, esegui il backup così:
docker run --rm -v fivem_data:/data -v "$PWD":/backup busybox sh -c 'tar -czf /backup/fivem_data_$(date +%F).tgz -C / data'
Variabili d'ambiente (da spritsail/fivem)
| Nome | Scopo | Esempio |
|---|---|---|
LICENSE_KEY | Necessario Chiave di licenza del server FiveM per avviare FXServer | LICENSE_KEY=xxxxx |
RCON_PASSWORD | Password RCON usata quando si creano configurazioni predefinite; casuale di 16 caratteri se non impostata | RCON_PASSWORD=strongpass |
NO_DEFAULT_CONFIG | Disabilita il default +exec così txAdmin può gestire il server | 1 |
NO_LICENSE_KEY | Non leggere la chiave dall'ambiente; conservala in server.cfg | 1 |
NO_ONESYNC | Disabilita OneSync nelle configurazioni predefinite | 1 |
Queste variabili d'ambiente e percorsi /config, /txData, oltre alla necessità di -ti sono definiti dall'immagine upstream. (GitHub)
Segreto gestione: Preferisci
NO_LICENSE_KEY=1e mettisv_licenseKeyInserver.cfgcon i permessi dei file corretti se non vuoi la chiave nell'env del contenitore. (GitHub)
Rete & Sicurezza
Porte richieste
| Scopo | Porta | Proto |
|---|---|---|
| Connessioni giocatori / API | 30120 | TCP+UDP |
| txAdmin Web UI (opzionale) | 40120 | TCP |
| Legacy master (raramente necessario) | 30110 | UDP |
FiveM utilizza come predefinita la 30120; il default di txAdmin è 40120. (GitHub)
Esempi di UFW (Ubuntu)
sudo ufw allow 30120/tcp sudo ufw allow 30120/udp sudo ufw allow 40120/tcp # only if you enable txAdmin sudo ufw reload
nftables (esempio di set di regole)
sudo nft add table inet filter
sudo nft add chain inet filter input '{ type filter hook input priority 0; policy drop; }'
sudo nft add rule inet filter input ct state established,related accept
sudo nft add rule inet filter input iif lo accept
sudo nft add rule inet filter input tcp dport {30120,40120} accept
sudo nft add rule inet filter input udp dport 30120 accept
Minimo privilegio & segreti
- Esegui su un host rafforzato; evita di mappare capacità extra; non eseguire Docker come
rootutente sull'host. - Mantenere RCON abilitato solo se necessario; proteggi txAdmin con credenziali forti e limita l'accesso al firewall.
- Se usi distribuzioni basate su SELinux (non Ubuntu), aggiungi
:Z/:zai bind mount per risolvere problemi di contesto.
Aggiornamenti & Rollback
Aggiorna all'ultimo tag fissato
docker compose pull docker compose up -d
Blocca per digest (immutabile)
# Pull and discover the digest of the current tag
docker pull spritsail/fivem:stable
docker inspect --format='{{index .RepoDigests 0}}' spritsail/fivem:stable
# Use the printed value in compose, e.g.:
# image: spritsail/fivem@sha256:abcdef...
Rollback
- Cambia il riferimento dell'immagine al tag/digest precedente e
docker compose up -d. - Mantieni i digest recenti delle immagini con
docker image ls --digests.
L'immagine fornisce stable E latest tag; preferisci stable per meno sorprese. (GitHub)
Monitoraggio & Manutenzione
- Stato:
docker ps,docker compose ps - Registri:
docker compose logs -f - Statistiche:
docker stats fivem - Healthcheck: Sondaggi
info.json; rimuovi/adatta se mancano strumenti. (Documenti Cfx.re) - Disco:
docker system df, elimina le vecchie immagini se necessario. - Backup: Pianifica il comando tar con Cron in “Configuration & Persistence”.
Risoluzione dei problemi
- Chiave di licenza non valida: Verifica nel portale Cfx.re e assicurati che solo un server stia usando la chiave. (supporto.cfx.re)
- Porte già in uso:
sudo ss -lntup | grep 30120; ferma il servizio in conflitto o cambiaFXSERVER_PORT. - Impossibile raggiungere txAdmin: Aprire 40120/TCP o cambia porta; conferma
NO_DEFAULT_CONFIG=1. (Documenti Cfx.re) - Il container esce all'avvio: Garantire
tty: trueEstdin_open: truesono impostati. (GitHub) - Problemi di ora/DNS: Assicurati che l'ora dell'host sia sincronizzata (systemd-timesyncd/chrony) e che il DNS funzioni (
/etc/resolv.conf). - Negazioni SELinux (non-Ubuntu): Utilizzo
:Z/:zsui bind mounts o regola i contesti. - info.json/players.json bloccati: Alcune convars o proxy possono influenzare questi endpoint; conferma che il server risponda su
GET /info.json. (Documenti Cfx.re)
Suggerimenti per le prestazioni
- CPU/Memoria: Blocca le CPU e imposta i limiti di memoria (vedi compose esteso).
- Magazzinaggio: Usa SSD/NVMe; mantieni i resource pack ottimizzati; evita asset enormi e non compressi.
- Networking: Mantieni la latenza bassa; assicurati che l'host non sia throttlato dalla CPU; dai priorità a UDP 30120.
- Kernel dell'host: I valori predefiniti ragionevoli funzionano; sysctl avanzati (
net.core.*mem_max) possono essere regolati se conosci il tuo carico di lavoro. - Registri: Usa la rotazione dei log (come nell'esempio esteso).
Note su macOS/Windows
- macOS (Docker Desktop): L'I/O dei file montati tramite bind è più lento rispetto al nativo Linux; considera le Condivisioni file sincronizzate per prestazioni migliori e assicurati che la cartella sia condivisa nelle impostazioni. (Documentazione Docker)
- Windows (WSL2): Le porte pubblicate sono raggiungibili tramite host locale su Windows; l'esposizione alla LAN può richiedere configurazioni aggiuntive a seconda della modalità. Preferisci l'hosting su Linux per server pubblici. (Documentazione Docker)
Disinstallazione pulita
# Stop and remove the container (keep data) docker compose down # Remove container + anonymous networks + images (keeps bind-mounted data) docker compose down --rmi local --remove-orphans # If you used named volumes (not in this guide), list and remove explicitly: # docker volume ls # docker volume rm <volume_name>
Per eliminare Tutto i dati, rimuovi le directory montate tramite bind:
sudo rm -rf /home/fivem/data /home/fivem/txData
Domande frequenti
Posso ospitare più server su un unico host?
Sì. Usa directory di progetto separate, diverse FXSERVER_PORT/TXADMIN_PORT, e mount bind distinti. txAdmin supporta dati per profilo in /txData. (Documenti Cfx.re)
Come cambio il nome/IP del server mostrato nell'elenco?
Modificare sv_hostname In data/server.cfg. L'IP/porta proviene dalle porte pubblicate e dalla configurazione NAT.
Posso riavviare automaticamente in caso di crash?
SÌ. restart: unless-stopped in Compose; considera anche i timer systemd per i watchdog.
Dove si trovano i backup?
Dove li crei, ad esempio fivem-backup_YYYY-MM-DD.tgz nella tua directory di lavoro. Vedi i comandi di backup sopra.
Come abilito txAdmin?
Impostato NO_DEFAULT_CONFIG=1, monta tramite bind /txDatae apri 40120/TCP. (GitHub)
Devo aprire la porta 30110?
Raramente. Era usata per elenchi legacy; le configurazioni moderne tipicamente necessitano solo della 30120 e della 40120 di txAdmin se usata. (Comunità Cfx.re)
Come sposto il server su un'altra macchina?
Copia data/ E txData/ al nuovo host, ricrea lo stesso file Compose e avvia.
Link & Crediti
- Immagine upstream:
spritsail/fivem(variabili d'ambiente, percorsi, utilizzo, note su txAdmin,-tirequisito). (GitHub) - Docker:
- Installa Docker Engine su Ubuntu. (Documentazione Docker)
- Installare Docker Compose v2 (plugin Linux). (Documentazione Docker)
- Condivisione di file locali con i container (volumi vs bind mounts). (Documentazione Docker)
- Cfx.re / FiveM:
- Creare una chiave di registrazione del server (licenza). (supporto.cfx.re)
- Documentazione di txAdmin (porta predefinita 40120; percorso dati). (Documenti Cfx.re)
- Flusso proxy/connessione (
/info.json). (Documenti Cfx.re)
Editorial review and source policy
The Docker guide distinguishes container restart policy from application recovery. Pin images, persist server data outside the writable container layer, protect secrets, and validate backup/restore on the exact compose definition.
