$ USD
  • $ USD
  • € EUR
  • Britse pond (£ GBP)
  • $ AUD
  • R$ BRL
  • CHF CHF
  • ¥ JPY
Hoe draai je een FiveM-server met Docker

Hoe draai je een FiveM-server met Docker

FiveM Docker-installatie snelle checklist

Een nuttige Docker-setup houdt txAdmin-gegevens persistent, stelt de juiste poorten bloot en maakt updates omkeerbaar.

  • Gebruik Docker Compose v2 en bind-mount txData of uw serverdatamap.
  • Stel 30120 TCP/UDP bloot voor FiveM en alleen 40120 waar txAdmin-toegang bedoeld is.
  • Maak een back-up van server.cfg, resources, txData en databasegegevens voordat u artifacts of afbeeldingen wijzigt.

Gerelateerde winkelpaden: Serverpakketten | FiveM scripts | Admin Tools

Run a FiveM server (FXServer) in Docker with this copy-paste guide: a minimal compose.yaml met behulp van de 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.

TL;DR

  • Installeer Docker Engine + Docker Compose v2 op Ubuntu. (Docker Documentatie)
  • Maak een projectmap aan, voeg .env (instellen LICENSE_KEY, SERVER_NAME, poorten) en een minimale compose.yaml.
  • Begin met docker compose up -d; bekijk logs met docker compose logs -f.
  • Bewerken data/server.cfg (hostnaam, eindpunten, bronnen); herstart de container.
  • Open firewall voor 30120/TCP+UDP En 40120/TCP (txAdmin). De standaardpoort van txAdmin is 40120. (Cfx.re Docs)
  • Voer de container altijd uit met stdin/tty ingeschakeld om crashes te voorkomen. (GitHub)

Voorwaarden

  • Besturingssysteem: Linux Ubuntu 22.04+ (opmerkingen voor macOS/Windows hieronder).
  • Hardware: 2+ vCPU, 4–8 GB RAM (meer voor zware bronnen), SSD aanbevolen.
  • Docker: Installeer Docker Engine En Compose v2 van officiële documentatie. (Docker Documentatie)
  • FiveM Licentiesleutel: Genereer in de Cfx.re-portal (Keymaster). Houd het geheim. (support.cfx.re)
  • Firewall/NAT: Mogelijkheid om poorten 30120 (TCP+UDP) en optioneel 40120 (TCP) te openen/forwarden. (Cfx.re Docs)
  • (Optioneel) Een domein/subdomein voor txAdmin.

Architectuuroverzicht

Eén container draait FXServer met behulp van de spritsail/fivem image. Data is bind-mounted persisteren server.cfg, bronnen, en logs. Poorten 30120/TCP+UDP worden blootgesteld aan spelers; 40120/TCP maakt txAdmin zichtbaar wanneer ingeschakeld. Een healthcheck kan scannen 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 |
+-------------------------------------------------------------+

Snel starten (kopieer-plak)

1) Maak een projectmap

# 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) Creëer .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) Minimaal compose.yaml (pin een tag)

Kleinste werkende opstelling met de upstream-image. Gebruikt tty+stdin om crash te voorkomen. (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

Start het:

docker compose up -d
docker compose logs -f

4) Uitgebreide variant (txAdmin, healthcheck, limits)

# 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

Als wget is niet beschikbaar in de image, verwijder de healthcheck of vervang met een TCP probe. txAdmin blijft bestaan onder /txData, poort 40120 is de standaard. (GitHub)


Configuratie & Persistentie

  • Bij de eerste keer worden standaardinstellingen naar de bind mount geschreven ./data (container pad /config). Bewerk ./data/server.cfg en herstart de container. (GitHub)

Typisch server.cfg bits:

# 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

Directory-indeling (host):

/home/fivem
├─ data/ -> /config (server.cfg, resources/, logs/)
└─ txData/ -> /txData (txAdmin profiles & DB)

