Comment exécuter un serveur FiveM avec Docker
Déployez un serveur FiveM fiable avec Docker Compose : installez, configurez server.cfg, ouvrez les ports, conservez les données et gérez les mises à jour.
TL;DR
- Installez Docker Engine + Docker Compose v2 sur Ubuntu.Documentation Docker)
- Créez un dossier de projet, ajoutez
.env(ensembleLICENCE_CLE,NOM_DU_SERVEUR, ports) et un minimumcompose.yaml. - Commencer par
docker compose up -d; regarder les journaux avecjournaux docker compose -f. - Modifier
données/serveur.cfg(nom d'hôte, points de terminaison, ressources) ; redémarrer le conteneur. - Ouvrir le pare-feu pour 30120/TCP+UDP et 40120/TCP (txAdmin). Le port par défaut de txAdmin est 40120. (Documentation Cfx.re)
- Toujours exécuter le conteneur avec entrée standard/tty activé pour éviter les crashs. (GitHub)
Prérequis
- Système d'exploitation: Linux Ubuntu 22.04+ (notes pour macOS/Windows ci-dessous).
- Matériel: 2+ processeurs virtuels, 4 à 8 Go de RAM (plus pour les ressources lourdes), Disque SSD recommandé.
- Docker: Installer Moteur Docker et Compose v2 à partir des documents officiels. (Documentation Docker)
- Clé de licence FiveM: Générer dans le portail Cfx.re (Keymaster). Garder secret.support.cfx.re)
- Pare-feu/NAT: Possibilité d'ouvrir/transférer les ports 30120 (TCP+UDP) et éventuellement 40120 (TCP). (Documentation Cfx.re)
- (Facultatif) Un domaine/sous-domaine pour txAdmin.
Aperçu de l'architecture
Un conteneur fonctionne Serveur FX en utilisant le voile à civadière/fivem image. Les données sont monté sur reliure persister serveur.cfg, ressources et journaux. Ports 30120/TCP+UDP sont exposés aux joueurs ; 40120/TCP expose txAdmin lorsqu'il est activé. A bilan de santé peut sonder http://127.0.0.1:30120/info.json. (GitHub)
+-------------------- Hôte Docker (Ubuntu) --------------------+ | /home/fivem/data --> /config (dans le conteneur) | | /home/fivem/txData --> /txData (données txAdmin) | | | | Exposé : 30120/tcp+udp [FXServer] | 40120/tcp [txAdmin] | | Vérification de l'état : GET 127.0.0.1:30120/info.json | +-------------------------------------------------------------+
Démarrage rapide (copier-coller)
1) Créer un dossier de projet
# Facultatif : utilisateur système et répertoires dédiés 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) Créer .env
cat > .env <<'EOF' # === REQUIS === LICENSE_KEY=REPLACE_WITH_YOUR_CFX_KEY # Commodité (utilisé par le mappage des ports ci-dessous) FXSERVER_PORT=30120 TXADMIN_PORT=40120 # Non lu directement par l'image ; à utiliser lors de la modification de server.cfg SERVER_NAME="My Docker FiveM" # Facultatif : si omis, la génération de configuration par défaut définit un mot de passe RCON aléatoire RCON_PASSWORD= EOF
3) Minimal compose.yaml (épingler une étiquette)
Configuration minimale de travail utilisant l'image en amont. Utilisations tty+stdin pour éviter un crash.GitHub)
# compose.yaml services: fivem: image: spritsail/fivem:stable container_name: fivem environment: - LICENSE_KEY=${LICENSE_KEY} # Options facultatives (voir tableau ci-dessous) : # - NO_DEFAULT_CONFIG=1 # requis si vous souhaitez utiliser txAdmin # - NO_LICENSE_KEY=1 # si vous mettez la clé dans server.cfg à la place # - NO_ONESYNC=1 # désactiver OneSync dans la configuration par défaut # - RCON_PASSWORD=${RCON_PASSWORD} volumes: - ./data:/config # server.cfg, resources, logs ports: - "${FXSERVER_PORT}:30120/tcp" - "${FXSERVER_PORT}:30120/udp" tty : true # empêche le plantage au démarrage (équivalent à -t) stdin_open : true # empêche le plantage au démarrage (équivalent à -i) redémarrage : sauf si arrêté
Démarrez-le :
docker compose up -d docker compose journaux -f
4) Variante étendue (txAdmin, healthcheck, limites)
# compose.extended.yaml services : fivem : image : spritsail/fivem : stable container_name : fivem environnement : - LICENSE_KEY=${LICENSE_KEY} - NO_DEFAULT_CONFIG=1 # activer txAdmin (pas de valeur par défaut +exec) # - NO_LICENSE_KEY=1 # si la clé est stockée dans server.cfg # - RCON_PASSWORD=${RCON_PASSWORD} volumes : - ./data:/config - ./txData:/txData # conserver les données txAdmin ports : - "${FXSERVER_PORT}:30120/tcp" - "${FXSERVER_PORT}:30120/udp" - "${TXADMIN_PORT}:40120/tcp" # txAdmin Web UI (par défaut 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 : 30 s timeout : 5 s retries : 5 start_period : 30 s # Boutons de ressources de base pour Compose autonome (pas Swarm 'deploy') cpus : 2 mem_limit : "6 g" ulimits : nofile : soft : 1 048 576 hard : 1 048 576 restart : unless-stopped
Si
wgetn'est pas disponible dans l'image, supprimez le contrôle d'intégrité ou remplacez-le par une sonde TCP. txAdmin persiste sous/txData, port 40120 est sa valeur par défaut. (GitHub)
Configuration et persistance
- Lors de la première exécution, les valeurs par défaut sont écrites sur le montage de liaison
./données(chemin du conteneur/config). Modifier./data/server.cfget redémarrez le conteneur. (GitHub)
Typique serveur.cfg morceaux:
# data/server.cfg # Points de terminaison réseau (laissez 0.0.0.0 pour écouter sur toutes les interfaces) endpoint_add_tcp "0.0.0.0:30120" endpoint_add_udp "0.0.0.0:30120" # Ensemble de noms de serveur sv_hostname "My Docker FiveM" # Clé de licence (à utiliser uniquement si vous n'utilisez PAS l'environnement LICENSE_KEY) # sv_licenseKey "REPLACE_WITH_YOUR_CFX_KEY" # Exemple : garantir une ressource de base # garantir le chat
Disposition du répertoire (hôte):
/home/fivem ├─ data/ -> /config (server.cfg, resources/, logs/) └─ txData/ -> /txData (profils txAdmin et DB)
Sauvegardes
- Sauvegarde de montage lié :
tar -C /home/fivem -czf fivem-backup_$(date +%F).tgz données txData
- Si vous passez à volumes nommés, sauvegarder comme :
docker run --rm -v fivem_data:/data -v "$PWD":/sauvegarde busybox \ sh -c 'tar -czf /backup/fivem_data_$(date +%F).tgz -C / data'
Variables d'environnement (à partir de voile à civadière/fivem)
| Nom | But | Exemple |
|---|---|---|
LICENCE_CLE | Requis Clé de licence du serveur FiveM pour démarrer FXServer | LICENSE_KEY=xxxxx |
RCON_MOT DE PASSE | Mot de passe RCON utilisé lors de la création des configurations par défaut ; 16 caractères aléatoires s'il n'est pas défini | RCON_PASSWORD=passe forte |
AUCUNE CONFIGURATION PAR DÉFAUT | Désactiver par défaut +exécutif afin que txAdmin puisse gérer le serveur | 1 |
NO_LICENSE_KEY | Ne lisez pas la clé depuis l'environnement ; conservez-la dans serveur.cfg | 1 |
NO_ONESYNC | Désactiver OneSync dans les configurations par défaut | 1 |
Ces variables d'environnement et chemins /config, /txData, plus le besoin de -ti sont définis par l'image en amont. (GitHub)
Secret manutention: Préférer
NO_LICENSE_KEY=1et mettreClé de licence svdansserveur.cfgavec les autorisations de fichier correctes si vous ne voulez pas que la clé soit dans l'environnement du conteneur. (GitHub)
Réseaux et sécurité
Ports requis
| But | Port | Proto |
|---|---|---|
| Connexions des joueurs / API | 30120 | TCP+UDP |
| Interface utilisateur Web txAdmin (facultative) | 40120 | TCP |
| Maître hérité (rarement nécessaire) | 30110 | Protocole UDP |
La valeur par défaut de FiveM est 30120 ; la valeur par défaut de txAdmin est 40120. (GitHub)
Exemples UFW (Ubuntu)
sudo ufw autorise 30120/tcp sudo ufw autorise 30120/udp sudo ufw autorise 40120/tcp # uniquement si vous activez txAdmin sudo ufw reload
nftables (exemple d'extrait de jeu de règles)
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
Le moindre privilège et les secrets
- Exécutez sur un hôte renforcé ; évitez de mapper des capacités supplémentaires ; n'exécutez pas Docker en tant que
racineutilisateur sur l'hôte. - Garder RCON activé uniquement si nécessaire ; protégez txAdmin avec des informations d'identification fortes et restreignez l'accès au niveau du pare-feu.
- Si vous utilisez des distributions basées sur SELinux (pas Ubuntu), ajoutez
:Z/:zpour lier les montages pour résoudre les problèmes de contexte.
Mises à jour et restaurations
Mise à jour vers la dernière balise épinglée
docker compose pull docker compose up -d
Épinglé par digest (immuable)
# Tirez et découvrez le condensé de la balise actuelle docker pull spritsail/fivem:stable docker inspect --format='{{index .RepoDigests 0}}' spritsail/fivem:stable # Utilisez la valeur imprimée dans compose, par exemple : # image : spritsail/fivem@sha256:abcdef...
Retour en arrière
- Modifiez la référence de l'image à la balise/au résumé précédent et
docker compose up -d. - Conservez les résumés d'images récents avec
image docker ls --digests.
L'image fournit écurie et dernier balises; préférer écurie pour moins de surprises.GitHub)
Surveillance et maintenance
- Statut:
docker ps,docker compose ps - Journaux:
journaux docker compose -f - Statistiques:
statistiques docker fivem - Bilan de santé: Sondages
info.json; retirer/ajuster si l'outillage est manquant. (Documentation Cfx.re) - Disque:
système docker df, élaguez les anciennes images si nécessaire. - Sauvegardes: Exécutez la commande tar dans « Configuration et persistance ».
Dépannage
- Clé de licence invalide:Vérifiez dans le portail Cfx.re et assurez-vous qu'un seul serveur utilise la clé.support.cfx.re)
- Ports déjà utilisés:
sudo ss -lntup | grep 30120; arrêter le service conflictuel ou modifierFXSERVER_PORT. - Impossible de joindre txAdmin: Ouvrir 40120/TCP ou changer de port ; confirmer
NO_DEFAULT_CONFIG=1. (Documentation Cfx.re) - Le conteneur sort au démarrage: Assurer
tty : vraietstdin_open : vraisont définis. (GitHub) - Problèmes de temps/DNS:Assurez-vous de la synchronisation de l'heure de l'hôte (systemd-timesyncd/chrony) et du fonctionnement du DNS (
/etc/resolv.conf). - Refus SELinux (hors Ubuntu): Utiliser
:Z/:zsur les montages liés ou les contextes d'ajustement. - info.json/players.json bloqué: Certaines variables ou proxys peuvent affecter ces points de terminaison ; confirmez que le serveur répond sur
OBTENIR /info.json. (Documentation Cfx.re)
Conseils de performance
- CPU/Mémoire: Épinglez les processeurs et définissez des limites de mémoire (voir composition étendue).
- Stockage:Utilisez SSD/NVMe ; conservez les packs de ressources optimisés ; évitez les ressources volumineuses et non compressées.
- Réseautage: Maintenez une faible latence ; assurez-vous que l'hôte n'est pas limité par le processeur ; donnez la priorité à UDP 30120.
- Noyau hôte: Les valeurs par défaut raisonnables fonctionnent ; sysctls avancés (
net.core.*mem_max) peut être réglé si vous connaissez votre charge de travail. - Journaux:Utilisez la rotation du journal (comme dans l'exemple étendu).
Notes sur macOS / Windows
- macOS (Docker Desktop): Les E/S de fichiers montées en liaison sont plus lentes que celles de Linux natif ; considérez Docker Desktop Partages de fichiers synchronisés pour de meilleures performances et garantir que le dossier est partagé dans les paramètres. (Documentation Docker)
- Windows (WSL2): Les ports publiés sont accessibles via hôte local Sous Windows ; l'exposition au réseau local peut nécessiter une configuration supplémentaire selon le mode. Privilégiez l'hébergement sous Linux pour les serveurs publics.Documentation Docker)
Désinstallation propre
# Arrêter et supprimer le conteneur (conserver les données) docker compose down # Supprimer le conteneur + les réseaux anonymes + les images (conserver les données montées en liaison) docker compose down --rmi local --remove-orphans # Si vous avez utilisé des volumes nommés (non inclus dans ce guide), répertoriez-les et supprimez-les explicitement : # docker volume ls # docker volume rm
Pour supprimer tous données, supprimez les répertoires montés en liaison :
sudo rm -rf /home/fivem/data /home/fivem/txData
FAQ
Puis-je héberger plusieurs serveurs sur un seul hôte ?
Oui. Utilisez des répertoires de projet distincts, différents FXSERVER_PORT/TXADMIN_PORTet des montages de liaison distincts. txAdmin prend en charge les données par profil dans /txData. (Documentation Cfx.re)
Comment puis-je modifier le nom/l'adresse IP du serveur affiché dans la liste ?
Modifier sv_nom_hôte dans données/serveur.cfg. L'IP/le port provient de vos ports publiés et de votre configuration NAT.
Puis-je redémarrer automatiquement en cas de crash ?
Oui. redémarrer : sauf si arrêté dans Compose ; pensez également aux temporisateurs systemd pour les chiens de garde.
Où sont situées les sauvegardes ?
Où vous les créez, par exemple, fivem-backup_AAAA-MM-JJ.tgz dans votre répertoire de travail. Voir les commandes de sauvegarde ci-dessus.
Comment activer txAdmin ?
Ensemble NO_DEFAULT_CONFIG=1, montage lié /txData, et ouvert 40120/TCP. (GitHub)
Ai-je besoin d'ouvrir le 30110 ?
Rarement. Il était utilisé pour les listes héritées ; les configurations modernes n'ont généralement besoin que de 30120 et du 40120 de txAdmin s'il est utilisé.Communauté Cfx.re)
Comment déplacer le serveur vers une autre machine ?
Copie données/ et txData/ vers le nouvel hôte, recréez le même fichier Compose et démarrez.
Liens et crédits
- Image en amont:
voile à civadière/fivem(variables d'environnement, chemins, utilisation, notes txAdmin,-tiexigence). (GitHub) - Docker:
- Installez Docker Engine sur Ubuntu.Documentation Docker)
- Installez Docker Compose v2 (plugin Linux). (Documentation Docker)
- Partage de fichiers locaux avec des conteneurs (volumes vs montages liés). (Documentation Docker)
- Cfx.re / FiveM:
- Créez une clé d'enregistrement (licence) de serveur.support.cfx.re)
- Documentation txAdmin (port par défaut 40120 ; chemin de données). (Documentation Cfx.re)
- Flux proxy/connexion (
/info.json). (Documentation Cfx.re)






