SSD Nodes Learn Hosting plans →
Guias Matt ConnorPor Matt Connor

Como rodar um servidor FiveM em uma VPS

Instale o FXServer no Ubuntu, fixe uma build de artifacts, configure a chave Cfx.re e libere a porta 30120 em TCP e UDP sem expor o txAdmin.

O que um servidor FiveM numa VPS precisa

Um servidor FiveM numa VPS consiste num utilizador Linux sem privilégios, numa build de artifacts do Cfx.re, numa chave de licença e numa porta aberta em TCP e UDP. A instalação demora cerca de dez minutos. O resto deste guia aborda os fatores que determinam se o servidor será jogável: a velocidade de um único núcleo do CPU, a memória necessária para os seus resources e um painel de gestão que nunca deve ficar exposto num endereço público.

Há três pré-requisitos fixos. Os binários do servidor, chamados artifacts, vêm da listagem oficial de builds do Cfx.re. A chave de licença vem do portal do Cfx.re em portal.cfx.re, o serviço que os guias mais antigos chamam keymaster, e fica associada ao endereço da máquina que a utiliza. Cada jogador que se liga precisa da sua própria cópia legítima de GTA V (Grand Theft Auto V) na Steam, no Rockstar Games Launcher ou na Epic Games, além de uma conta Cfx.re gratuita. O cliente verifica a propriedade do jogo quando é iniciado. Por isso, um servidor baseado em qualquer outra coisa não funciona, e este guia não abrange conteúdo alternativo de qualquer tipo.

Alojar o servidor é uma tarefa diferente de jogar na máquina. Essa é a questão de saber se pode executar o próprio jogo numa VPS e tem uma resposta diferente.

Por que a velocidade de um único núcleo determina a resposta de um servidor FiveM

O FXServer, o binário do servidor FiveM, executa a lógica do jogo numa thread principal. Cada script de resource, cada processador de eventos e cada atualização de estado passa por esse loop único. Mais núcleos ajudam o kernel, a base de dados e a pilha de rede. Não dividem o loop do jogo. Por isso, uma máquina com 4 vCPU num núcleo lento apresenta falhas sob carga, enquanto uma máquina com 2 vCPU num núcleo rápido continua fluida.

Isto contraria o hábito comum de escolher VPS, em que a quantidade de núcleos é o principal indicador. Verifique a velocidade por núcleo antes de gastar dinheiro. Comece pelo modelo da CPU:

lscpu | grep -E 'Model name|MHz'

Depois, procure a pontuação publicada desse modelo em single thread. A classificação single thread do PassMark e a pontuação single-core do Geekbench são públicas. Ambas medem o trabalho executado por um núcleo, que é o valor relevante neste caso. Em seguida, meça a máquina que recebeu:

sudo apt update && sudo apt install -y sysbench
sysbench cpu --cpu-max-prime=20000 --threads=1 run

Leia a linha events per second. Execute o mesmo comando em dois fornecedores candidatos para os comparar de forma objetiva, porque a carga de trabalho é idêntica e está limitada a um núcleo. Uma execução reproduzível de benchmark de VPS mostra como manter esses valores comparáveis entre máquinas.

Depois, confirme que o núcleo é realmente seu:

vmstat 1 5

A última coluna, st, é o steal time: a percentagem de tempo durante a qual a sua CPU virtual estava pronta para executar, mas o hypervisor a obrigou a esperar. Um valor constante acima de 1 ou 2 significa que partilha um núcleo físico com vizinhos ocupados. O loop do jogo sente isso imediatamente sob a forma de rubber banding. Steal time causado por um vizinho ruidoso explica como ler essa coluna e o que fazer a seguir.

A memória aumenta conforme os resources executados, e não apenas conforme o número de slots. Os dados base do servidor fornecidos pela Cfx.re ocupam algumas centenas de megabytes. Um framework de roleplay com quarenta ou cinquenta resources e uma base de dados MariaDB na mesma máquina exige outra capacidade: 4 GB é um mínimo razoável, e 8 GB proporciona uma margem confortável para 32 a 64 slots. Estes são valores típicos publicados por configurações da comunidade. Use-os como ponto de partida e monitorize free -m sob carga real de jogadores.

Crie um utilizador e instale as dependências