Back-ups

  • Bind-mount back-up:
tar -C /home/fivem -czf fivem-backup_$(date +%F).tgz data txData
  • Als je overschakelt naar benoemde volumes, maak een back-up zoals:
docker run --rm -v fivem_data:/data -v "$PWD":/backup busybox 
 sh -c 'tar -czf /backup/fivem_data_$(date +%F).tgz -C / data'

Omgevingsvariabelen (van spritsail/fivem)

NaamDoelVoorbeeld
LICENSE_KEYVereist FiveM-serverlicentiesleutel om FXServer te startenLICENSE_KEY=xxxxx
RCON_PASSWORDRCON-wachtwoord gebruikt bij het maken van standaardconfiguraties; willekeurig 16 tekens indien niet ingesteldRCON_PASSWORD=strongpass
NO_DEFAULT_CONFIGStandaard uitschakelen +exec zodat txAdmin de server kan beheren1
NO_LICENSE_KEYLees de sleutel niet uit env; bewaar deze in server.cfg1
NO_ONESYNCSchakel OneSync uit in standaardconfiguraties1

Deze omgevingsvariabelen en paden /config, /txData, plus de behoefte aan -ti worden gedefinieerd door de upstream-image. (GitHub)

Secret in-game financiën beheert,: Geef de voorkeur aan NO_LICENSE_KEY=1 en plaats sv_licenseKey in server.cfg met juiste bestandsrechten als u de sleutel niet in de container env wilt. (GitHub)


Netwerken & Beveiliging

Vereiste poorten

DoelPortProto
Spelersverbindingen / API30120TCP+UDP
txAdmin Web UI (optioneel)40120TCP
Legacy master (zelden nodig)30110UDP

FiveM standaard is 30120; txAdmin’s standaard is 40120. (GitHub)

