FiveM Docker-Setup – Kurzcheckliste
Ein nützliches Docker-Setup hält txAdmin-Daten persistent, gibt die richtigen Ports frei und macht Updates rückgängig.
- Verwende Docker Compose v2 und binde txData oder dein Serverdatenverzeichnis ein.
- Exponiere 30120 TCP/UDP für FiveM und 40120 nur dort, wo txAdmin-Zugriff beabsichtigt ist.
- Sichere server.cfg, Ressourcen, txData und Datenbankdaten, bevor du Artefakte oder Bilder änderst.
Verwandte Shop-Routen: Server-Pakete | FiveM-Skripte | Admin-Tools
Führe einen FiveM-Server (FXServer) in Docker mit dieser Copy-Paste-Anleitung aus: minimal compose.yaml mithilfe der Sprietsegel/fivem Bild, korrekte Port-Zuordnung für 30120 (TCP+UDP) und 40120 (txAdmin), dauerhafte Bind-Mounts für server.cfg, Ressourcen und txAdmin-Daten, Lizenzschlüssel-Handhabung und sichere Update- und Rollback-Schritte.
Kurz zusammengefasst
- Installiere Docker Engine + Docker Compose v2 auf Ubuntu. (Docker-Dokumentation)
- Erstelle einen Projektordner, füge hinzu
.env(SatzLizenzschlüssel,SERVERNAME, Ports) und eine minimalecompose.yaml. - Starte mit
Docker komponieren -d; Protokolle ansehen mitDocker Compose-Protokolle -f. - Bearbeiten
data/server.cfg(hostname, Endpunkte, Ressourcen); starte den Container neu. - Firewall für öffnen 30120/TCP+UDP Und 40120/TCP (txAdmin). Der Standardport von txAdmin ist 40120. (Cfx.re-Dokumente)
- Führe den Container immer mit stdin/tty aktiviert, um Abstürze zu vermeiden. (GitHub)
Voraussetzungen
- Betriebssystem: Linux Ubuntu 22.04+ (Hinweise für macOS/Windows unten).
- Hardware: 2+ vCPU, 4–8 GB RAM (mehr für schwere Ressourcen), SSD empfohlen.
- Docker: Installieren Docker-Engine Und Compose v2 aus offiziellen Dokumenten. (Docker-Dokumentation)
- FiveM-Lizenzschlüssel: Im Cfx.re-Portal (Keymaster) generieren. Geheim halten. (support.cfx.re)
- Firewall/NAT: Möglichkeit zum Öffnen/Weiterleiten der Ports 30120 (TCP+UDP) und optional 40120 (TCP). (Cfx.re-Dokumente)
- (Optional) Eine Domäne/Subdomäne für txAdmin.
Architekturübersicht
Ein Container läuft FXServer mithilfe der Sprietsegel/fivem Bild. Daten sind Bind-Mounted fortbestehen server.cfg, Ressourcen und Protokolle. Ports 30120/TCP+UDP sind den Spielern ausgesetzt; 40120/TCP macht txAdmin verfügbar, wenn aktiviert. Ein Gesundheitscheck kann sondieren http://127.0.0.1:30120/info.json. (GitHub)
+-------------------- Docker-Host (Ubuntu) --------------------+ | \/home\/fivem\/data --> \/config (im Container) | | \/home\/fivem\/txData --> \/txData (txAdmin-Daten) | | | | Freigegeben: 30120\/tcp+udp [FXServer] | 40120\/tcp [txAdmin] | | Gesundheitscheck: GET 127.0.0.1:30120\/info.json | +-------------------------------------------------------------+
Schnellstart (Kopieren und Einfügen)
1) Erstelle einen Projektordner
# Optional: dedizierter Systembenutzer und Verzeichnisse 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) Erstellen .env
cat > .env <<'EOF'\n# === REQUIRED ===\nLICENSE_KEY=REPLACE_WITH_YOUR_CFX_KEY\n\n# Convenience (used by ports mapping below)\nFXSERVER_PORT=30120\nTXADMIN_PORT=40120\n\n# Not read by the image directly; use it when editing server.cfg\nSERVER_NAME="My Docker FiveM"\n\n# Optional: if omitted, default config generation sets a random RCON password\nRCON_PASSWORD=\nEOF
3) Minimal compose.yaml (ein Tag anheften)
Kleinstes funktionierendes Setup unter Verwendung des Upstream-Images. Verwendet tty+stdin um einen Absturz zu verhindern. (GitHub)
# compose.yaml
services:
fivem:
image: spritsail/fivem:stable
container_name: fivem
environment:
- LICENSE_KEY=${LICENSE_KEY}
# Optionale Schalter (siehe Tabelle unten):
# - NO_DEFAULT_CONFIG=1 # erforderlich, wenn du txAdmin verwenden möchtest
# - NO_LICENSE_KEY=1 # wenn du den Schlüssel in server.cfg statt dessen einträgst
# - NO_ONESYNC=1 # deaktiviere OneSync in der Standardkonfiguration
# - RCON_PASSWORD=${RCON_PASSWORD}
volumes:
- ./data:/config # server.cfg, Ressourcen, Protokolle
ports:
- "${FXSERVER_PORT}:30120/tcp"
- "${FXSERVER_PORT}:30120/udp"
tty: true # verhindere Startabbruch (äquivalent zu -t)
stdin_open: true # verhindere Startabbruch (äquivalent zu -i)
restart: unless-stopped
Starte es:
Docker Compose Up -d Docker Compose Logs -f
4) Erweiterte Variante (txAdmin, Healthcheck, Limits)
# compose.extended.yaml
services:
fivem:
image: spritsail\/fivem:stable
container_name: fivem
environment:
- LICENSE_KEY=${LICENSE_KEY}
- NO_DEFAULT_CONFIG=1 # txAdmin aktivieren (kein Standard +exec)
# - NO_LICENSE_KEY=1 # wenn der Schlüssel in server.cfg gespeichert wird
# - RCON_PASSWORD=${RCON_PASSWORD}
volumes:
- .\/data:\/config
- .\/txData:\/txData # txAdmin-Daten speichern
ports:
- "${FXSERVER_PORT}:30120\/tcp"
- "${FXSERVER_PORT}:30120\/udp"
- "${TXADMIN_PORT}:40120\/tcp" # txAdmin Web UI (Standard 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
# Grundlegende Ressourceneinstellungen für eigenständiges Compose (nicht Swarm 'deploy')
cpus: 2
mem_limit: "6g"
ulimits:
nofile:
soft: 1048576
hard: 1048576
restart: unless-stopped
Wenn
wgetist im Bild nicht verfügbar, entferne die Gesundheitsprüfung oder ersetze sie durch eine TCP-Sonde. txAdmin besteht unter/txData, Hafen 40120 ist die Standardeinstellung. (GitHub)
Konfiguration und Persistenz
- Beim ersten Ausführen werden die Standardwerte in den Bind-Mount geschrieben
./Daten(Containerpfad/Konfiguration). Bearbeiten./data/server.cfgund starte den Container neu. (GitHub)
Typisch server.cfg Bits:
# data/server.cfg # Netzwerk-Endpunkte (lasse 0.0.0.0, um auf allen Schnittstellen zu hören) endpoint_add_tcp "0.0.0.0:30120" endpoint_add_udp "0.0.0.0:30120" # Servername set sv_hostname "Mein Docker FiveM" # Lizenzschlüssel (verwende dies nur, wenn LICENSE_KEY nicht verwendet wird) # sv_licenseKey "ERSETZE_DICH_DURCH_DEINEN_CFX_SCHLÜSSEL" # Beispiel: Stelle sicher, dass eine grundlegende Ressource vorhanden ist # ensure chat
Verzeichnislayout (Gastgeber):
\/home\/fivem ├─ data\/ -> \/config (server.cfg, resources\/, logs\/) └─ txData\/ -> \/txData (txAdmin-Profile und Datenbank)
Backups
- Bind-Mount-Backup:
tar -C /home/fivem -czf fivem-backup_$(Datum +%F).tgz Daten txData
- Wenn du zu wechselst benannte Datenträger, Sichere eine Kopie wie:
docker run --rm -v fivem_data:\/data -v "$PWD":\/backup busybox sh -c 'tar -czf \/backup\/fivem_data_$(date +%F).tgz -C \/ data'
Umgebungsvariablen (von Sprietsegel/fivem)
| Name | Zweck | Beispiel |
|---|---|---|
Lizenzschlüssel | Erforderlich FiveM-Server-Lizenzschlüssel zum Starten von FXServer | LICENSE_KEY=xxxxx |
RCON_PASSWORD | RCON-Passwort, das beim Erstellen von Standardkonfigurationen verwendet wird; zufällige 16-Zeichen, wenn nicht festgelegt | RCON_PASSWORD=starkesPasswort |
NO_DEFAULT_CONFIG | Standard deaktivieren +exec damit txAdmin den Server verwalten kann | 1 |
KEIN_LIZENZSCHLÜSSEL | Lies den Schlüssel nicht aus der Umgebung; behalte ihn in server.cfg | 1 |
NO_ONESYNC | Deaktiviere OneSync in den Standardkonfigurationen | 1 |
Diese Umgebungsvariablen und Pfade /Konfiguration, /txData, sowie die Notwendigkeit für -ti werden durch das Upstream-Bild definiert. (GitHub)
Geheimnis Handhabung: Bevorzugen
NO_LICENSE_KEY=1und setzensv_licenseKeyInserver.cfgmit den richtigen Dateiberechtigungen, wenn du den Schlüssel nicht in der Container-Umgebung haben willst. (GitHub)
Netzwerk und Sicherheit
Erforderliche Ports
| Zweck | Hafen | Proto |
|---|---|---|
| Spielerverbindungen / API | 30120 | TCP+UDP |
| txAdmin-Web-UI (optional) | 40120 | TCP |
| Legacy-Master (selten benötigt) | 30110 | UDP |
Der Standardwert von FiveM ist 30120; der Standardwert von txAdmin ist 40120. (GitHub)
UFW-Beispiele (Ubuntu)
sudo ufw allow 30120/tcp sudo ufw allow 30120/udp sudo ufw allow 40120/tcp # nur wenn du txAdmin aktivierst sudo ufw reload
nftables (Beispiel-Regelsatzauszug)
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
Geringste Privilegien und Geheimnisse
- Führe auf einem gehärteten Host aus; vermeide das Zuordnen zusätzlicher Fähigkeiten; führe Docker nicht als
WurzelBenutzer auf dem Host. - Halten RCON nur aktiviert, wenn nötig; schütze txAdmin mit starken Anmeldeinformationen und beschränke den Zugriff am Firewall.
- Wenn du SELinux-basierte Distributionen (nicht Ubuntu) verwendest, füge hinzu
:Z/:zum Mounts zu binden und Kontextprobleme zu beheben.
Updates und Rollbacks
Auf das neueste angeheftete Tag aktualisieren
Docker Compose Pull Docker Compose Up -d
Pin von Digest (unveränderlich)
# Pull und entdecke den Digest des aktuellen Tags
docker pull spritsail/fivem:stable
docker inspect --format='{{index .RepoDigests 0}}' spritsail/fivem:stable
# Verwende den gedruckten Wert in compose, z.B.:
# image: spritsail/fivem@sha256:abcdef...
Rollback
- Ändere den Bildverweis zurück auf den vorherigen Tag/Hash und
Docker komponieren -d. - Behalte aktuelle Bild-Digests mit
Docker-Image ls --digests.
Das Bild liefert stabil Und letzte Tags; bevorzugen stabil für weniger Überraschungen. (GitHub)
Überwachung und Wartung
- Status:
Docker PS,Docker Compose PS - Protokolle:
Docker Compose-Protokolle -f - Statistiken:
Docker-Statistiken fivem - Gesundheitscheck: Umfragen
info.json; entfernen/anpassen, wenn Werkzeuge fehlen. (Cfx.re-Dokumente) - Scheibe:
Docker-System df, lösche alte Bilder, falls nötig. - Backups: Plane den tar-Befehl in “Konfiguration & Persistenz” ein.
Fehlerbehebung
- Ungültiger Lizenzschlüssel: Überprüfe im Cfx.re-Portal und stelle sicher, dass nur ein Server den Schlüssel verwendet. (support.cfx.re)
- Bereits verwendete Ports:
sudo ss -lntup | grep 30120; den widersprüchlichen Dienst beenden oder ändernFXSERVER_PORT. - Kann txAdmin nicht erreichen: Offen 40120/TCP oder Port ändern; bestätigen
NO_DEFAULT_CONFIG=1. (Cfx.re-Dokumente) - Container wird beim Start beendet: Sicherstellen
tty: wahrUndstdin_open: wahrsind eingestellt. (GitHub) - Zeit-/DNS-Probleme: Stelle die Synchronisation der Host-Zeit sicher (systemd-timesyncd/chrony) und funktionierende DNS (
/etc/resolv.conf). - SELinux-Ablehnungen (nicht Ubuntu): Verwenden
:Z/:zbeim Binden von Mounts oder beim Anpassen von Kontexten. - info.json/players.json blockiert: Einige Konfigurationen oder Proxys können diese Endpunkte beeinflussen; bestätige, dass der Server auf
GET /info.json. (Cfx.re-Dokumente)
Leistungstipps
- CPU/Speicher: CPUs fixieren und Speicherlimits festlegen (siehe erweitertes Compose).
- Lagerung: Verwende SSD/NVMe; halte Ressourcenpakete optimiert; vermeide große, unkomprimierte Assets.
- Vernetzung: Halte die Latenz niedrig; stelle sicher, dass der Host nicht CPU-throttled ist; priorisiere UDP 30120.
- Host-Kernel: Angemessene Standardeinstellungen funktionieren; erweiterte Sysctls (
net.core.*mem_max) kann angepasst werden, wenn du deine Arbeitslast kennst. - Protokolle: Verwende Log-Rotation (wie im erweiterten Beispiel).
Hinweise zu macOS/Windows
- macOS (Docker Desktop): Bind-mounted File I/O ist langsamer als natives Linux; berücksichtige Docker Desktop’s Synchronisierte Dateifreigaben für bessere Leistung und stelle sicher, dass der Ordner in den Einstellungen geteilt ist. (Docker-Dokumentation)
- Windows (WSL2): Veröffentlichte Ports sind erreichbar über lokaler Host unter Windows; die Bereitstellung im LAN kann je nach Modus zusätzliche Konfiguration erfordern. Für öffentliche Server ist Linux-Hosting vorzuziehen. (Docker-Dokumentation)
Saubere Deinstallation
# Container anhalten und entfernen (Daten behalten) docker compose down # Container + anonyme Netzwerke + Images entfernen (bind-gemountete Daten bleiben erhalten) docker compose down --rmi local --remove-orphans # Falls benannte Volumes verwendet wurden (nicht in dieser Anleitung), auflisten und explizit entfernen: # docker volume ls # docker volume rm
Löschen alle Daten, entferne die bind-mounted Verzeichnisse:
sudo rm -rf /home/fivem/data /home/fivem/txData
Häufig gestellte Fragen
Kann ich mehrere Server auf einem Host hosten?
Ja. Verwende separate Projektverzeichnisse, unterschiedliche FXSERVER_PORT/TXADMIN_PORTund verschiedene Bind-Mounts. txAdmin unterstützt Daten pro Profil in /txData. (Cfx.re-Dokumente)
Wie ändere ich den in der Liste angezeigten Servernamen/die IP?
Bearbeiten sv_hostname In data/server.cfg. Die IP/der Port kommt von deinen veröffentlichten Ports und der NAT-Konfiguration.
Kann ich bei einem Absturz automatisch neu starten?
Ja. Neustart: sofern nicht gestoppt in Compose; berücksichtige auch systemd-Timer für Watchdogs.
Wo befinden sich die Backups?
Wo du sie erstellst—z. B., fivem-backup_JJJJ-MM-TT.tgz in deinem Arbeitsverzeichnis. Siehe die Backup-Befehle oben.
Wie aktiviere ich txAdmin?
Satz NO_DEFAULT_CONFIG=1, Bind-Mount /txDataund öffnen 40120/TCP. (GitHub)
Muss ich 30110 öffnen?
Selten. Es wurde für die Legacy-Auflistung verwendet; moderne Setups benötigen normalerweise nur 30120 und txAdmins 40120, falls verwendet. (Cfx.re Gemeinschaft)
Wie verschiebe ich den Server auf eine andere Maschine?
Kopie Daten/ Und txData/ auf den neuen Host, erstelle dieselbe Compose-Datei und starte sie.
Links & Credits
- Upstream-Bild:
Sprietsegel/fivem(Umgebungsvariablen, Pfade, Verwendung, txAdmin-Notizen,-tiErfordernis). (GitHub) - Docker:
- Installiere Docker Engine auf Ubuntu.Docker-Dokumentation)
- Installiere Docker Compose v2 (Linux-Plugin). (Docker-Dokumentation)
- Gemeinsame Nutzung lokaler Dateien mit Containern (Volumes vs. Bind-Mounts). (Docker-Dokumentation)
- Cfx.re / FiveM:
- Erstelle einen Server-Registrierungsschlüssel (Lizenz). (support.cfx.re)
- txAdmin-Dokumente (Standardport 40120; Datenpfad). (Cfx.re-Dokumente)
- Proxy-/Verbindungsfluss (
/info.json). (Cfx.re-Dokumente)