Jak uruchomić serwer FiveM za pomocą Dockera

Jak uruchomić serwer FiveM za pomocą Dockera

FiveM Szybka lista kontrolna konfiguracji Dockera

Przydatna konfiguracja Dockera zapewnia trwałość danych txAdmin, udostępnia odpowiednie porty i umożliwia odwracanie aktualizacji.

  • Użyj Docker Compose v2 i zamontuj przez bind-mount txData lub katalog danych swojego serwera.
  • Otwórz porty 30120 TCP/UDP dla FiveM oraz 40120 tylko tam, gdzie planowany jest dostęp do txAdmin.
  • Wykonaj kopię zapasową server.cfg, zasobów, txData oraz danych bazy danych przed zmianą artefaktów lub obrazów.

Powiązane ścieżki sklepowe: Paczki serwerowe | Skrypty FiveM | Admin Tools

Run a FiveM server (FXServer) in Docker with this copy-paste guide: a minimal compose.yaml przy użyciu 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

  • Zainstaluj Docker Engine + Docker Compose v2 na Ubuntu. (Dokumentacja Dockera)
  • Utwórz folder projektu, dodaj .env (ustaw LICENSE_KEY, SERVER_NAME, porty) i minimalny compose.yaml.
  • Zacznij od docker compose up -d; obserwuj logi za pomocą docker compose logs -f.
  • Edytuj data/server.cfg (hostname, endpointy, zasoby); uruchom ponownie kontener.
  • Otwórz zaporę dla 30120/TCP+UDP I 40120/TCP (txAdmin). Domyślny port txAdmin to 40120. (Dokumentacja Cfx.re)
  • Zawsze uruchamiaj kontener z stdin/tty włączone, aby uniknąć awarii. (GitHub)

Wymagania wstępne

  • OS: Linux Ubuntu 22.04+ (uwagi dla macOS/Windows poniżej).
  • Sprzęt: 2+ vCPU, 4–8 GB RAM (więcej dla dużych zasobów), SSD zalecane.
  • Docker: Zainstaluj Docker Engine I Compose v2 z oficjalnej dokumentacji. (Dokumentacja Dockera)
  • FiveM Klucz licencyjny: Wygeneruj w portalu Cfx.re (Keymaster). Zachowaj go w tajemnicy. (support.cfx.re)
  • Zapora sieciowa/NAT: Możliwość otwarcia/przekierowania portów 30120 (TCP+UDP) i opcjonalnie 40120 (TCP). (Dokumentacja Cfx.re)
  • (Opcjonalnie) Domena/subdomena dla txAdmin.

Omówienie architektury

Jeden kontener uruchamia Serwer FX przy użyciu spritsail/fivem image. Dane są bind-mounted do trwałego przechowywania server.cfg, zasobów i logów. Porty 30120/TCP+UDP są udostępniane graczom; 40120/TCP udostępnia txAdmin po włączeniu. A healthcheck może sondować 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 |
+-------------------------------------------------------------+

Szybki start (kopiuj-wklej)

1) Utwórz folder projektu

# 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) Utwórz .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) Minimalny compose.yaml (przypnij tag)

Najmniejsze działające ustawienie przy użyciu obrazu źródłowego. Używa tty+stdin aby zapobiec awarii. (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

Uruchom go:

docker compose up -d
docker compose logs -f

4) Rozszerzona wersja (txAdmin, healthcheck, limity)

# 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

Jeśli wget jest niedostępny w obrazie, usuń healthcheck lub zastąp go sondą TCP. txAdmin działa w /txData, port 40120 jest jego domyślnym. (GitHub)


Konfiguracja i trwałość danych

  • Przy pierwszym uruchomieniu domyślne ustawienia są zapisywane do zamontowanego katalogu ./data (ścieżka w kontenerze /config). Edytuj ./data/server.cfg i uruchom ponownie kontener. (GitHub)

Typowe server.cfg bity:

# 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

Struktura katalogów (host):

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

