Como hospedar um servidor Minecraft em um VPS
Configure um servidor Paper no Ubuntu 24.04 com Java 21, systemd, whitelist, RAM adequada, firewalls na porta 25565 e backups seguros do mundo.
O que você vai 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 whitelist ativada, a porta 25565 aberta em ambas as firewalls entre os seus jogadores e a JVM, e cópias de segurança feitas de forma a não corromper o mundo que pretendem proteger. O servidor consiste num jar e num 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 aborda.
Dois avisos importantes antes de gastar dinheiro. Primeiro, o Minecraft consome muita memória e usa sobretudo uma única thread: um VPS com 1 GB não executará 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 da aplicação Windows Bedrock não podem entrar num servidor Java; 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 novo com Ubuntu 24.04, acesso root ou sudo e 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 Java 21
O Minecraft 1.20.5 e todas as versões posteriores, incluindo todas as versões 1.21.x, exigem Java 21. O Ubuntu 24.04 disponibiliza-o nos repositórios predefinidos, e a compilação headless omite as bibliotecas de ambiente gráfico que um servidor nunca utiliza:
sudo apt update && sudo apt install -y openjdk-21-jre-headless
java -versionResultado correto: a primeira linha apresenta openjdk version "21.0.x". Se apresentar 17 ou 11, existe outro JRE instalado e selecionado; corrija a situação com sudo update-alternatives --config java e escolha a entrada que contém java-21.
Ignorar esta verificação produz mais tarde o erro de servidor Minecraft mais pesquisado. Com Java 17, 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 65.0),
this version of the Java Runtime only recognizes class file versions up to 61.0Os números indicam a incompatibilidade: a versão de ficheiro de classe 65.0 corresponde a Java 21, 61.0 corresponde a Java 17 e 60.0 corresponde a Java 16. 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.
Passo 3: descarregar o server jar da fonte oficial
Apenas dois locais devem fornecer um server jar: a página oficial de descarregamento do servidor em minecraft.net, para vanilla, e a página de descarregamentos em papermc.io, para Paper. Os "download hubs" de terceiros que reempacotam server jars são um canal de malware ativo há muitos anos. Um server jar contém código arbitrário que será executado 24/7 num servidor exposto à Internet.
Copie o link de descarregamento da build atual na página oficial. O URL muda a cada versão e build, por isso não seria adequado incluir aqui um valor fixo. Em seguida:
cd /opt/minecraft
sudo -u minecraft wget -O server.jar 'PASTE-THE-COPIED-URL-HERE'Resultado correto: um server.jar de aproximadamente 50 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. A maioria dos fornecedores de VPS disponibiliza uma segunda firewall ao nível da rede no painel de controlo, que é frequentemente esquecida. Abra também a porta TCP 25565 nessa firewall. Quando apenas uma das duas está aberta, o sintoma é 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, erro do servidor ou registo 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 ambas as firewalls estão abertas. Um bloqueio significa que pelo menos uma delas não está.
Enquanto está no ufw, o mesmo servidor está a executar SSH num IP público, e o ruído 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 si próprio o privilégio de operador na etapa 4, os comandos no jogo funcionam imediatamente, /whitelist add FriendName para cada jogador, /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 principal é: nunca copie um diretório do mundo enquanto o servidor estiver a gravá-lo. Os ficheiros de região são reescritos continuamente durante o jogo. Um tar que coincida com uma gravação produz um arquivo com chunks parcialmente gravados. Quando o restaurar, precisamente quando um backup tem de funcionar, o log fica cheio de erros ao carregar chunks e o terreno fica com falhas. Duas práticas evitam este problema.
Parar-copiar-iniciar é a opção simples, com 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 world_nether world_the_end
sudo systemctl start minecraft(O Paper separa as dimensões em world, world_nether e world_the_end. Um servidor vanilla mantém tudo em world, por isso omita as outras duas nesse caso.)
Save-off faz o backup com o servidor ativo. Por RCON, execute save-off (parar o autosaver), depois save-all flush (forçar tudo para o disco e aguardar), 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 guardado no mesmo VPS que o servidor não é um backup. scp ou rclone os arquivos para fora desse servidor e mantenha mais de um. Como não estará a observar a consola quando ocorrer uma falha, configure uma verificação externa da porta: Uptime Kuma noutro servidor a executar uma verificação TCP na porta 25565 informa-o de que o servidor está indisponível antes dos jogadores.
Plugins e atualizações
Em termos práticos, 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 o serviço, fazer uma cópia de segurança, substituir server.jar pela build da nova versão do Minecraft e iniciar o serviço. Tenha em conta 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 anterior. Este é outro motivo para manter cópias de segurança. Além disso, os plugins costumam demorar dias ou semanas a suportar uma nova versão do Minecraft. Verifique a compatibilidade antes de instalar uma atualização no próprio dia do lançamento.
Se preferir gerir tudo isto num contentor, com o controlo de versões, a aceitação da EULA e as flags de memória definidos como variáveis de ambiente, a imagem itzg/minecraft-server, amplamente utilizada, executa o mesmo servidor Paper com Docker Compose no seu VPS, mantendo a mesma disciplina de firewall e cópias de segurança.
FAQ
De 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 em 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 do heap, e exceder esse valor termina em Error: Could not reserve enough space for object heap ou num OOM kill silencioso.
Por que os meus amigos não conseguem ligar-se ao meu servidor Minecraft?
Uma ligação do cliente que fica bloqueada e termina em Connection timed out: no further information quase sempre indica uma firewall. Existem duas: o ufw no VPS e a firewall de rede do fornecedor, no painel de controlo. A porta TCP 25565 tem de estar aberta em ambas. 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 op, 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 com autenticação, como o Velocity, que valida 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 não modificados, processa entidades e carrega chunks de forma muito mais eficiente, 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 executada durante uma escrita num ficheiro de região pode produzir chunks corrompidos, que só serão descobertos no momento do restauro. Pare o servidor, use tar para arquivar os diretórios dos mundos e inicie-o novamente. Em alternativa, mantenha o servidor ativo com save-off, save-all flush, tar e save-on através de RCON. Depois, transfira o arquivo para fora do VPS.