Execute o servidor com um utilizador comum, nunca como root. Há duas razões para isso. Usar root é uma má prática em qualquer serviço exposto à Internet. Além disso, o artefacto Linux é executado dentro de um sistema de ficheiros raiz Alpine Linux incluído no pacote. Por isso, os ficheiros extraídos por root não podem ser executados por outros utilizadores. Esta é a causa mais comum de uma instalação nova não iniciar.

sudo adduser --disabled-password --gecos "" fivem
sudo apt update
sudo apt install -y git xz-utils curl tcpdump
sudo -iu fivem

Tudo o que se segue é executado como o utilizador fivem. xz-utils é necessário porque o download é um arquivo .tar.xz, e git é usado para clonar os dados base do servidor.

Baixe uma compilação fixada do artefato

A compilação para Linux está no canal build_proot_linux do servidor de artefatos Cfx.re. A listagem marca uma compilação como a mais recente recomendada, e essa indicação muda para uma nova compilação a cada algumas semanas. Em vez disso, fixe a pasta numerada. Ao reconstruir o servidor no próximo mês, você obterá o mesmo binário testado neste mês, e uma atualização passará a ser uma decisão deliberada.

mkdir -p ~/FXServer/server
cd ~/FXServer/server
curl -fLO https://runtime.fivem.net/artifacts/fivem/build_proot_linux/master/25770-8ddccd4e4dfd6a760ce18651656463f961cc4761/fx.tar.xz
tar xf fx.tar.xz
ls

A compilação 25770 tinha a indicação de recomendada quando consultei a listagem em agosto de 2026. Abra o mesmo diretório no navegador para ver o atual. Depois, cole esse nome de pasta, que consiste no número da compilação mais um hash de commit, no URL.

ls agora deve mostrar run.sh e um diretório alpine. Esse diretório é o ponto principal: o artefato para Linux inclui o seu próprio pequeno sistema de arquivos raiz Alpine e inicia o servidor dentro dele usando proot, uma ferramenta de espaço de usuário que emula chroot sem privilégios de root. Por isso, um único download funciona no Ubuntu, Debian e Rocky sem pacotes específicos da distribuição.

Agora clone os dados base do servidor, que contêm os recursos padrão iniciados pelo seu server.cfg:

git clone https://github.com/citizenfx/cfx-server-data.git ~/FXServer/server-data

Obter uma chave de licença e escrever server.cfg

Inicie sessão em portal.cfx.re com a sua conta Cfx.re e crie uma chave de servidor. O portal pede o endereço IP da máquina que a vai utilizar, e a chave fica associada a esse endereço. Mudar para um novo VPS significa editar a chave no portal, não criar uma segunda chave. A alteração aplica-se imediatamente, mas o FXServer só volta a validar a chave quando é reiniciado.

Escreva ~/FXServer/server-data/server.cfg:

endpoint_add_tcp "0.0.0.0:30120"
endpoint_add_udp "0.0.0.0:30120"

ensure mapmanager
ensure chat
ensure spawnmanager
ensure sessionmanager
ensure basic-gamemode
ensure hardcap

sv_hostname "My FiveM server"
sv_maxclients 48
set onesync on
sv_scriptHookAllowed false

sv_licenseKey ChangeMe

add_ace group.admin command allow
add_principal identifier.fivem:1 group.admin

sv_maxclients aceita um valor de 1 a 2048. Um valor igual ou superior a 32 requer que onesync esteja definido como on ou legacy, e um valor superior a 64 requer on. OneSync é o modo de consciência do estado do servidor e permite que um servidor ultrapasse o pequeno número base de slots do jogo. Definir 128 slots com o OneSync desativado não fornece 128 slots. O resultado é uma configuração que o servidor rejeita.

sv_licenseKey recebe a chave sem aspas e sem espaço no fim. O FXServer divide essa linha em espaços em branco. Por isso, um carácter extra interrompe a validação e impede o arranque do servidor.

rcon_password está ausente desse ficheiro de propósito. O RCON (consola remota) só é ativado quando a variável está definida. Nesse caso, fica à escuta na mesma porta UDP do jogo. Uma palavra-passe RCON numa porta pública é um canal de comandos remotos para o seu servidor. Deixe-a indefinida, a menos que tenha uma necessidade específica. Se a utilizar, defina uma palavra-passe longa e aleatória.

sv_scriptHookAllowed permanece false. A documentação oficial marca esta opção como não recomendada, porque permitir clientes Script Hook V expõe o servidor a abusos do lado do cliente.