Kopie zapasowe

  • Kopia zapasowa przez bind-mount:
tar -C /home/fivem -czf fivem-backup_$(date +%F).tgz data txData
  • Jeśli przejdziesz na nazwane wolumeny, wykonaj kopię zapasową jak:
docker run --rm -v fivem_data:/data -v "$PWD":/backup busybox 
 sh -c 'tar -czf /backup/fivem_data_$(date +%F).tgz -C / data'

Zmienne środowiskowe (z spritsail/fivem)

NazwaCelPrzykład
LICENSE_KEYWymagane FiveM klucz licencyjny serwera do uruchomienia FXServerLICENSE_KEY=xxxxx
RCON_PASSWORDHasło RCON używane podczas tworzenia domyślnych konfiguracji; losowe 16 znaków jeśli nie ustawioneRCON_PASSWORD=strongpass
NO_DEFAULT_CONFIGWyłącz domyślny +exec aby txAdmin mógł zarządzać serwerem1
NO_LICENSE_KEYNie czytaj klucza z env; przechowuj go w server.cfg1
NO_ONESYNCWyłącz OneSync w domyślnych konfiguracjach1

Te zmienne env i ścieżki /config, /txData, plus potrzeba -ti są zdefiniowane przez obraz źródłowy. (GitHub)

Sekret obsługa: Preferuj NO_LICENSE_KEY=1 i umieść sv_licenseKey w server.cfg z odpowiednimi uprawnieniami do pliku, jeśli nie chcesz klucza w środowisku kontenera. (GitHub)


Sieć i bezpieczeństwo

Wymagane porty

CelPortProtokół
Połączenia graczy / API30120TCP+UDP
txAdmin Web UI (opcjonalnie)40120TCP
Legacy master (rzadko potrzebny)30110UDP

FiveM domyślnie ustawiony na 30120; domyślny port txAdmin to 40120. (GitHub)

Przykłady 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 (przykładowy fragment reguł)

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

Najmniejsze uprawnienia i tajemnice

  • Uruchamiaj na zabezpieczonym hoście; unikaj mapowania dodatkowych możliwości; nie uruchamiaj Dockera jako root użytkownik na hoście.
  • Trzymać RCON włączony tylko w razie potrzeby; zabezpiecz txAdmin silnymi poświadczeniami i ogranicz dostęp na zaporze sieciowej.
  • Jeśli używasz dystrybucji opartych na SELinux (nie Ubuntu), dodaj :Z/:z do montowania powiązań, aby naprawić problemy z kontekstem.

Aktualizacje i wycofywanie

Zaktualizuj do najnowszego przypiętego tagu

docker compose pull
docker compose up -d

Przypięte przez digest (niezmienne)

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

Cofnij

  • Zmień odniesienie do obrazu z powrotem na poprzedni tag/digest i docker compose up -d.
  • Zachowaj ostatnie skróty obrazów z docker image ls --digests.

Obraz zapewnia stable I latest tagi; preferuj stable dla mniejszej liczby niespodzianek. (GitHub)


Monitorowanie i konserwacja

  • Status: docker ps, docker compose ps
  • Logi: docker compose logs -f
  • Statystyki: docker stats fivem
  • Kontrola stanu: Ankiety info.json; usuń/dostosuj, jeśli brakuje narzędzi.Dokumentacja Cfx.re)
  • Dysk: docker system df, przycinaj stare obrazy w razie potrzeby.
  • Kopie zapasowe: Zaplanuj polecenie tar w “Konfiguracja i trwałość”.