UFW voorbeelden (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 (voorbeeld regelset extract)

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

Minimale rechten & geheimen

  • Draai op een geharde host; vermijd het toewijzen van extra capabilities; draai Docker niet als root gebruiker op de host.
  • Houden RCON ingeschakeld alleen indien nodig; bescherm txAdmin met sterke inloggegevens en beperk toegang bij de firewall.
  • Als je een SELinux-gebaseerde distributie gebruikt (niet Ubuntu), voeg dan toe :Z/:z naar bind mounts om contextproblemen op te lossen.

Updates & Rollbacks

Bijwerken naar nieuwste vastgezette tag

docker compose pull
docker compose up -d

Pin op digest (onveranderlijk)

# 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

  • Wijzig de imagereferentie terug naar de vorige tag/digest en docker compose up -d.
  • Recente afbeeldingshashes bewaren met docker image ls --digests.

De image biedt stable En latest tags; geef de voorkeur aan stable voor minder verrassingen. (GitHub)


Monitoring & Onderhoud

  • Status: docker ps, docker compose ps
  • Logboeken: docker compose logs -f
  • Statistieken: docker stats fivem
  • Gezondheidscontrole: Peilingen info.json; verwijder/pas aan als tools ontbreken. (Cfx.re Docs)
  • Schijf: docker system df, verwijder indien nodig oude afbeeldingen.
  • Back-ups: Cron het tar-commando in “Configuratie & Persistentie”.

Probleemoplossing

  • Ongeldige licentiesleutel: Controleer in Cfx.re-portaal en zorg dat slechts één server de sleutel gebruikt. (support.cfx.re)
  • Poorten al in gebruik: sudo ss -lntup | grep 30120; stop conflicterende service of wijzig FXSERVER_PORT.
  • Kan txAdmin niet bereiken: Open 40120/TCP of wijzig poort; bevestig NO_DEFAULT_CONFIG=1. (Cfx.re Docs)
  • Container stopt bij start: Zorg ervoor dat tty: true En stdin_open: true zijn ingesteld. (GitHub)
  • Tijd/DNS-problemen: Zorg voor synchronisatie van de hosttijd (systemd-timesyncd/chrony) en werkende DNS (/etc/resolv.conf).
  • SELinux weigeringen (niet-Ubuntu): Gebruik :Z/:z op bind mounts of pas contexten aan.
  • info.json/players.json blocked: Sommige convars of proxies kunnen deze eindpunten beïnvloeden; controleer of de server reageert op GET /info.json. (Cfx.re Docs)

Prestatietips

  • CPU/Geheugen: CPU's vastpinnen en geheugenlimieten instellen (zie uitgebreide compose).
  • Opslag: Gebruik SSD/NVMe; houd resource packs geoptimaliseerd; vermijd grote, ongecomprimeerde assets.
  • Netwerken: Houd latentie laag; zorg ervoor dat de host niet CPU-begrensd is; geef prioriteit aan UDP 30120.
  • Hostkernel: Redelijke standaardinstellingen werken; geavanceerde sysctls (net.core.*mem_max) kunnen worden afgesteld als u uw workload kent.
  • Logboeken: Gebruik logrotatie (zoals in het uitgebreide voorbeeld).

macOS / Windows opmerkingen

  • macOS (Docker Desktop): Bind-gekoppelde bestands-I/O is langzamer dan native Linux; overweeg Docker Desktop's Gesynchroniseerde bestandsshares voor betere prestaties en zorg ervoor dat de map is gedeeld in de instellingen. (Docker Documentatie)
  • Windows (WSL2): Gepubliceerde poorten zijn bereikbaar via localhost op Windows; blootstelling aan LAN kan extra configuratie vereisen, afhankelijk van de modus. Geef de voorkeur aan hosting op Linux voor openbare servers. (Docker Documentatie)

Schoon verwijderen

# 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>

Om te verwijderen alles data, verwijder de bind-mounted directories:

sudo rm -rf /home/fivem/data /home/fivem/txData

FAQ

Kan ik meerdere servers hosten op één host?
Ja. Gebruik aparte projectmappen, verschillende FXSERVER_PORT/TXADMIN_PORT, en aparte bind mounts. txAdmin ondersteunt per-profiel data in /txData. (Cfx.re Docs)

Hoe verander ik de servernaam/IP die in de lijst wordt weergegeven?
Bewerken sv_hostname in data/server.cfg. Het IP/de poort komt van uw gepubliceerde poorten en NAT-configuratie.

Kan ik automatisch herstarten bij een crash?
Ja. restart: unless-stopped in Compose; overweeg ook systemd timers voor watchdogs.

Waar zijn back-ups opgeslagen?
Waar je ze aanmaakt - bijv., fivem-backup_YYYY-MM-DD.tgz in uw werkmap. Zie de back-upopdrachten hierboven.

Hoe schakel ik txAdmin in?
Instellen NO_DEFAULT_CONFIG=1, bind-mount /txData, en open 40120/TCP. (GitHub)

Moet ik 30110 openen?
Zelden. Het werd gebruikt voor legacy listing; moderne opstellingen hebben doorgaans alleen 30120 en txAdmin's 40120 nodig als deze worden gebruikt. (Cfx.re Community)

Hoe verplaats ik de server naar een andere machine?
Kopiëren data/ En txData/ naar de nieuwe host, maak hetzelfde Compose-bestand opnieuw en start.


Links & Credits

  • Upstream image: spritsail/fivem (omgevingsvariabelen, paden, gebruik, txAdmin opmerkingen, -ti vereiste). (GitHub)
  • Docker:
  • Cfx.re / FiveM:
    • Maak een serverregistratiesleutel (licentie) aan. (support.cfx.re)
    • txAdmin documentatie (standaardpoort 40120; gegevenspad). (Cfx.re Docs)
    • Proxy/verbindingsstroom (/info.json). (Cfx.re Docs)

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.