{"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":"como-executar-um-servidor-fivem-usando-docker","status":"publish","type":"post","link":"https:\/\/rpcrate.com\/pt\/how-to-run-a-fivem-server-using-docker\/","title":{"rendered":"Execute o FiveM no Docker com Dados Persistentes e txAdmin Privado"},"content":{"rendered":"<p>Uma implanta\u00e7\u00e3o Docker precisa de dados de servidor persistentes, exposi\u00e7\u00e3o de porta deliberada e um par imagem\/configura\u00e7\u00e3o recuper\u00e1vel. O exemplo abaixo usa a imagem spritsail mantida pela comunidade em um host Linux; seus caminhos e vari\u00e1veis de ambiente s\u00e3o espec\u00edficos para essa imagem, n\u00e3o op\u00e7\u00f5es universais do FXServer.<\/p>\n<p>A configura\u00e7\u00e3o e os exemplos de c\u00f3digo aqui s\u00e3o voltados ao FiveM para GTA V Legacy. O Enhanced tem regras diferentes de runtime e de compatibilidade; verifique <a href=\"https:\/\/docs.fivem.net\/docs\/developers\/legacy-vs-enhanced\/\">as altera\u00e7\u00f5es de Legacy para Enhanced do Cfx.re<\/a> antes de aplic\u00e1-las a um servidor Enhanced.<\/p>\n<h2 id=\"prepare-the-host\">Prepare o host<\/h2>\n<p>Instale o Docker Engine e o plugin Compose usando <a href=\"https:\/\/docs.docker.com\/engine\/install\/\">as instru\u00e7\u00f5es do Docker para seu host<\/a>. Use uma implanta\u00e7\u00e3o de teste isolada primeiro. Confirme se a arquitetura do host, as portas dispon\u00edveis e a vers\u00e3o da imagem se adequam ao seu servidor pretendido.<\/p>\n<p class=\"translation-block\">Crie um diret\u00f3rio privado de projeto com os subdiret\u00f3rios <code>data\/<\/code> e <code>txData\/<\/code>. A imagem usa <code>\/config<\/code> para os dados do servidor e <code>\/txData<\/code> para o txAdmin. Restrinja o acesso aos diret\u00f3rios do host e aos backups, pois eles conter\u00e3o credenciais.<\/p>\n<h2 id=\"create-compose-yaml\">Crie o compose.yaml<\/h2>\n<p>Salve isto como <code data-no-translation=\"\" translate=\"no\">compose.yaml<\/code> nesse diret\u00f3rio do projeto. Ele deixa a configura\u00e7\u00e3o da licen\u00e7a para a configura\u00e7\u00e3o protegida do txAdmin\/servidor e vincula a porta de administra\u00e7\u00e3o ao loopback do host.<\/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\">A tag <code>stable<\/code> da imagem \u00e9 mut\u00e1vel e segue a defini\u00e7\u00e3o do mantenedor da imagem de origem. Leia as informa\u00e7\u00f5es da vers\u00e3o e o c\u00f3digo-fonte antes de implantar; n\u00e3o trate a palavra \u201cstable\u201d como uma garantia comprovada por testes. Ap\u00f3s testar, substitua a refer\u00eancia da imagem pelo digest exato da imagem baixada que voc\u00ea registrou.<\/p>\n<h2 id=\"start-and-configure-txadmin\">Inicie e configure o txAdmin<\/h2>\n<p>No diret\u00f3rio do projeto no host Docker, execute:<\/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>Acesse o txAdmin localmente em <code data-no-translation=\"\" translate=\"no\">http:\/\/127.0.0.1:40120<\/code>. Na sua esta\u00e7\u00e3o de trabalho, crie um t\u00fanel SSH para o seu host real usando <code data-no-translation=\"\" translate=\"no\">ssh -L 40120:127.0.0.1:40120 user@your-server<\/code>, depois abra esse mesmo endere\u00e7o local no navegador. Use sua conta e o nome real do host SSH. N\u00e3o publique PINs de configura\u00e7\u00e3o nem sa\u00eddas de log com credenciais.<\/p>\n<p>Siga a configura\u00e7\u00e3o do txAdmin e escolha um local de dados do servidor dentro de <code data-no-translation=\"\" translate=\"no\">\/config<\/code>, ou outro diret\u00f3rio persistente montado explicitamente. Insira a licen\u00e7a v\u00e1lida do servidor de forma privada. Se a receita escolhida exigir um banco de dados, configure-o separadamente e mantenha a porta dele privada; este exemplo de Compose n\u00e3o inclui um.<\/p>\n<h2 id=\"verify-networking-and-persistence\">Verifique a rede e a persist\u00eancia<\/h2>\n<p>Permita o endpoint do jogador pretendido atrav\u00e9s da rede do host\/provedor para TCP e UDP. Verifique o acesso de fora do host. As portas publicadas pelo Docker interagem com as regras de firewall do Docker e podem ignorar as regras de entrada UFW comuns; consulte <a href=\"https:\/\/docs.docker.com\/engine\/network\/packet-filtering-firewalls\/\">a documenta\u00e7\u00e3o do firewall do Docker<\/a> em vez de colar um conjunto de regras de firewall de substitui\u00e7\u00e3o.<\/p>\n<p>Conclua um teste de conex\u00e3o, inspecione erros de recursos e crie uma altera\u00e7\u00e3o de configura\u00e7\u00e3o inofensiva. Recrie o cont\u00eainer com <code data-no-translation=\"\" translate=\"no\">docker compose up -d --force-recreate<\/code> e confirme que o perfil e a configura\u00e7\u00e3o persistem. Uma resposta HTTP de <code data-no-translation=\"\" translate=\"no\">info.json<\/code> \u00e9 apenas uma verifica\u00e7\u00e3o b\u00e1sica de disponibilidade, n\u00e3o uma prova de que a jogabilidade funciona corretamente.<\/p>\n<h2 id=\"back-up-a-consistent-set\">Fa\u00e7a backup de um conjunto consistente<\/h2>\n<p>Agende a manuten\u00e7\u00e3o e interrompa as grava\u00e7\u00f5es de jogabilidade. Fa\u00e7a backup dos diret\u00f3rios montados, da defini\u00e7\u00e3o do Compose, da configura\u00e7\u00e3o privada e de qualquer banco de dados externo como um conjunto de recupera\u00e7\u00e3o correspondente. Para dados apenas de arquivo enquanto o servi\u00e7o est\u00e1 parado, um arquivo privado do diret\u00f3rio do projeto pode ser criado com:<\/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>Verifique se a cria\u00e7\u00e3o do arquivo foi bem-sucedida antes de reiniciar como parte do seu manual de opera\u00e7\u00f5es. Inclua arquivos de configura\u00e7\u00e3o adicionais e o backup do banco de dados quando sua configura\u00e7\u00e3o os utilizar. Um arquivo de arquivos sozinho n\u00e3o pode restaurar um banco de dados externo. Teste a recupera\u00e7\u00e3o em diret\u00f3rios separados e um banco de dados separado.<\/p>\n<h2 id=\"update-and-recover\">Atualize e recupere<\/h2>\n<p>Registre o digest da imagem atualmente em execu\u00e7\u00e3o e fa\u00e7a o backup correspondente antes de puxar uma atualiza\u00e7\u00e3o. Teste a imagem candidata em uma c\u00f3pia, depois altere a refer\u00eancia da imagem de produ\u00e7\u00e3o durante a manuten\u00e7\u00e3o e repita as verifica\u00e7\u00f5es de conex\u00e3o\/persist\u00eancia.<\/p>\n<p>Reverter apenas a imagem pode n\u00e3o desfazer as migra\u00e7\u00f5es de dados realizadas pelos recursos. Recupere os arquivos\/dados correspondentes deliberadamente e contabilize as grava\u00e7\u00f5es desde o backup. <code data-no-translation=\"\" translate=\"no\">docker compose down<\/code> para e remove o servi\u00e7o, preservando esses diret\u00f3rios montados por bind; mantenha-os at\u00e9 n\u00e3o precisar mais deles para recupera\u00e7\u00e3o.<\/p>\n<h2 id=\"reference-documentation\">Documenta\u00e7\u00e3o de refer\u00eancia<\/h2>\n<p><a href=\"https:\/\/github.com\/spritsail\/fivem\">Fonte: spritsail\/fivem<\/a> \u00b7 <a href=\"https:\/\/docs.docker.com\/reference\/compose-file\/services\/\">Fonte: 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>Uma implanta\u00e7\u00e3o Docker precisa de dados de servidor persistentes, exposi\u00e7\u00e3o de porta deliberada e um par imagem\/configura\u00e7\u00e3o recuper\u00e1vel. O exemplo abaixo usa a imagem spritsail mantida pela comunidade em um host Linux; seus caminhos e vari\u00e1veis de ambiente s\u00e3o espec\u00edficos para essa imagem, n\u00e3o op\u00e7\u00f5es universais do FXServer.<\/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\/pt\/wp-json\/wp\/v2\/posts\/199189","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/rpcrate.com\/pt\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/rpcrate.com\/pt\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/rpcrate.com\/pt\/wp-json\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/rpcrate.com\/pt\/wp-json\/wp\/v2\/comments?post=199189"}],"version-history":[{"count":6,"href":"https:\/\/rpcrate.com\/pt\/wp-json\/wp\/v2\/posts\/199189\/revisions"}],"predecessor-version":[{"id":217335,"href":"https:\/\/rpcrate.com\/pt\/wp-json\/wp\/v2\/posts\/199189\/revisions\/217335"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/rpcrate.com\/pt\/wp-json\/wp\/v2\/media\/199191"}],"wp:attachment":[{"href":"https:\/\/rpcrate.com\/pt\/wp-json\/wp\/v2\/media?parent=199189"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/rpcrate.com\/pt\/wp-json\/wp\/v2\/categories?post=199189"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/rpcrate.com\/pt\/wp-json\/wp\/v2\/tags?post=199189"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}