Rozwiązywanie problemów

  • Nieprawidłowy klucz licencyjny: Zweryfikuj w portalu Cfx.re i upewnij się, że tylko jeden serwer używa klucza. (support.cfx.re)
  • Porty już w użyciu: sudo ss -lntup | grep 30120; zatrzymaj konfliktującą usługę lub zmień FXSERVER_PORT.
  • Nie można połączyć się z txAdmin: Otwórz 40120/TCP lub zmień port; potwierdź NO_DEFAULT_CONFIG=1. (Dokumentacja Cfx.re)
  • Kontener kończy działanie przy starcie: Upewnij się, że tty: true I stdin_open: true są ustawione. (GitHub)
  • Problemy z czasem/DNS: Upewnij się, że czas hosta jest zsynchronizowany (systemd-timesyncd/chrony) i działa DNS (/etc/resolv.conf).
  • Odmowy SELinux (nie-Ubuntu): Użyj :Z/:z na montowaniach wiążących lub dostosuj konteksty.
  • info.json/players.json zablokowane: Niektóre convary lub proxy mogą wpływać na te punkty końcowe; potwierdź, że serwer odpowiada na GET /info.json. (Dokumentacja Cfx.re)

Wskazówki dotyczące wydajności

  • CPU/Pamięć: Przypnij procesory i ustaw limity pamięci (patrz rozszerzony compose).
  • Pamięć masowa: Używaj SSD/NVMe; utrzymuj zoptymalizowane pakiety zasobów; unikaj ogromnych, nieskompresowanych zasobów.
  • Sieć: Utrzymuj niskie opóźnienia; upewnij się, że host nie jest ograniczony przez CPU; priorytetyzuj UDP 30120.
  • Host kernel: Domyślne ustawienia działają; zaawansowane sysctle (net.core.*mem_max) można dostroić, jeśli znasz swoje obciążenie.
  • Logi: Użyj rotacji logów (jak w rozszerzonym przykładzie).

macOS / Windows uwagi

  • macOS (Docker Desktop): Wejście/wyjście plików montowanych przez bind jest wolniejsze niż natywne Linux; rozważ Docker Desktop Zsynchronizowane udziały plików dla lepszej wydajności i upewnij się, że folder jest udostępniony w ustawieniach. (Dokumentacja Dockera)
  • Windows (WSL2): Opublikowane porty są dostępne przez localhost na Windows; wystawienie na sieć LAN może wymagać dodatkowej konfiguracji w zależności od trybu. Preferuj hostowanie na Linux dla serwerów publicznych. (Dokumentacja Dockera)

Czysta deinstalacja

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

Do usunięcia wszystko dane, usuń zamontowane katalogi:

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

Często zadawane pytania

Czy mogę hostować wiele serwerów na jednym hoście?
Tak. Użyj oddzielnych katalogów projektów, różnych FXSERVER_PORT/TXADMIN_PORT, a także odrębne montowania. txAdmin obsługuje dane na profil w /txData. (Dokumentacja Cfx.re)

Jak zmienić nazwę/IP serwera wyświetlaną na liście?
Edytuj sv_hostname w data/server.cfg. IP/port pochodzi z opublikowanych portów i konfiguracji NAT.

Czy mogę automatycznie restartować po awarii?
Tak. restart: unless-stopped w Compose; rozważ również timery systemd dla watchdogs.

Gdzie znajdują się kopie zapasowe?
Tam, gdzie je tworzysz — np., fivem-backup_YYYY-MM-DD.tgz w swoim katalogu roboczym. Zobacz powyższe polecenia tworzenia kopii zapasowej.

Jak włączyć txAdmin?
Ustaw NO_DEFAULT_CONFIG=1, bind-mount /txData, i otwórz 40120/TCP. (GitHub)

Czy muszę mieć otwarty port 30110?
Rzadko. Było używane do starszych list; nowoczesne konfiguracje zazwyczaj potrzebują tylko 30120 i txAdmin 40120, jeśli są używane. (Społeczność Cfx.re)

Jak przenieść serwer na inną maszynę?
Kopiuj data/ I txData/ na nowy host, odtwórz ten sam plik Compose i uruchom.


Linki i Podziękowania

  • Obraz nadrzędny: spritsail/fivem (zmienne środowiskowe, ścieżki, użycie, uwagi txAdmin, -ti wymaganie). (GitHub)
  • Docker:
  • Cfx.re / FiveM:

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.