Como hospedar um servidor Minecraft em um VPS
Configure Paper no Ubuntu 24.04 com Java 25, systemd, ufw na porta 25565, dimensionamento de RAM e backups seguros do mundo, evitando erros comuns.
O que você está a criar
Um servidor Minecraft Java Edition que permanece disponível: Paper no Ubuntu 24.04, executado como um utilizador dedicado minecraft através do systemd com Restart=on-failure, com a lista branca ativada, a porta 25565 aberta no ufw e na firewall de rede do seu fornecedor, se existir, e com cópias de segurança feitas de uma forma que não corrompa o mundo que devem proteger. O próprio servidor é um jar e um comando java; tudo o que distingue um servidor onde os seus amigos jogam durante um ano de um servidor que falha no primeiro fim de semana está relacionado com esse comando, e é isso que este guia explica.
Dois avisos honestos antes de gastar dinheiro. Primeiro, o Minecraft consome muita memória e utiliza sobretudo uma única thread: um VPS com 1 GB não executa um servidor jogável, e um núcleo rápido é melhor do que quatro núcleos lentos. Segundo, isto é Java Edition. Jogadores de Bedrock, consolas, telemóveis e a aplicação Windows Bedrock não podem ligar-se a um servidor Java; o Bedrock requer software de servidor diferente na porta UDP 19132 ou o plugin Geyser, que está fora do âmbito deste guia.
Precisa de um VPS KVM Ubuntu 24.04 novo, com root ou sudo, e de cerca de trinta minutos.
Dimensionamento: o que um servidor para amigos realmente precisa
A RAM é o fator mais importante, e os valores reais são inferiores aos sugeridos nos fóruns de modpacks:
- 2 GB executa vanilla para 2–5 jogadores com uma distância de visão moderada. É jogável, mas sem margem.
- 4 GB é o tamanho confortável para um servidor de amigos: cerca de dez jogadores em simultâneo no Paper com alguns plugins, além de memória suficiente para o sistema operativo.
- 8 GB ou mais é adequado para modpacks e mais de 20 jogadores. Neste caso, também deve considerar a velocidade de um único núcleo da CPU, porque o ciclo principal do jogo é executado numa única thread.
O mundo também ocupa cada vez mais espaço em disco à medida que os jogadores exploram. Um mundo de survival bastante explorado pode atingir vários gigabytes. Por isso, deixe margem para o mundo e para as respetivas cópias de segurança.
Vanilla ou Paper? O Paper é um substituto direto do jar oficial: usa os mesmos mundos, os mesmos clientes e não exige mods no lado do cliente. Reescreve os caminhos mais lentos do servidor, como o carregamento de chunks, a atualização de entidades e o processamento de hoppers, além de fornecer uma API de plugins. A única razão para usar vanilla é precisar de mecânicas vanilla idênticas ao nível dos bits em farms técnicas de redstone que podem ser alteradas pelas otimizações do Paper. Para todos os outros casos, o Paper suporta mais jogadores por gigabyte. Tudo o que é apresentado abaixo funciona com ambos.
Passo 1: instalar o Java 25
O Minecraft 26.1 e todas as versões posteriores requerem o Java 25; o Java 21 só é compatível com a linha mais antiga, de 1.20 a 1.21.11. O Ubuntu 24.04 disponibiliza o Java 25 através dos repositórios de atualizações e de segurança. Instale o JRE completo, não a variante -headless: o guia de instalação do Java do Paper desaconselha variantes headless porque não incluem dependências necessárias pelo Paper.
sudo apt update && sudo apt install -y openjdk-25-jre
java -versionResultado correto: a primeira linha mostra openjdk version "25.0.x". Se mostrar 21, 17 ou 11, existe outro JRE instalado e selecionado; corrija com sudo update-alternatives --config java e escolha a entrada que contém java-25.
Ignorar esta verificação produz mais tarde o erro de servidor Minecraft mais pesquisado no Google. Com o Java 21, o JAR do servidor termina imediatamente com:
Error: LinkageError occurred while loading main class net.minecraft.bundler.Main
java.lang.UnsupportedClassVersionError: net/minecraft/bundler/Main has been
compiled by a more recent version of the Java Runtime (class file version 69.0),
this version of the Java Runtime only recognizes class file versions up to 65.0Os números identificam a incompatibilidade: a versão de ficheiro de classe 69.0 corresponde ao Java 25, 65.0 ao Java 21 e 61.0 ao Java 17. Independentemente do par apresentado, a correção é a mesma: instale o JRE mais recente e execute update-alternatives novamente.
Passo 2: um utilizador dedicado, nunca root
O servidor executa código de plugins e analisa dados de rede recebidos de qualquer pessoa que consiga alcançar a porta. Se algo correr mal, uma intrusão executada como root compromete todo o seu VPS; uma executada como minecraft fica limitada a um mundo de jogo.
sudo adduser --system --group --home /opt/minecraft minecraft--system cria uma conta sem palavra-passe que não pode iniciar sessão através de SSH, com /opt/minecraft como diretório pessoal e diretório de trabalho. A partir deste ponto, todos os comandos que interagem com o servidor são executados por este utilizador.
Etapa 3: descarregue o server jar da fonte oficial
Apenas dois locais devem fornecer um server jar: a página oficial de download de servidores em minecraft.net para o vanilla e a página de downloads em papermc.io para o Paper. Os "download hubs" de terceiros que reempacotam server jars são um canal de malware utilizado há muito tempo. Um server jar contém código arbitrário que será executado 24/7 num servidor exposto à Internet.
Copie o link de download da build atual na página oficial. O URL muda a cada versão e build, por isso não faria sentido fixar um URL aqui. Em seguida:
cd /opt/minecraft
sudo -u minecraft wget -O server.jar 'PASTE-THE-COPIED-URL-HERE'Resultado correto: um server.jar com aproximadamente 60 MB, pertencente a minecraft, confirmado com ls -lh /opt/minecraft/server.jar.
Passo 4: primeira execução, o EULA e conceder privilégios de operador a si próprio
Execute o servidor de forma interativa uma vez antes de configurar o systemd. Na primeira execução, há apenas duas tarefas que uma consola ativa executa corretamente.
cd /opt/minecraft
sudo -u minecraft java -Xms1G -Xmx1G -jar server.jar noguiO processo termina ao fim de alguns segundos. O Paper demora mais alguns instantes a aplicar primeiro os seus patches. Depois, o log termina com a mensagem que todos encontram:
[ServerMain/INFO]: You need to agree to the EULA in order to run the server. Go to eula.txt for more info.Isto não é um erro. É uma validação da licença. A execução criou eula.txt junto ao jar. Leia o EULA associado se ainda não o fez. Depois, altere o sinalizador:
sudo -u minecraft sed -i 's/eula=false/eula=true/' /opt/minecraft/eula.txtExecute novamente o mesmo comando java. Desta vez, o servidor gera o mundo, o que demora um ou dois minutos na primeira inicialização, e fica neste estado:
[Server thread/INFO]: Done (9.204s)! For help, type "help"Agora tem uma consola ativa. Use-a para a segunda tarefa: introduza op YourMinecraftName (o seu nome de utilizador exato no jogo). O servidor adiciona-o a ops.json. Assim, mais tarde, quando não houver uma consola ligada, poderá executar qualquer comando de administração dentro do jogo. Depois, introduza stop para guardar e sair corretamente.
Passo 5: server.properties e por que online-mode permanece true
A primeira execução também criou server.properties. A maioria dos valores padrão é adequada. Estas são as linhas que devem ser decididas deliberadamente:
online-mode=true
white-list=true
enforce-whitelist=true
view-distance=8
max-players=10
motd=A private server for people I actually knowonline-mode=true faz o servidor verificar cada nome de utilizador que entra junto dos servidores de sessão da Mojang, confirmando que o jogador é proprietário da conta. Definir como false, a opção de "servidor cracked", significa que o servidor aceita a identidade declarada por qualquer cliente: qualquer pessoa pode entrar com qualquer nome, incluindo o seu. Como as permissões de operador e as listas de permissões usam o nome como identificador, um impostor entra com as suas permissões de operador. A única razão legítima para usar false é estar atrás de um proxy de autenticação, como o Velocity, que verifica os jogadores por conta própria. Num servidor normal, permanece true, sem exceções.
view-distance é o principal fator de desempenho neste ficheiro. O consumo de CPU e RAM aumenta aproximadamente com o quadrado deste valor. 8 é um valor padrão adequado para um VPS. 10 é o valor padrão do vanilla e exige visivelmente mais recursos.
white-list=true mais enforce-whitelist=true impede a entrada de desconhecidos no servidor. A secção de segurança abaixo explica por que esta configuração não é opcional. Adicione jogadores com /whitelist add TheirName no jogo, usando uma conta com permissões de operador.
Passo 6: flags de memória; por que -Xms e -Xmx devem ser iguais
A JVM aloca o heap entre -Xms (tamanho inicial) e -Xmx (limite máximo). Num servidor de jogos dedicado, defina ambos com o mesmo valor: o heap acabará por atingir o limite máximo, e aumentá-lo em etapas apenas acrescenta atividade do garbage collector durante o jogo. Num VPS com 4 GB, o par correto é:
/usr/bin/java -Xms3G -Xmx3G -jar server.jar nogui-Xmx não é a memória total utilizada pelo processo. A JVM acrescenta overhead fora do heap, stacks de threads, caches JIT e buffers diretos, num total aproximado de meio gigabyte ou mais. O Ubuntu também precisa de espaço. A regra prática é: -Xmx no máximo deve ser a RAM do VPS menos 1 GB. Se exceder esse valor, ocorrerá uma de duas falhas. Se a alocação falhar logo no início, o servidor recusará arrancar com:
Error: Could not reserve enough space for object heapEsse erro é claro e imediato. A variante mais problemática inicia normalmente e termina horas depois, quando o heap fica cheio sob carga e o OOM killer do kernel escolhe o maior processo do sistema: a JVM. Nada aparece no log do servidor; a evidência está em sudo dmesg | grep -i oom, numa linha como Out of memory: Killed process 1234 (java). Se o serviço reiniciar de forma "aleatória", verifique primeiro esse ficheiro e reduza -Xmx.
Para o Paper, o projeto documenta as flags do Aikar, um conjunto ajustado para G1GC (-XX:+UseG1GC -XX:MaxGCPauseMillis=200 e mais uma dúzia de opções) que suaviza as pausas do garbage collector em heaps maiores. Gere a linha completa a partir da documentação do Paper; num heap de 2–4 GB, o ganho é modesto, mas as flags não causam problemas.
Passo 7: uma unidade systemd com Restart=on-failure
Um servidor iniciado manualmente é encerrado com a sua sessão SSH e permanece parado depois de um reboot. Crie /etc/systemd/system/minecraft.service:
[Unit]
Description=Minecraft server (Paper)
After=network-online.target
Wants=network-online.target
[Service]
User=minecraft
Group=minecraft
WorkingDirectory=/opt/minecraft
ExecStart=/usr/bin/java -Xms3G -Xmx3G -jar server.jar nogui
Restart=on-failure
RestartSec=10
TimeoutStopSec=120
[Install]
WantedBy=multi-user.targetsudo systemctl daemon-reload
sudo systemctl enable --now minecraft
systemctl status minecraft
journalctl -u minecraft -fResultado correto: status mostra active (running), e o journal, que agora contém a saída da consola do servidor, termina novamente na linha Done.
Há duas escolhas deliberadas nessa unidade. Restart=on-failure reinicia o servidor depois de uma falha, mas não depois de um stop normal, para que a manutenção continue a ser possível. E TimeoutStopSec=120 é mais importante do que parece: systemctl stop envia SIGTERM, o servidor Minecraft captura o sinal e guarda todos os mundos antes de sair, e essa gravação demora algum tempo num mundo grande. O tempo limite predefinido do systemd pode enviar SIGKILL para a JVM durante a gravação. É exatamente assim que os ficheiros de região ficam corrompidos. Defina duas minutos.
Se o serviço reiniciar repetidamente e o journal mostrar:
[Server thread/WARN]: **** FAILED TO BIND TO PORT!
[Server thread/WARN]: The exception was: io.netty.channel.unix.Errors$NativeIoException: bind(..) failed: Address already in use
[Server thread/WARN]: Perhaps a server is already running on that port?então já existe outro processo a usar a porta 25565. Quase sempre, a execução anterior em primeiro plano continua ativa noutra sessão SSH. Encontre-a com sudo ss -tlnp | grep 25565 e pare essa cópia. Nunca execute dois servidores na mesma porta.
Etapa 8: abra a porta 25565 em ambas as firewalls
O Minecraft Java usa apenas TCP 25565 (UDP é apenas o protocolo de consulta opcional e está desativado por predefinição). No VPS:
sudo ufw allow OpenSSH
sudo ufw allow 25565/tcp
sudo ufw enableEssa é a primeira firewall. Muitos fornecedores de VPS também disponibilizam uma segunda firewall ao nível da rede no painel de controlo. Quando existe, é normalmente essa que fica esquecida. Na SSD Nodes, trata-se do extra pago Advanced Firewall Groups, que pode atribuir durante o checkout ou no dashboard. Se o seu servidor tiver um grupo desses, abra também o TCP 25565 nessa firewall. O sintoma de uma regra em falta em qualquer uma delas é pouco específico: o cliente fica bloqueado em "Connecting to the server..." e falha com Connection timed out: no further information, sem recusa da ligação, sem erro no servidor e sem nada no journal, porque os pacotes nunca chegaram. Verifique a partir de uma máquina fora do VPS com nc -vz your.server.ip 25565; succeeded significa que todas as firewalls no caminho estão abertas. Um bloqueio normalmente significa que ainda existe uma firewall a descartar os pacotes, embora um host demasiado ocupado para aceitar ligações também possa atingir o tempo limite. Por isso, confirme que o servidor está a escutar com ss na própria máquina.
Enquanto está no ufw, tenha em conta que a mesma máquina executa SSH num IP público e que o ruído dos logs de tentativas de força bruta começa em poucas horas. Configure o Fail2ban para SSH no Ubuntu 24.04 antes de se esquecer.
Agora ligue-se: Multiplayer, Direct Connection, o IP do servidor. Como se atribuiu a operador no passo 4, os comandos no jogo funcionam imediatamente: /whitelist add FriendName para cada jogador e /gamemode creative se esse for o plano.
Etapa 9: use uma whitelist, porque a Internet encontra a porta 25565
Deixar um servidor Minecraft aberto à Internet não é um risco teórico: scanners em massa varrem continuamente todo o espaço IPv4 à procura da porta 25565, projetos de griefing amador já mapearam centenas de milhares de servidores abertos dessa forma, e um servidor sem whitelist recebe visitantes não convidados em poucos dias, às vezes em poucas horas. A whitelist da etapa 5 resolve o problema: online-mode=true comprova a identidade, e a whitelist restringe a entrada às identidades que escolheu. Esse conjunto constitui todo o modelo de segurança e é suficiente para um servidor de amigos.
Para aceder à consola sem usar o jogo, executar backups por script ou usar um cron job, ative o RCON em server.properties (enable-rcon=true, um rcon.password forte, porta 25575) e compile o pequeno cliente mcrcon a partir do respetivo código-fonte no GitHub, diretamente no VPS; ele não está nos repositórios do Ubuntu. Não abra a porta 25575 em nenhuma firewall: o RCON envia a palavra-passe em texto simples, por isso deve permanecer acessível apenas pelo loopback.
Passo 10: backups que não corrompem o mundo
A regra é simples: nunca copie um diretório de mundo enquanto o servidor estiver a escrever nele. Os ficheiros de região são reescritos continuamente durante o jogo; um tar que ocorra durante uma escrita produz um arquivo com chunks gravados pela metade. Quando o restaurar, precisamente no momento em que um backup tem de funcionar, o log fica cheio de erros ao carregar chunks e o terreno apresenta falhas. Duas abordagens evitam isto.
Parar-copiar-iniciar é a opção simples, com o custo de um minuto de indisponibilidade:
sudo systemctl stop minecraft
sudo mkdir -p /opt/backups
sudo tar czf /opt/backups/world-$(date +%F-%H%M).tgz \
-C /opt/minecraft world
sudo systemctl start minecraft(Desde a versão 26.1, o Paper mantém as três dimensões dentro de world/dimensions/, tal como o vanilla, pelo que world contém o mundo completo. Um servidor Paper que ainda esteja na versão 1.21.11 ou anterior separa-as em world, world_nether e world_the_end; nesse caso, adicione essas duas ao tar.)
Save-off faz o backup com o servidor ativo: através do RCON, execute save-off (para o autosaver), depois save-all flush (força a gravação de tudo no disco e aguarda), crie o tar e, em seguida, execute save-on. Esta é a versão a colocar no cron às 5 a.m.
Em qualquer dos casos, um backup armazenado no mesmo VPS que o servidor não é um backup. Use scp ou rclone para copiar os arquivos para fora do servidor e mantenha mais de um. Como não ficará a observar a consola quando ocorrer uma falha, configure também uma verificação externa da porta: Uptime Kuma noutro servidor a executar uma verificação TCP contra 25565 informa-o de que o servidor está indisponível antes dos jogadores.
Plugins e atualizações
Na prática, um plugin é um ficheiro jar colocado em /opt/minecraft/plugins/, seguido de um reinício. Essa é toda a instalação. Obtenha plugins apenas nas páginas oficiais dos respetivos projetos (Hangar, Modrinth, SpigotMC), pelo mesmo motivo que se aplica ao jar do servidor: cada plugin é código arbitrário executado com o utilizador minecraft.
A atualização do servidor consiste em parar, fazer uma cópia de segurança, substituir server.jar pela build da nova versão do Minecraft e iniciar. Tenha em atenção dois pontos. As atualizações dos mundos são unidirecionais. Um mundo aberto por uma versão mais recente não será aberto por uma versão mais antiga. As cópias de segurança são necessárias também por esse motivo. Além disso, os plugins costumam demorar dias ou semanas a acompanhar uma nova versão do Minecraft. Verifique a compatibilidade antes de instalar uma versão nova no próprio dia do lançamento. A passagem de 1.21.11 para 26.1 ou posterior também requer Java 25 (passo 1) e move as pastas Nether e End do Paper para world/dimensions/.
Se preferir gerir tudo isto num contentor, com o bloqueio da versão, a aceitação da EULA e as flags de memória como variáveis de ambiente, a imagem itzg/minecraft-server, amplamente utilizada, executa o mesmo servidor Paper através de Docker Compose no seu VPS, mantendo a mesma disciplina de firewall e cópias de segurança.
FAQ
Quanta RAM um servidor Minecraft precisa?
2 GB executam o vanilla para 2–5 jogadores; 4 GB são suficientes para um servidor de amigos com cerca de dez jogadores no Paper e alguns plugins; modpacks e mais de 20 jogadores exigem 8 GB ou mais. Independentemente do tamanho do VPS, defina -Xmx para, no máximo, a RAM total menos 1 GB, porque a JVM usa memória além da heap, e exceder esse limite termina em Error: Could not reserve enough space for object heap ou num encerramento silencioso por OOM.
Por que os meus amigos não conseguem ligar-se ao meu servidor Minecraft?
Um cliente que fica bloqueado e termina em Connection timed out: no further information normalmente indica um firewall: o ufw no VPS e o firewall de rede do provedor, se estiver ativado no painel de controlo. A porta TCP 25565 tem de estar aberta em todos os firewalls existentes no percurso. Confirme que o servidor está efetivamente a escutar com sudo ss -tlnp | grep 25565 no servidor e teste a partir do exterior com nc -vz your.server.ip 25565.
Devo definir online-mode=false em server.properties?
Não. Com online-mode=false, o servidor ignora completamente a autenticação da Mojang. Assim, qualquer pessoa pode entrar com qualquer nome de utilizador, incluindo o nome de um operador, e herdar as respetivas permissões. As skins e os UUID estáveis também deixam de funcionar corretamente. A única utilização legítima é atrás de um proxy de autenticação, como o Velocity, que verifica os jogadores por si próprio. Num servidor normal, deve permanecer true.
O Paper é melhor do que o servidor Minecraft vanilla?
Para quase todos, sim. O Paper é um ficheiro jar compatível que carrega mundos vanilla, aceita clientes sem modificações, processa entidades e carrega chunks com muito mais eficiência, além de disponibilizar o ecossistema de plugins. A exceção são as comunidades técnicas de redstone que precisam de um comportamento vanilla exatamente igual ao original, porque algumas otimizações do Paper alteram esse comportamento. Num VPS pequeno, a eficiência do Paper equivale, na prática, a obter RAM adicional sem custo.
Como faço uma cópia de segurança de um mundo Minecraft sem o corromper?
Nunca arquive o diretório do mundo enquanto o servidor estiver a escrever nele. Uma cópia feita durante uma escrita num ficheiro de região pode produzir chunks corrompidos, que só serão detetados quando a cópia for restaurada. Pode parar o servidor, usar tar nos diretórios dos mundos e iniciá-lo novamente, ou mantê-lo em execução com save-off, save-all flush, tar e save-on através de RCON. Depois, transfira o arquivo para fora do VPS.