Como criar servidor Rust em VPS Linux do zero (Ubuntu 24.04)

Aprenda a criar servidor Rust em VPS Linux passo a passo: instalação via SteamCMD, configuração de portas, oxide/uMod e systemd persistente.

Rust é um dos jogos de sobrevivência multiplayer mais exigentes em infraestrutura — mapa procedural enorme, milhares de entidades persistentes e física constante deixam o servidor com perfil de carga próximo ao de um banco de dados em pico. Subir um servidor dedicado próprio dá controle total sobre wipe schedule, plugins, taxa de gather e regras da comunidade, mas exige uma VPS Linux corretamente configurada.

Este tutorial mostra o caminho completo pra criar servidor Rust em VPS Linux a partir do zero: instalação do SteamCMD, download do RustDedicated, configuração de portas, integração opcional com oxide/uMod pra plugins, e persistência via systemd pra sobreviver a reboots. Persona-alvo: proprietário novo de servidor que quer subir uma instância vanilla ou moderada sem depender de painel proprietário.

Tempo estimado de execução: 60 a 90 minutos, sendo que ~15-20 minutos disso é a geração procedural do mapa na primeira boot — não é travamento, é trabalho real do RustDedicated criando o mundo. Você termina o tutorial com um servidor acessível na lista da comunidade e auto-restart configurado.

Pré-requisitos

Antes de começar, confirme que sua VPS atende os requisitos mínimos. Rust é exigente — subdimensionar resulta em rubber-banding, lag spikes e crashes durante wipes.

Pré-requisitos de hardware e acesso

VPS com Ubuntu 24.04 LTS (ou 22.04 LTS), 8 GB de RAM mínimo (16 GB recomendado pra 50+ slots), 4 vCPUs, 30 GB de SSD livres e IPv4 público dedicado. Acesso root via SSH e portas de saída 27015-27020 e 28015-28017 liberadas no firewall do provedor.

Sistema Ubuntu 24.04 LTS
RAM mínima 8 GB
Porta de jogo 28015/UDP
Porta RCON 28016/TCP
Porta query 28017/UDP

Conecte na VPS via SSH antes de continuar — todo o procedimento roda remotamente.

Preparação do sistema e usuário dedicado

Rodar serviço de jogo como root é antipattern de segurança. Vamos criar um usuário dedicado pro RustDedicated, com home próprio e sem permissões sudo. Caso o processo seja comprometido, o atacante não tem escalada fácil pra root.

01

Atualize o sistema e instale as dependências necessárias pro SteamCMD:

sudo apt update && sudo apt upgrade -y
sudo apt install -y software-properties-common
sudo add-apt-repository -y multiverse
sudo dpkg --add-architecture i386
sudo apt update
sudo apt install -y lib32gcc-s1 lib32stdc++6 libsdl2-2.0-0:i386 \
  curl wget tar unzip screen ufw

O SteamCMD ainda depende de bibliotecas 32 bits (i386) mesmo num sistema 64 bits — esse é o motivo do dpkg --add-architecture i386.

02

Crie o usuário rust dedicado, sem login direto via senha:

sudo adduser --disabled-password --gecos "" rust
sudo mkdir -p /home/rust/server
sudo chown -R rust:rust /home/rust

Daqui pra frente, todos os comandos do servidor rodam com sudo -u rust ou após sudo su - rust.

03

Configure o firewall liberando só o necessário:

sudo ufw allow OpenSSH
sudo ufw allow 28015/udp comment 'Rust game'
sudo ufw allow 28016/tcp comment 'Rust RCON'
sudo ufw allow 28017/udp comment 'Rust query'
sudo ufw --force enable
sudo ufw status verbose
RCON exposto na internet

A porta 28016 (RCON) aceita comandos administrativos. Em produção, restrinja por IP no UFW: sudo ufw allow from SEU_IP_ADMIN to any port 28016 proto tcp em vez de liberar pra mundo. RCON com senha fraca exposto é vetor comum de tomada de servidor.

Instalação do SteamCMD e RustDedicated

SteamCMD é o cliente de linha de comando da Steam usado pra baixar e atualizar servidores dedicados. O RustDedicated é distribuído via app ID 258550 e tem aproximadamente 8 GB de download inicial.

04

Mude pro usuário rust e baixe o SteamCMD:

sudo su - rust
mkdir -p ~/steamcmd && cd ~/steamcmd
curl -sqL "https://steamcdn-a.akamaihd.net/client/installer/steamcmd_linux.tar.gz" | tar zxvf -

O tar zxvf - descompacta direto do stdout do curl, evitando arquivo intermediário.

05

Baixe o RustDedicated via SteamCMD (download anônimo, sem login Steam):

cd ~/steamcmd
./steamcmd.sh +force_install_dir /home/rust/server \
  +login anonymous \
  +app_update 258550 validate \
  +quit

