Como criar servidor Minecraft Java em VPS Linux Ubuntu do zero
Passo a passo pra criar servidor Minecraft Java Edition em VPS Linux Ubuntu 24.04, com Paper, systemd, firewall, backup e plugins prontos pra produção.
Subir um servidor Minecraft Java Edition em VPS Linux dá controle total que servidores compartilhados não oferecem — porta dedicada, RAM garantida, root pra instalar plugins e mods customizados, e backups quando você quiser. Mas o caminho do zero envolve detalhes que erram muitos owners de primeira viagem: rodar como root, deixar a JVM default, esquecer firewall, ou fechar o SSH e ver o servidor morrer.
Este tutorial cobre o setup completo pra produção real numa VPS Ubuntu 24.04 LTS: instalação do Java 21 (requisito do Minecraft 1.20.5+), download do Paper (o servidor que praticamente todo servidor Java sério roda hoje), criação de usuário dedicado, configuração do systemd pra o serviço subir sozinho, firewall UFW, e script de backup automático. O tempo estimado é 25-35 minutos pra alguém familiar com terminal Linux.
A persona alvo é quem nunca rodou servidor Minecraft em Linux mas tem experiência básica de SSH. Não vamos cobrir Bedrock Edition (Geyser é outro tutorial), nem mods Forge (idem) — foco em Java Edition vanilla ou com plugins Bukkit/Paper.
Pré-requisitos
VPS rodando Ubuntu 24.04 LTS (22.04 também serve), acesso root via SSH, no mínimo 2 GB de RAM dedicados ao servidor, 20 GB de disco livre, e conhecimento básico de comandos Linux. Se a VPS é nova, faça antes o hardening mínimo: troque a senha do root, crie usuário com sudo, e desative login root por senha no SSH.
Ubuntu 24.04 LTS 2 GB 21 (Temurin) 25565 A versão do Java importa: Minecraft 1.20.5 e superiores exigem Java 21. Versões antigas (1.17 a 1.20.4) rodam em Java 17. Servidores 1.16 e abaixo aceitam Java 8 ou 11. Este tutorial assume 1.21.x — a versão atual estável — então Java 21 é o caminho.
Preparando o sistema base
Antes de baixar o Paper, atualize o sistema e instale dependências. Rodar como root direto é desnecessário e perigoso — o serviço vai rodar com usuário dedicado depois.
Conecte na VPS via SSH e atualize os pacotes:
sudo apt update && sudo apt upgrade -yEsse comando lê os repositórios e aplica todas as atualizações de segurança pendentes. Se for a primeira vez na VPS, o upgrade pode demorar 2-5 minutos.
Instale dependências básicas: utilitários de download, screen pra sessões persistentes (fallback caso systemd não rode bem), e o repositório do Adoptium (Eclipse Temurin) pra Java 21:
sudo apt install -y wget curl screen ca-certificates apt-transport-https gnupgAdicione o repositório Adoptium e instale Java 21:
wget -qO- https://packages.adoptium.net/artifactory/api/gpg/key/public | \
sudo gpg --dearmor -o /etc/apt/keyrings/adoptium.gpg
echo "deb [signed-by=/etc/apt/keyrings/adoptium.gpg] \
https://packages.adoptium.net/artifactory/deb $(lsb_release -cs) main" | \
sudo tee /etc/apt/sources.list.d/adoptium.list
sudo apt update
sudo apt install -y temurin-21-jreConfirme com java -version — deve aparecer “Temurin-21”.
O Temurin (antigo AdoptOpenJDK) é a distribuição oficial do projeto Eclipse Adoptium, mantida pela mesma equipe que cuida do OpenJDK original. Performance idêntica, mas com releases mais previsíveis e suporte LTS estendido. Servidores Minecraft de produção rodam Temurin ou Azul Zulu — raramente o openjdk-21-jre do Ubuntu, que pode demorar pra receber patches críticos.
Criando usuário dedicado e estrutura de diretórios
Rodar Minecraft como root é um anti-padrão clássico. Se um plugin malicioso é instalado, ele tem acesso root ao sistema inteiro. Usuário dedicado isola o processo.
Crie usuário sem login interativo e diretório base:
sudo useradd -r -m -U -d /opt/minecraft -s /bin/bash minecraft
sudo mkdir -p /opt/minecraft/server
sudo chown -R minecraft:minecraft /opt/minecraftA flag -r cria usuário de sistema (sem UID humano), -m cria o home
diretório, -U cria um grupo com o mesmo nome.
Mude pra o usuário minecraft e entre no diretório do servidor:
sudo -u minecraft -i
cd /opt/minecraft/serverTodos os comandos a partir daqui rodam como minecraft até reiniciar
sessão. Pra sair, exit.
Baixando e configurando o Paper
Paper é distribuído via API oficial — sempre pegue o build mais recente da versão alvo.
Baixe o Paper 1.21.x (substitua VERSION e BUILD pelos valores atuais da PaperMC downloads):
PAPER_VERSION="1.21.4"
PAPER_BUILD="latest"
wget -O paper.jar \
"https://api.papermc.io/v2/projects/paper/versions/${PAPER_VERSION}/builds/${PAPER_BUILD}/downloads/paper-${PAPER_VERSION}-${PAPER_BUILD}.jar"Se o build “latest” não funcionar, consulte a API manualmente em
https://api.papermc.io/v2/projects/paper/versions/1.21.4 pra pegar
o número do build mais recente.
Aceite o EULA. Sem isso, o servidor recusa a iniciar:
echo "eula=true" > eula.txtFaça a primeira execução pra gerar arquivos de configuração:
java -Xms1G -Xmx2G -jar paper.jar noguiEle vai gerar server.properties, criar a pasta world/, e parar
no prompt do servidor. Digite stop e pressione Enter pra encerrar.
-Xmx2G aloca 2 GB de heap pra JVM. Se sua VPS tem 4 GB de RAM total,
use -Xmx3G deixando 1 GB pro sistema. Nunca aloque 100% da RAM — o
sistema operacional e a própria JVM (metaspace, threads, GC) precisam
de overhead. Se a VPS tem 2 GB, use -Xmx1500M no máximo.
Configurando systemd pra rodar 24/7
Sem systemd, fechar o SSH derruba o servidor. Com systemd, o serviço sobe sozinho no boot, reinicia em caso de crash, e logs vão pro journalctl.
Saia do usuário minecraft (exit) e crie o unit file como root:
sudo nano /etc/systemd/system/minecraft.serviceCole o conteúdo abaixo:
[Unit]
Description=Minecraft Java Server (Paper)
After=network.target
[Service]
Type=simple
User=minecraft
Group=minecraft
WorkingDirectory=/opt/minecraft/server
ExecStart=/usr/bin/java -Xms1G -Xmx2G -XX:+UseG1GC -XX:+ParallelRefProcEnabled -jar paper.jar nogui
Restart=on-failure
RestartSec=15s
SuccessExitStatus=0 143
[Install]
WantedBy=multi-user.targetRecarregue systemd, habilite o serviço, e inicie:
sudo systemctl daemon-reload
sudo systemctl enable minecraft
sudo systemctl start minecraftConfirme que está rodando:
sudo systemctl status minecraft
sudo journalctl -u minecraft -fO segundo comando mostra logs em tempo real — Ctrl+C pra sair. Procure pela linha “Done (X.XXXs)! For help, type help” — é o sinal de servidor operacional.
Liberando a porta no firewall
UFW vem instalado no Ubuntu mas geralmente desativado. Ative com cuidado pra não se trancar fora.
Libere SSH antes de qualquer coisa, depois a porta do Minecraft:
sudo ufw allow 22/tcp
sudo ufw allow 25565/tcp
sudo ufw enableConfirme com sudo ufw status. Deve listar 22/tcp e 25565/tcp como
ALLOW IN.
Se a VPS tem SSH em porta não-padrão (ex: 2222), libere ela ANTES de
ufw enable. Habilitar UFW sem liberar a porta SSH ativa te tranca
fora — só recuperando via console da web do provedor.
Script de backup automático
Mundo Minecraft corrompe. Plugin quebra mundo. Player com WorldEdit deleta a spawn. Backup diário é seguro de noite tranquila.
Crie o script como usuário minecraft:
sudo -u minecraft -i
mkdir -p /opt/minecraft/backups
nano /opt/minecraft/backup.shConteúdo:
#!/bin/bash
BACKUP_DIR="/opt/minecraft/backups"
SERVER_DIR="/opt/minecraft/server"
DATE=$(date +%Y%m%d-%H%M)
tar -czf "${BACKUP_DIR}/world-${DATE}.tar.gz" -C "${SERVER_DIR}" world world_nether world_the_end
find "${BACKUP_DIR}" -name "world-*.tar.gz" -mtime +7 -deleteTorne executável:
chmod +x /opt/minecraft/backup.shAgende com cron pra rodar diariamente às 4h da manhã:
crontab -eAdicione:
0 4 * * * /opt/minecraft/backup.shO script mantém 7 dias de backup automático, apagando o mais antigo.
Verificação final
Pra confirmar que tudo funciona:
# Status do serviço
sudo systemctl status minecraft
# Porta escutando
sudo ss -tlnp | grep 25565
# Conectividade externa (do seu desktop)
nc -vz <IP_DA_VPS> 25565
Abra o cliente Minecraft Java, vá em “Multiplayer”, “Add Server”, e use o IP da VPS. Se conecta sem timeout, está pronto.
Resolução de problemas comuns
Servidor inicia mas crasha em segundos
Verifique logs com sudo journalctl -u minecraft -n 100. Causas
frequentes: Java na versão errada (1.21+ exige Java 21), Xmx maior que
RAM disponível, ou EULA não aceito.
”Connection refused” no cliente
Geralmente firewall — confirme sudo ufw status lista 25565. Se a VPS
tem firewall externo (no painel do provedor), libere também lá. UFW
local não vê o firewall do provedor.
Lag intenso com poucos jogadores
Antes de upgradar plano, ajuste view-distance em server.properties
pra 8 ou 6 (default é 10). Cada redução corta drasticamente o uso de
CPU em chunks. Ative simulation-distance=6 também.
Próximos passos
- Instale o plugin EssentialsX pra comandos básicos (
/home,/spawn,/tpa) — vai em/opt/minecraft/server/plugins/e reinicia o serviço. - Configure RCON pra administração remota sem precisar SSH —
enable-rcon=trueno server.properties. - Adicione anti-cheat (Matrix, Vulcan) se o servidor for público.
- Configure DNS A record pra apontar seu domínio na VPS — jogadores conectam por nome em vez de IP.
- Se vai escalar pra 30+ jogadores ou hospedar comunidade séria, uma VPS dedicada da Hostini com proteção DDoS é o piso técnico — servidor Minecraft público é alvo constante de ataques L4 que derrubam o port 25565 inteiro sem proteção adequada.
Perguntas frequentes
Quanta RAM o servidor Minecraft Java precisa?
Pra 5-10 jogadores sem mods pesados, 2 GB são suficientes com Paper. Pra 10-20 jogadores ou mundos grandes, planeje 4 GB. Mods complexos (forge com 50+ mods) podem exigir 6-8 GB. A regra prática é dimensionar 256-512 MB por jogador ativo, somados ao baseline de 1 GB do servidor.
Posso rodar Minecraft Java em VPS de 1 GB de RAM?
Tecnicamente sim, mas com restrições severas — view-distance 4, no máximo 3 jogadores, e zero plugins pesados. A JVM precisa de overhead, então com 1 GB você aloca no máximo 768 MB pro servidor e o sistema fica apertado. Pra qualquer servidor com pretensão de uso real, 2 GB é o piso prático.
Qual a diferença entre Paper, Spigot e Vanilla?
Vanilla é o servidor oficial da Mojang — referência, mas lento e sem suporte a plugins. Spigot é um fork otimizado com API de plugins. Paper é um fork do Spigot com otimizações de performance significativas (chunks assíncronos, redstone reescrito) e correções de exploits — é o padrão de fato pra servidores Java desde 2018.
Preciso abrir a porta 25565 no firewall mesmo se a VPS for pública?
Sim. A interface de rede da VPS aceita pacotes vindos da internet, mas o iptables/UFW do Linux bloqueia portas não-liberadas por padrão. Sem `ufw allow 25565`, jogadores tentando conectar recebem timeout — a porta nem responde. Se você muda a porta default no server.properties, libere a nova porta antes de reiniciar.
Como mantenho o servidor rodando depois que fecho o SSH?
Não use `java -jar paper.jar` direto na sessão SSH — fechar o terminal mata o processo. Use systemd (cobre o tutorial) ou screen/tmux. Systemd é superior porque reinicia automático se o servidor crashar, registra logs no journalctl e sobe junto com o boot da VPS depois de um reboot.
Backup do mundo precisa parar o servidor?
Não — mas você precisa avisar o servidor pra flushar dados em disco antes. O comando `save-off` desativa salvamentos automáticos, `save-all flush` força gravação pendente, aí você tar o diretório, e `save-on` reativa. O script de backup do tutorial faz isso via RCON sem desconectar jogadores.