add_principal identifier.fivem:1 concede direitos de administrador ao ID de conta Cfx.re 1. Substitua 1 pelo seu próprio ID numérico. Caso contrário, terá concedido acesso de administrador à conta de outra pessoa e não terá concedido acesso à sua.

Inicie-o manualmente uma vez:

cd ~/FXServer/server-data
bash ~/FXServer/server/run.sh +exec server.cfg

A partir de uma segunda sessão SSH, peça informações ao servidor:

curl -s http://127.0.0.1:30120/info.json | head -c 200

O JSON que identifica as variáveis e os recursos do servidor significa que o FXServer está associado à porta e a responder. Connection refused significa que nunca conseguiu associar a porta. Nesse caso, consulte a saída da consola em vez de tentar adivinhar.

Um servidor sem chave apresenta esta mensagem e para:

This server does not have a license key specified. Please set the sv_licenseKey console variable to a key from https://keymaster.fivem.net/.

A mensagem continua a indicar o endereço antigo do keymaster. Esse endereço conduz ao mesmo portal Cfx.re. Se a chave estiver definida e o servidor continuar a recusar o arranque, a causa habitual é o facto de o endereço IP registado na chave já não corresponder ao desta máquina.

Quais portas um servidor FiveM precisa de ter abertas?

A porta 30120, em TCP (protocolo de controlo de transmissão) e UDP (protocolo de datagramas do utilizador). O FiveM usa o mesmo número de porta para dois protocolos e precisa de ambos. Se abrir apenas TCP, o sintoma é confuso: http://your.ip:30120/info.json responde num navegador, por isso o servidor parece estar saudável, mas o cliente do jogo fica em Failed to get info from server e nunca entra, porque a própria consulta do cliente e o tráfego do jogo usam UDP.

sudo ufw allow OpenSSH
sudo ufw allow 30120/tcp
sudo ufw allow 30120/udp
sudo ufw enable
sudo ufw status verbose

Mantenha uma segunda sessão SSH aberta enquanto ativa qualquer firewall. Os princípios básicos do ufw para um VPS explica a política predefinida de negar tudo, que torna as regras acima suficientes por si só.

A maioria dos fornecedores também executa uma firewall de rede fora do guest, controlada a partir do painel e não da shell. Uma regra do ufw não prova nada sobre essa camada. Quando o TCP responde a partir do exterior, mas os jogadores continuam sem conseguir ligar-se, monitorize a rede enquanto alguém tenta ligar-se:

sudo tcpdump -ni any udp port 30120

A chegada de pacotes significa que a firewall externa está a funcionar e que a falha está dentro do servidor. O silêncio significa que algo à frente da máquina está a descartá-los. Nesse caso, verifique primeiro o painel do fornecedor.

Gerencie o servidor com txAdmin sem expô-lo

txAdmin é incluído no artifact que você já baixou. Inicie run.sh sem o argumento +exec e ele abrirá um painel web na porta TCP 40120. Em seguida, exibirá no console a URL do painel e um PIN de curta duração. Use esse PIN uma vez para vincular sua conta Cfx.re. Depois disso, faça login com a conta de administrador criada pelo painel.

O txAdmin não tem uma senha padrão. Portanto, o risco não é uma credencial que você esqueceu de alterar. O risco está no que o painel é: um console remoto. Ele reinicia o servidor, edita server.cfg, implanta dados do servidor e executa comandos como o usuário do servidor. Deixar 40120 acessível pela internet expõe uma página de login para todas essas funções em um endereço público. Os scanners encontram portas de painel abertas em poucas horas. Não abra 40120 no firewall. Acesse essa porta por um túnel SSH a partir da sua própria máquina:

ssh -N -L 40120:127.0.0.1:40120 fivem@YOUR_SERVER_IP

Depois, abra http://127.0.0.1:40120 no navegador. O tráfego do painel passa dentro da conexão SSH, e a porta permanece fechada para todos os outros acessos.

Há uma armadilha que vale conhecer antes de tentar corrigir isso de outra forma. O txAdmin lê TXHOST_INTERFACE (padrão 0.0.0.0) para decidir em qual interface fazer o bind. A documentação informa explicitamente que o mesmo valor é aplicado ao FXServer. Defina-o como 127.0.0.1 para ocultar o painel e você também fará o bind do servidor de jogo no loopback. Nesse caso, nenhum jogador conseguirá acessar o servidor. Feche a porta do painel com o firewall, não com essa variável. Para mover o painel para outra porta, defina TXHOST_TXA_PORT, que aceita qualquer valor exceto 30120. O convar mais antigo +set txAdminPort aparece em muitos guias. A documentação do próprio txAdmin o marca como obsoleto e informa que ele deixará de funcionar em uma versão futura.

