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.
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.
Ubuntu 24.04 LTS 8 GB 28015/UDP 28016/TCP 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.
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 ufwO SteamCMD ainda depende de bibliotecas 32 bits (i386) mesmo num
sistema 64 bits — esse é o motivo do dpkg --add-architecture i386.
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/rustDaqui pra frente, todos os comandos do servidor rodam com sudo -u rust
ou após sudo su - rust.
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 verboseA 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.
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.
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 \
+quitEsse 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).
Confirme que o binário existe e está executável:
ls -la /home/rust/server/RustDedicated
file /home/rust/server/RustDedicatedSaí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.
Crie o script de start em /home/rust/server/start.sh:
nano /home/rust/server/start.shConteú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 30Torne executável:
chmod +x /home/rust/server/start.shO 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.
Faça a primeira boot manual pra gerar o mapa e validar config:
cd /home/rust/server
./start.shVocê 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.
Saia do usuário rust e crie a unit como root:
exit # volta pra root
sudo nano /etc/systemd/system/rust.serviceConteú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.targetCrie 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.serviceAcompanhe o startup em tempo real:
sudo journalctl -u rust.service -fQuando 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.
Pare o servidor antes de instalar o oxide:
sudo systemctl stop rust.serviceBaixe 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.servicePlugins 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.
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.
Verifique status do serviço:
sudo systemctl status rust.serviceDeve mostrar active (running) e o PID do processo RustDedicated.
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.
Teste a conexão do cliente Rust: abra o jogo, console (F1), digite:
client.connect SEU_IP_PUBLICO:28015Em 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.