Esse comando ocupa 10-25 minutos dependendo da banda da VPS. O parâmetro validate faz checksum de todos os arquivos — use sempre em primeira instalação e em updates após wipe forçado pela Facepunch (primeira quinta de cada mês).

06

Confirme que o binário existe e está executável:

ls -la /home/rust/server/RustDedicated
file /home/rust/server/RustDedicated

Saída esperada: arquivo ELF 64-bit LSB executable, dinamicamente linkado. Se o ls não encontrar, o download falhou silenciosamente — re-rode o passo 05 e observe a saída completa do SteamCMD em busca de ERROR! Failed to install app '258550'.

Configuração inicial do servidor

Antes da primeira boot, configure os parâmetros que definem identidade, tamanho do mapa, slots e nome do servidor. Esses parâmetros vão num script de inicialização — facilita ajustes futuros sem alterar units do systemd.

07

Crie o script de start em /home/rust/server/start.sh:

nano /home/rust/server/start.sh

Conteúdo:

#!/bin/bash
cd /home/rust/server

exec ./RustDedicated -batchmode -nographics \
  +server.identity "hostini" \
  +server.port 28015 \
  +server.queryport 28017 \
  +rcon.port 28016 \
  +rcon.password "TROQUE_ESTA_SENHA_FORTE" \
  +rcon.web 1 \
  +server.maxplayers 50 \
  +server.hostname "Meu Servidor Rust" \
  +server.description "Servidor BR vanilla, wipe quinzenal" \
  +server.url "https://hostini.com.br" \
  +server.headerimage "https://i.imgur.com/SEU_BANNER.png" \
  +server.seed 1337 \
  +server.worldsize 3500 \
  +server.saveinterval 300 \
  +server.tickrate 30

Torne executável:

chmod +x /home/rust/server/start.sh
Escolha do seed e worldsize

O par (seed, worldsize) define o mapa procedural — mesmo par gera sempre o mesmo mapa. Mapas de 3000 sobem em 5 minutos e cabem confortavelmente em 50 slots; 4500 dobra o tempo de geração e exige 16+ GB de RAM. Evite worldsize acima de 4500 sem hardware dedicado.

08

Faça a primeira boot manual pra gerar o mapa e validar config:

cd /home/rust/server
./start.sh

Você verá logs de Unity, depois Generating procedural map. Em 5-15 minutos surge Server startup complete — o servidor está aceitando conexões. Pressione Ctrl+C pra parar e seguir pra persistência via systemd.

Persistência com systemd

Manter o servidor rodando dentro de screen ou tmux funciona mas não sobrevive a reboots. systemd é a solução padrão Linux: o servidor sobe no boot, reinicia em crash e fica monitorado por journalctl.

09

Saia do usuário rust e crie a unit como root:

exit  # volta pra root
sudo nano /etc/systemd/system/rust.service

Conteúdo:

[Unit]
Description=Rust Dedicated Server
After=network-online.target
Wants=network-online.target

[Service]
Type=simple
User=rust
Group=rust
WorkingDirectory=/home/rust/server
ExecStart=/home/rust/server/start.sh
Restart=on-failure
RestartSec=15
StandardOutput=append:/home/rust/server/logs/server.log
StandardError=append:/home/rust/server/logs/server.err
LimitNOFILE=65536

[Install]
WantedBy=multi-user.target

Crie o diretório de logs e ajuste permissões:

sudo -u rust mkdir -p /home/rust/server/logs
sudo systemctl daemon-reload
sudo systemctl enable --now rust.service
10

Acompanhe o startup em tempo real:

sudo journalctl -u rust.service -f

Quando ver Server startup complete, o servidor está pronto. Use Ctrl+C pra sair do follow do journal — isso não para o servidor.

Plugins opcionais com oxide/uMod

Pra servidor totalmente vanilla, pule esta seção. Pra moderação custom, economia, kits, anti-cheat ou outras funcionalidades comuns em servidores brasileiros, o oxide/uMod é o framework padrão.

11

Pare o servidor antes de instalar o oxide:

sudo systemctl stop rust.service

Baixe e instale o oxide.rust dentro do diretório do servidor:

sudo -u rust bash -c "cd /home/rust/server && \
  wget -q https://umod.org/games/rust/download/develop -O oxide.zip && \
  unzip -o oxide.zip && \
  rm oxide.zip"

Inicie o servidor novamente:

sudo systemctl start rust.service

Plugins ficam em /home/rust/server/oxide/plugins/. Após copiar um .cs pra esse diretório, o oxide compila e carrega automaticamente — sem reiniciar o servidor.

Wipe forçado pela Facepunch

Toda primeira quinta de cada mês a Facepunch força wipe via update do binário. Plugins compilados pra versão antiga falham até serem atualizados. Tenha um script de auto-update do oxide ou monitore o canal #news do discord oficial do uMod pra não deixar o servidor offline no dia do force wipe.

Verificação

Confirme que tudo está funcionando antes de divulgar o IP pros jogadores.

12

Verifique status do serviço:

sudo systemctl status rust.service

Deve mostrar active (running) e o PID do processo RustDedicated.

13

Confirme que o servidor está escutando nas portas certas:

sudo ss -tulpn | grep -E '28015|28016|28017'

Você deve ver 3 linhas — uma pra cada porta (UDP/TCP/UDP), todas associadas ao processo RustDedicated.

14

Teste a conexão do cliente Rust: abra o jogo, console (F1), digite:

client.connect SEU_IP_PUBLICO:28015

Em 5-10 segundos você cai na tela de carregamento de assets do servidor. Após login bem-sucedido, o servidor aparece automaticamente na lista da comunidade dentro de algumas horas.

Resolução de problemas

Servidor não aparece na lista pública

Causa típica: porta query (28017/UDP) bloqueada ou IP atrás de CGNAT. Teste de fora da VPS:

nmap -sU -p 28017 SEU_IP_PUBLICO

Se retornar open|filtered, ajuste firewall do provedor de hospedagem (não só UFW interno). Se retornar filtered, IP provavelmente é CGNAT — exigirá IP dedicado.

Mapa gera mas servidor crasha em 2-3 minutos

Quase sempre é OOM (out of memory). Verifique via dmesg | grep -i oom e o syslog. Solução imediata: reduzir worldsize pra 3000 e maxplayers pra 25. Solução real: upgrade pra VPS com mais RAM.

Update do RustDedicated quebra plugins do oxide

Rode o update do oxide antes de subir o servidor após force wipe:

sudo systemctl stop rust.service
sudo -u rust bash -c "cd /home/rust/server && \
  wget -q https://umod.org/games/rust/download/develop -O oxide.zip && \
  unzip -o oxide.zip && rm oxide.zip"
sudo systemctl start rust.service

Próximos passos

Com o servidor rodando, considere os próximos passos pra elevar a operação:

  • Configure backups automáticos do diretório server/hostini/ (mapa, save e blueprints) via cron + rsync pra storage externo.
  • Habilite RCON via web interface (já incluso na config) pra administração remota sem SSH.
  • Adicione plugins essenciais como AdminRadar, BetterChat e No Decay pra customizar a experiência sem deixar o servidor pesado demais.
  • Implemente schedule de wipe quinzenal automático via systemd timer.
  • Se você está colocando em produção pra comunidade real, uma VPS Hostini já vem com IPv4 dedicado, proteção DDoS ativa por padrão e SSD NVMe — três requisitos que definem se o seu servidor Rust fica online em dia de raid coordenado ou cai junto com a base.

Perguntas frequentes

Quanto de RAM uma VPS precisa pra rodar Rust dedicado?

O mínimo absoluto pra um mapa de 3000 com 10 slots é 8 GB de RAM. Pra mapas de 4500 com 50+ jogadores ativos, 16 GB é o piso confortável. Rust faz uso intensivo de memória conforme entidades, deployables e procedural generation crescem — monitorar via htop após algumas horas de gameplay é essencial.

Por que o RustDedicated consome tanta CPU mesmo vazio?

Procedural map generation roda na primeira boot e pode levar 5-15 minutos consumindo 1 vCPU inteira. Depois disso, o consumo idle fica entre 20-40% de uma vCPU moderna. Picos acontecem em wipe day e durante eventos como cargo ship, patrol heli e raidable bases.

Preciso de IP dedicado pra rodar Rust?

Sim. O Rust precisa de IPv4 público estático pra que o cliente conecte direto e pra aparecer corretamente no master server da Facepunch. CGNAT ou IP compartilhado não funciona — o servidor até sobe, mas jogadores não conseguem conectar via lista pública.

Posso usar Wine pra rodar a versão Windows do RustDedicated no Linux?

Tecnicamente sim, mas é desnecessário. A Facepunch mantém o binário Linux nativo (RustDedicated) totalmente suportado e estável — performance equivalente ou melhor que Windows na mesma máquina. Wine só adiciona overhead e pontos de falha.

Como faço wipe sem perder a base de jogadores?

Wipe é a deleção controlada dos arquivos .map e .sav em server/<identity>/. Pra preservar progressão de jogadores (XP, blueprints), mantenha o arquivo player.blueprints.X.db. Wipes parciais (só mapa, com BPs preservados) e wipes full (tudo) são as duas estratégias mais comuns, com cadência típica de 2 semanas.

O oxide/uMod afeta performance do servidor?

Sim, plugins consomem CPU e memória extras — a maioria leve, alguns pesados (anti-cheat custom, plugins de economia complexa). Comece com 5-10 plugins essenciais e monitore o tempo de tick do servidor via fps no console. Abaixo de 30 fps no servidor indica overload de plugins ou hardware insuficiente.

Tópicos:
Próximos passos VPS, dedicado ou painel gerenciado para FiveM, SAMP, MTA, Tibia e mais.Hospede seu servidor de jogos com a Hostini →
Esse tutorial foi útil?
Falar no WhatsApp