Mantenha o servidor em execução depois de terminar a sessão

bash run.sh termina com a sua sessão SSH. O tmux é adequado enquanto testa: execute tmux new -s fivem, inicie o servidor, prima Ctrl-b e depois d para separar a sessão, e use tmux attach -t fivem para voltar. Uma sessão tmux não sobrevive a um reboot, por isso tudo o que for importante deve ficar numa unidade systemd.

Crie /etc/systemd/system/fivem.service:

[Unit]
Description=FiveM FXServer
After=network-online.target
Wants=network-online.target

[Service]
Type=simple
User=fivem
Environment=HOME=/home/fivem
WorkingDirectory=/home/fivem/FXServer/server-data
ExecStart=/bin/bash /home/fivem/FXServer/server/run.sh +exec server.cfg
Restart=on-failure
RestartSec=10

[Install]
WantedBy=multi-user.target
sudo systemctl daemon-reload
sudo systemctl enable --now fivem
systemctl status fivem
journalctl -u fivem -f

enable --now faz duas tarefas: inicia o serviço imediatamente e volta a iniciar o serviço depois de um reboot. Um servidor iniciado manualmente deixa de estar em execução depois da atualização seguinte do kernel. journalctl -u fivem -f é agora a sua consola, porque um serviço systemd não tem um terminal onde possa escrever. Se gerir o servidor através do txAdmin, remova +exec server.cfg de ExecStart e aponte WorkingDirectory para /home/fivem/FXServer/server, porque o txAdmin inicia o servidor de jogo por si e mantém a respetiva pasta de dados junto de run.sh.

O que deve ser incluído no backup e onde fica

Não vale a pena fazer backup dos artefatos, porque pode transferir novamente a build fixada em poucos minutos. Há quatro elementos que são exclusivamente seus.

  • ~/FXServer/server-data/resources: todos os recursos que instalou, comprou ou escreveu.
  • server.cfg, onde quer que esteja: toda a configuração do servidor, incluindo as suas contas de administração.
  • ~/FXServer/server/txData: a configuração, a lista de administradores e os logs do txAdmin. Com o artefato Linux, esta pasta é criada ao lado de run.sh.
  • A base de dados MariaDB ou MySQL, se o seu framework utilizar uma. Os personagens, o dinheiro, os veículos e os inventários ficam nessa base de dados e em nenhum outro local. Por isso, um backup dos recursos sem um dump da base de dados restaura um mundo vazio.
mkdir -p ~/backups
mysqldump -u fivem -p --single-transaction fivem_db > ~/backups/fivem-$(date +%F).sql

Um dump armazenado no mesmo disco que o servidor não é um backup, porque o disco é o componente que pode falhar. Transfira-o para fora do servidor segundo um agendamento. É para isso que servem os backups restic de um VPS.

Modos de falha e mensagens apresentadas

Permission denied no loader. O servidor termina imediatamente com uma linha semelhante a esta:

run.sh: line 8: /home/fivem/FXServer/server/alpine/opt/cfx-server/ld-musl-x86_64.so.1: Permission denied

Isto acontece porque o arquivo foi extraído com sudo. Assim, tudo dentro de alpine/ pertence a root e o utilizador fivem não pode executar o loader que está nesse diretório. Corrija o proprietário com sudo chown -R fivem:fivem /home/fivem/FXServer ou elimine o diretório e extraia o arquivo novamente como fivem.

tar recusa-se a abrir o download. tar (child): xz: Cannot exec: No such file or directory significa que o pacote xz-utils está em falta. Por isso, tar não consegue descomprimir um arquivo .tar.xz. Instale o pacote e extraia o arquivo novamente. Um download que termina demasiado depressa é normalmente uma página de erro HTML guardada como fx.tar.xz. tar comunica isso como um arquivo corrompido.

