{"id":199189,"date":"2025-09-25T07:42:11","date_gmt":"2025-09-25T05:42:11","guid":{"rendered":"https:\/\/fivemx.com\/?p=199189"},"modified":"2026-08-16T13:45:10","modified_gmt":"2026-08-16T11:45:10","slug":"comment-executer-un-serveur-fivem-a-laide-de-docker","status":"publish","type":"post","link":"https:\/\/rpcrate.com\/fr\/how-to-run-a-fivem-server-using-docker\/","title":{"rendered":"Ex\u00e9cuter FiveM dans Docker avec des donn\u00e9es persistantes et un txAdmin priv\u00e9"},"content":{"rendered":"<p>Un d\u00e9ploiement Docker n\u00e9cessite des donn\u00e9es de serveur persistantes, une exposition des ports d\u00e9lib\u00e9r\u00e9e et un couple image\/configuration r\u00e9cup\u00e9rable. L'exemple ci-dessous utilise l'image spritsail maintenue par la communaut\u00e9 sur un h\u00f4te Linux ; ses chemins et ses variables d'environnement sont sp\u00e9cifiques \u00e0 cette image et ne sont pas des options FXServer universelles.<\/p>\n<p>Les exemples de configuration et de code ici ciblent FiveM pour GTA V Legacy. Enhanced a des r\u00e8gles d'ex\u00e9cution et de compatibilit\u00e9 diff\u00e9rentes ; v\u00e9rifiez <a href=\"https:\/\/docs.fivem.net\/docs\/developers\/legacy-vs-enhanced\/\">les changements Legacy-to-Enhanced de Cfx.re<\/a> avant de les appliquer \u00e0 un serveur Enhanced.<\/p>\n<h2 id=\"prepare-the-host\">Pr\u00e9parer l'h\u00f4te<\/h2>\n<p>Installez Docker Engine et le plugin Compose en suivant <a href=\"https:\/\/docs.docker.com\/engine\/install\/\">les instructions de Docker pour votre h\u00f4te<\/a>. Utilisez d'abord un d\u00e9ploiement de test isol\u00e9. V\u00e9rifiez que l'architecture de l'h\u00f4te, les ports disponibles et la version de l'image conviennent au serveur que vous envisagez.<\/p>\n<p>Cr\u00e9ez un r\u00e9pertoire de projet priv\u00e9 avec <code data-no-translation=\"\" translate=\"no\">data\/<\/code> et <code data-no-translation=\"\" translate=\"no\">txData\/<\/code> comme sous-r\u00e9pertoires. L'image utilise <code data-no-translation=\"\" translate=\"no\">\/config<\/code> pour les donn\u00e9es du serveur et <code data-no-translation=\"\" translate=\"no\">\/txData<\/code> pour txAdmin. Restreignez l'acc\u00e8s aux r\u00e9pertoires de l'h\u00f4te et aux sauvegardes, car ils contiendront des identifiants.<\/p>\n<h2 id=\"create-compose-yaml\">Cr\u00e9er compose.yaml<\/h2>\n<p>Enregistrez ceci sous le nom <code data-no-translation=\"\" translate=\"no\">compose.yaml<\/code> dans ce r\u00e9pertoire de projet. Il laisse la configuration de la licence \u00e0 l'installation prot\u00e9g\u00e9e txAdmin\/serveur et lie le port d'administration au loopback de l'h\u00f4te.<\/p>\n<pre data-no-translation=\"\" translate=\"no\"><code data-no-translation=\"\" translate=\"no\">services:\n  fivem:\n    image: spritsail\/fivem:stable\n    environment:\n      NO_DEFAULT_CONFIG: \"1\"\n      NO_LICENSE_KEY: \"1\"\n    volumes:\n      - .\/data:\/config\n      - .\/txData:\/txData\n    ports:\n      - \"30120:30120\/tcp\"\n      - \"30120:30120\/udp\"\n      - \"127.0.0.1:40120:40120\/tcp\"\n    stdin_open: true\n    tty: true\n    restart: unless-stopped\n    logging:\n      driver: json-file\n      options:\n        max-size: \"10m\"\n        max-file: \"3\"<\/code><\/pre>\n<p class=\"translation-block\">Le tag <code>stable<\/code> de l\u2019image peut changer et suit la d\u00e9finition du mainteneur de l\u2019image en amont. Lisez les informations de version et le code source avant le d\u00e9ploiement ; ne consid\u00e9rez pas le mot \u00ab stable \u00bb comme une garantie issue de tests. Apr\u00e8s les tests, remplacez la r\u00e9f\u00e9rence de l\u2019image par le digest exact de l\u2019image t\u00e9l\u00e9charg\u00e9e que vous avez consign\u00e9.<\/p>\n<h2 id=\"start-and-configure-txadmin\">D\u00e9marrer et configurer txAdmin<\/h2>\n<p>Depuis le r\u00e9pertoire du projet sur l'h\u00f4te Docker, ex\u00e9cutez :<\/p>\n<pre data-no-translation=\"\" translate=\"no\"><code data-no-translation=\"\" translate=\"no\">docker compose config --quiet\ndocker compose pull\ndocker compose up -d\ndocker compose logs --tail=100 fivem<\/code><\/pre>\n<p>Acc\u00e9dez \u00e0 txAdmin en local \u00e0 l'adresse <code data-no-translation=\"\" translate=\"no\">http:\/\/127.0.0.1:40120<\/code>. Depuis votre poste de travail, cr\u00e9ez un tunnel SSH vers votre h\u00f4te r\u00e9el avec <code data-no-translation=\"\" translate=\"no\">ssh -L 40120:127.0.0.1:40120 user@your-server<\/code>, puis ouvrez cette m\u00eame adresse locale dans votre navigateur. Utilisez votre v\u00e9ritable compte\/nom d'h\u00f4te SSH. Ne publiez pas les codes PIN de configuration ni les sorties de journaux contenant des identifiants.<\/p>\n<p>Suivez la proc\u00e9dure de configuration de txAdmin et choisissez un emplacement server-data dans <code data-no-translation=\"\" translate=\"no\">\/config<\/code>, ou un autre r\u00e9pertoire persistant explicitement mont\u00e9. Saisissez la licence de serveur valide en priv\u00e9. Si la recette s\u00e9lectionn\u00e9e n\u00e9cessite une base de donn\u00e9es, provisionnez-la s\u00e9par\u00e9ment et gardez son port priv\u00e9 ; cet exemple Compose n'en inclut pas.<\/p>\n<h2 id=\"verify-networking-and-persistence\">V\u00e9rifier le r\u00e9seau et la persistance<\/h2>\n<p>Autorisez le point de terminaison joueur pr\u00e9vu sur le r\u00e9seau de l'h\u00f4te\/du fournisseur, en TCP et en UDP. V\u00e9rifiez l'acc\u00e8s depuis l'ext\u00e9rieur de l'h\u00f4te. Les ports publi\u00e9s par Docker interagissent avec les r\u00e8gles de pare-feu de Docker et peuvent contourner les r\u00e8gles d'entr\u00e9e UFW ordinaires ; consultez <a href=\"https:\/\/docs.docker.com\/engine\/network\/packet-filtering-firewalls\/\">la documentation de Docker sur le pare-feu<\/a> au lieu de coller un jeu de r\u00e8gles de pare-feu de remplacement.<\/p>\n<p>Effectuez une connexion de test, inspectez les erreurs de ressources et apportez une modification de configuration inoffensive. Recr\u00e9ez le conteneur avec <code data-no-translation=\"\" translate=\"no\">docker compose up -d --force-recreate<\/code> et v\u00e9rifiez que le profil\/la configuration persiste. Une r\u00e9ponse HTTP de <code data-no-translation=\"\" translate=\"no\">info.json<\/code> n'est qu'une v\u00e9rification de disponibilit\u00e9 de base, et non une preuve du bon fonctionnement du gameplay.<\/p>\n<h2 id=\"back-up-a-consistent-set\">Sauvegarder un ensemble coh\u00e9rent<\/h2>\n<p>Planifiez une maintenance et arr\u00eatez les \u00e9critures de gameplay. Sauvegardez les r\u00e9pertoires mont\u00e9s, la d\u00e9finition Compose, la configuration priv\u00e9e et toute base de donn\u00e9es externe comme un seul ensemble de restauration correspondant. Pour les donn\u00e9es de fichiers uniquement, pendant que le service est arr\u00eat\u00e9, une archive priv\u00e9e peut \u00eatre cr\u00e9\u00e9e depuis le r\u00e9pertoire du projet avec :<\/p>\n<pre data-no-translation=\"\" translate=\"no\"><code data-no-translation=\"\" translate=\"no\">umask 077\ndocker compose stop fivem\ntar -czf \"..\/fivem-files-$(date -u +%Y%m%dT%H%M%SZ).tgz\" compose.yaml data txData\ndocker compose start fivem<\/code><\/pre>\n<p>V\u00e9rifiez que la cr\u00e9ation de l'archive a r\u00e9ussi avant de red\u00e9marrer, dans le cadre de votre runbook. Incluez les fichiers de configuration suppl\u00e9mentaires et la sauvegarde de la base de donn\u00e9es lorsque votre installation les utilise. Une archive de fichiers seule ne peut pas restaurer une base de donn\u00e9es externe. Testez la restauration dans des r\u00e9pertoires distincts et une base de donn\u00e9es distincte.<\/p>\n<h2 id=\"update-and-recover\">Mettre \u00e0 jour et restaurer<\/h2>\n<p>Notez le digest de l'image actuellement en cours d'ex\u00e9cution et effectuez la sauvegarde correspondante avant de r\u00e9cup\u00e9rer une mise \u00e0 jour. Testez l'image candidate sur une copie, puis modifiez la r\u00e9f\u00e9rence de l'image de production pendant une fen\u00eatre de maintenance et r\u00e9p\u00e9tez les v\u00e9rifications de connexion\/persistance.<\/p>\n<p>Revenir en arri\u00e8re uniquement sur l'image peut ne pas annuler les migrations de donn\u00e9es effectu\u00e9es par les ressources. Restaurez d\u00e9lib\u00e9r\u00e9ment les fichiers\/donn\u00e9es correspondants et tenez compte des \u00e9critures survenues depuis la sauvegarde. <code data-no-translation=\"\" translate=\"no\">docker compose down<\/code> arr\u00eate\/supprime le service tout en conservant ces r\u00e9pertoires mont\u00e9s en bind ; conservez ces r\u00e9pertoires jusqu'\u00e0 ce que la restauration ne soit plus n\u00e9cessaire.<\/p>\n<h2 id=\"reference-documentation\">Documentation de r\u00e9f\u00e9rence<\/h2>\n<p><a href=\"https:\/\/github.com\/spritsail\/fivem\">Source : spritsail\/fivem<\/a> \u00b7 <a href=\"https:\/\/docs.docker.com\/reference\/compose-file\/services\/\">Source : docs.docker.com<\/a> \u00b7 <a href=\"https:\/\/docs.fivem.net\/docs\/resources\/txAdmin\/\">Cfx.re \u2014 txAdmin<\/a><\/p>","protected":false},"excerpt":{"rendered":"<p>Un d\u00e9ploiement Docker n\u00e9cessite des donn\u00e9es de serveur persistantes, une exposition des ports d\u00e9lib\u00e9r\u00e9e et un couple image\/configuration r\u00e9cup\u00e9rable. L'exemple ci-dessous utilise l'image spritsail maintenue par la communaut\u00e9 sur un h\u00f4te Linux ; ses chemins et ses variables d'environnement sont sp\u00e9cifiques \u00e0 cette image et ne sont pas des options FXServer universelles.<\/p>","protected":false},"author":1,"featured_media":199191,"comment_status":"closed","ping_status":"closed","sticky":false,"template":"","format":"standard","meta":{"footnotes":""},"categories":[1902,1899],"tags":[],"class_list":["post-199189","post","type-post","status-publish","format-standard","has-post-thumbnail","hentry","category-fivem-related","category-tutorials"],"_links":{"self":[{"href":"https:\/\/rpcrate.com\/fr\/wp-json\/wp\/v2\/posts\/199189","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/rpcrate.com\/fr\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/rpcrate.com\/fr\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/rpcrate.com\/fr\/wp-json\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/rpcrate.com\/fr\/wp-json\/wp\/v2\/comments?post=199189"}],"version-history":[{"count":6,"href":"https:\/\/rpcrate.com\/fr\/wp-json\/wp\/v2\/posts\/199189\/revisions"}],"predecessor-version":[{"id":217335,"href":"https:\/\/rpcrate.com\/fr\/wp-json\/wp\/v2\/posts\/199189\/revisions\/217335"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/rpcrate.com\/fr\/wp-json\/wp\/v2\/media\/199191"}],"wp:attachment":[{"href":"https:\/\/rpcrate.com\/fr\/wp-json\/wp\/v2\/media?parent=199189"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/rpcrate.com\/fr\/wp-json\/wp\/v2\/categories?post=199189"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/rpcrate.com\/fr\/wp-json\/wp\/v2\/tags?post=199189"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}