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
Uruchom serwer FiveM (FXServer) w Dockerze dzięki temu przewodnikowi "kopiuj-wklej": minimalny compose.yaml przy użyciu spritsail/fivem obraz, poprawne mapowanie portów dla 30120 (TCP+UDP) i 40120 (txAdmin), trwałe montowania powiązań dla server.cfg, zasobów i danych txAdmin, obsługę kluczy licencyjnych oraz bezpieczne kroki aktualizacji i wycofywania zmian.
TL;DR
- Zainstaluj Docker Engine + Docker Compose v2 na Ubuntu. (Dokumentacja Dockera)
- Utwórz folder projektu, dodaj
.env(ustawLICENSE_KEY,SERVER_NAME, porty) i minimalnycompose.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
wgetjest 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.cfgi 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)
| Nazwa | Cel | Przykład |
|---|---|---|
LICENSE_KEY | Wymagane FiveM klucz licencyjny serwera do uruchomienia FXServer | LICENSE_KEY=xxxxx |
RCON_PASSWORD | Hasło RCON używane podczas tworzenia domyślnych konfiguracji; losowe 16 znaków jeśli nie ustawione | RCON_PASSWORD=strongpass |
NO_DEFAULT_CONFIG | Wyłącz domyślny +exec aby txAdmin mógł zarządzać serwerem | 1 |
NO_LICENSE_KEY | Nie czytaj klucza z env; przechowuj go w server.cfg | 1 |
NO_ONESYNC | Wyłącz OneSync w domyślnych konfiguracjach | 1 |
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=1i umieśćsv_licenseKeywserver.cfgz odpowiednimi uprawnieniami do pliku, jeśli nie chcesz klucza w środowisku kontenera. (GitHub)
Sieć i bezpieczeństwo
Wymagane porty
| Cel | Port | Protokół |
|---|---|---|
| Połączenia graczy / API | 30120 | TCP+UDP |
| txAdmin Web UI (opcjonalnie) | 40120 | TCP |
| Legacy master (rzadko potrzebny) | 30110 | UDP |
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
rootuż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/:zdo 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: trueIstdin_open: truesą 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/:zna 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,-tiwymaganie). (GitHub) - Docker:
- Zainstaluj Docker Engine na Ubuntu. (Dokumentacja Dockera)
- Zainstaluj Docker Compose v2 (wtyczka Linux). (Dokumentacja Dockera)
- Udostępnianie plików lokalnych za pomocą kontenerów (wolumeny vs. montowania wiążące). (Dokumentacja Dockera)
- Cfx.re / FiveM:
- Utwórz klucz rejestracyjny (licencyjny) serwera. (support.cfx.re)
- Dokumentacja txAdmin (domyślny port 40120; ścieżka danych). (Dokumentacja Cfx.re)
- Przepływ proxy/połączenia (
/info.json). (Dokumentacja Cfx.re)
Recenzja redakcyjna i polityka źródłowa
Przewodnik po Dockerze rozróżnia politykę restartu kontenera od odzyskiwania aplikacji. Przypnij obrazy, przechowuj dane serwera poza zapisywalną warstwą kontenera, chroń poufne dane i weryfikuj tworzenie kopii zapasowych/przywracanie na podstawie dokładnej definicji compose.