O servidor funciona, mas ninguém consegue entrar. Verifique primeiro as portas, pela seguinte ordem: a regra do ufw para TCP e UDP na porta 30120, a firewall de rede do próprio fornecedor e o IP registado na chave de licença. Executar curl contra info.json a partir de fora do servidor permite distinguir um problema de rede de um problema no servidor com um único comando.

O tempo de tick aumenta à medida que os jogadores entram. O painel de desempenho do txAdmin mostra o tempo de tick do servidor. Quando esse valor aumenta com o número de jogadores, enquanto a utilização total de CPU parece baixa, um recurso está a saturar a thread principal. Tenha em conta o cálculo: num servidor com 4 vCPU, um único núcleo totalmente utilizado aparece como aproximadamente 25 por cento da CPU total em top. O valor parece baixo, mas não está. Pare os recursos um de cada vez e monitorize o tempo de tick para identificar qual deles está a causar o problema.

Comparação com outros servidores de jogos

Um servidor FiveM jogável precisa de um núcleo rápido e de memória suficiente para a lista de resources que realmente executa. O número de slots depende desses dois fatores, e nenhuma quantidade de vCPUs corrige um núcleo lento. Escolher um VPS para servidores de jogos analisa esse compromisso para uma frota diversificada, e executar um servidor Minecraft num VPS tem a mesma estrutura subjacente: existe um loop principal de ticks, pelo que a velocidade por núcleo também determina o limite nesse caso.

FAQ

De quanta CPU e RAM um servidor FiveM precisa?

Um núcleo rápido é mais importante do que vários núcleos lentos, porque o FXServer executa a lógica do jogo num único thread principal. Compare a pontuação publicada em single thread do modelo de CPU e confirme no servidor com sysbench cpu --threads=1 run. Verifique também se vmstat mostra um steal time próximo de zero. Em termos de memória, os dados base do servidor Cfx.re usam algumas centenas de megabytes. Um framework de roleplay com quarenta ou cinquenta resources e uma base de dados local funciona confortavelmente com 8 GB, mas fica limitado abaixo de 4 GB. Estes são valores típicos da comunidade. Por isso, monitorize free -m nos períodos de maior utilização em vez de confiar neles.

Os jogadores precisam de ter GTA V para entrar no meu servidor FiveM?

Sim. Cada jogador que se liga precisa de uma cópia legítima e licenciada de GTA V na Steam, no Rockstar Games Launcher ou na Epic Games, além de uma conta Cfx.re gratuita. O cliente FiveM verifica a propriedade do jogo antes de estabelecer a ligação. Não existe uma forma suportada de contornar essa verificação. Executar um servidor que tente fazê-lo não é permitido pela Cfx.re.

Que portas um servidor FiveM precisa de ter abertas?

A porta 30120 precisa de estar aberta em TCP e UDP. Os endpoints HTTP, como info.json, e os downloads de resources usam TCP. O tráfego do jogo do cliente usa UDP. Abrir apenas TCP cria a situação confusa em que o servidor responde num browser, mas os jogadores veem Failed to get info from server. O txAdmin precisa da porta TCP 40120. Essa porta deve permanecer fechada para a Internet.

É seguro deixar o txAdmin acessível na porta 40120?

Não. O txAdmin é uma consola remota que reinicia o servidor, edita a configuração e executa comandos. Um painel exposto é, portanto, um plano de controlo exposto para todo o servidor de jogo. Não existe uma palavra-passe predefinida, mas uma página de início de sessão pública permite ataques às credenciais sem visibilidade para si. Mantenha a porta 40120 fechada na firewall. Aceda ao painel através de um túnel SSH com ssh -N -L 40120:127.0.0.1:40120 user@server e abra http://127.0.0.1:40120 no browser. Não faça o bind do txAdmin a 127.0.0.1 com TXHOST_INTERFACE, porque essa configuração também força o servidor de jogo a usar loopback e impede qualquer jogador de se ligar.

Devo fixar uma build de artifact ou usar sempre a mais recente recomendada?

Fixe a pasta da build numerada. O label recommended muda regularmente para uma build nova. Por isso, um script que obtenha a build recommended pode fornecer um binário diferente a cada rebuild. Um servidor que funcionava ontem pode falhar após um novo deploy por motivos não relacionados com as suas alterações. Registe o número da build e o commit hash que testou. Faça upgrades de forma deliberada. Mantenha a pasta anterior no disco para poder reverter, alterando apenas um caminho na sua unidade systemd.

#fivem#game-server#txadmin#single-thread#vps