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)
Recensione editoriale e policy delle sorgenti
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.
