Skip to content
Pular para o conteúdo
Voltar ao Blog
Docker-MC-Proxy: Execução de Rede de Servidores Minecraft

Docker-MC-Proxy: Execução de Rede de Servidores Minecraft

Alexandru Maftei
Alexandru Maftei
@ice
Atualizado
18 visualizações
TL;DR:Docker-mc-proxy executa proxies Minecraft como BungeeCord e Velocity em um contêiner, permitindo dividir jogadores entre múltiplos servidores de backend. Ideal para comunidades em crescimento ou redes de alto tráfego que necessitam de balanceamento de carga e redundância.
Projeto da comunidade GitHub · Minecraft

docker-mc-proxy (itzg/docker-mc-proxy)

Imagem Docker que oferece uma escolha de proxies Minecraft, como BungeeCord e Velocity

Marcar no GitHub ↗
⭐ 320 estrelas💻 Shell📜 Apache-2.0

Gerenciar múltiplos servidores Minecraft parece excessivo até que não seja mais. Talvez você tenha superado um servidor único, ou deseje dividir jogadores entre um mundo de sobrevivência e um reino criativo sem forçar todos a escolher. Um proxy atua entre os jogadores e seus servidores reais, lidando com o tráfego e redirecionando jogadores para onde eles precisam ir. Docker-mc-proxy faz exatamente isso, e é simples de configurar se você conhece os básicos do Docker.

O que este projeto faz

Docker-mc-proxy é uma imagem containerizada que executa um servidor proxy Minecraft. E suporta BungeeCord (a escolha mais comum), Velocity (a alternativa mais nova e mais rápida) e Waterfall (um fork da comunidade de BungeeCord com mais recursos). Atua como intermediário: os jogadores se conectam ao endereço do proxy, e o proxy os redireciona para o servidor de backend configurado.

A imagem vem com verificações de saúde embutidas usando mc-monitor, então o Docker e suas ferramentas de orquestração sabem imediatamente se algo está errado. Você não precisa analisar logs para descobrir se o processo ainda está ativo.

É parte da suíte de imagens Docker da itzg (320 estrelas no GitHub), o que indica que não é um projeto abandonado. O mantenedor o mantém atualizado com suporte a Java 25 e reparos de bugs regulares.


Por que usar isso

Configurações de servidor único se quebram quando você atinge um limiar de jogador. Um mundo 1.20 com 50 jogadores se movendo começa a demorar. Você poderia otimizar o heck do seu servidor config, sim. Ou poderia dividir: sobrevivência em um servidor, minijogos em outro, e deixar o proxy lidar com o roteamento. Os jogadores nem notam a costura.

Também há redundância. Se o seu servidor principal falhar, você pode iniciar uma instância de backup e o proxy ainda funcionará. Você não diz a 100 jogadores "o servidor está morto, veja você mais tarde."

Provedores de hospedagem adoram implantações Docker porque são previsíveis e eficientes em termos de recursos. Se você estiver executando isso em infraestrutura compartilhada ou VPS, a containerização significa que você não está acidentalmente monopolizando RAM que quebra outra aplicação.


Instalação e Configuração Básica

A forma mais simples de começar é com Docker Compose. Aqui está um exemplo funcional:

yaml
services:
 mc:
 image: itzg/minecraft-server
 environment:
 EULA: "TRUE"
 ONLINE_MODE: "FALSE"
 volumes: -mc-data:/data
 proxy:
 image: itzg/mc-proxy
 environment:
 TYPE: BUNGEECORD
 CFG_MOTD: "Powered by Docker"
 ports: - "25565:25577"
 volumes: -./config.yml:/config/config.yml -proxy-data:/server

volumes:
 mc-data:
 proxy-data:

O item crítico: `ONLINE_MODE=FALSE` no servidor de backend. Os proxies precisam disso porque lidam com autenticação, não os servidores individuais. Sem isso, os jogadores são expulsos com um erro "não autenticado".

O proxy mapeia a porta 25565 (a porta padrão do Minecraft) para sua porta interna 25577. Os jogadores se conectam ao IP do seu servidor na porta 25565, e o proxy cuida do resto.

Se você quiser personalizar o MOTD do servidor (a descrição que os jogadores veem em sua lista de servidores), use a variável de ambiente `CFG_MOTD`, ou melhor ainda, use nosso Criador de MOTD do Minecraft para projetá-lo visualmente e colá-lo. Você até pode usar códigos de cores.

Agora você precisa configurar para onde o tráfego vai. Crie um arquivo `config.yml` que diga ao proxy quais servidores de backend existem:

yaml
servers:
 survival:
 address: mc:25565
 restricted: false
 creative:
 address: creative-server:25565
 restricted: false
listeners: -query_port: 25577
 motd: "Minha Rede Minecraft"
 tab_list: GLOBAL_PING
 default_server: survival

Os jogadores aterrissam no survival por padrão. Eles podem saltar entre mundos usando comandos dentro do jogo.


Recursos Principais que Importam

Verificações de saúde embutidas são genuinamente impressionantes. O Docker pode ver se o proxy está responsivo sem que você escreva scripts personalizados. Execute `docker ps` e você verá um status `(saudável)` em vez de apenas `(atualizado)`. Isso importa se você estiver executando Kubernetes ou qualquer plataforma de orquestração onde contêineres mortos são substituídos automaticamente.

O gerenciamento de memória é mais flexível do que você esperaria. O padrão é 512m, mas você pode ajustá-lo ou deixar o JVM dimensionar automaticamente com base no limite de memória do contêiner. Se você estiver esguestrando isso em um VPS pequeno, há muitos controles que você pode girar.

Suporte a arquivos JAR de proxy personalizados significa que você não está preso às três opções embutidas. Defina `TYPE=CUSTOM`, aponte `BUNGEE_JAR_URL` para onde o seu JAR vive, e você está pronto. Algumas comunidades executam forks com recursos personalizados; isso atende a esse caso.

A imagem sincroniza a configuração de `/config` no início. Se você estiver atualizando a configuração do proxy por meio de volumes do Docker (o que você deve fazer), ele captura as alterações sem precisar reconstruir a imagem. Respeita sua config sobre qualquer coisa embutida.


Armadilhas e Erros Comuns

O maior deles: esquecer `ONLINE_MODE=FALSE` nos servidores de backend. Você verá erros "não autenticado" e pensará que algo está quebrado quando na verdade você simplesmente perdeu uma flag.

A confusão com o encaminhamento de porta também surge. O contêiner usa internamente 25577, mas você pode mapeá-lo para qualquer porta externa que desejar. Se você fizer `ports: "25565:25577"`, os jogadores se conectam a 25565, não 25577. Não abra acidentalmente 25577 no seu firewall e se pergunte por que ninguém pode se conectar.

Algumas pessoas iniciam múltiplos servidores de backend, mas não percebem que o proxy precisa alcançá-los pela rede. Se seus servidores estiverem em contêineres separados, use nomes de serviço (como `mc:25565` em compose) em vez de localhost. O DNS interno do Docker lida com o roteamento.

Na verdade, há outra coisa que eu continuo esquecendo: se você estiver atualizando a versão do JAR do proxy, defina `BUNGEE_JAR_REVISION` para um novo número para forçar um rebaixamento. Caso contrário, ele armazenará em cache a versão antiga e você se perguntará por que suas correções não foram aplicadas.


Quando Proxies Não São a Resposta

Se você tiver menos de 30 jogadores simultâneos e nenhum problema de desempenho, um proxy é uma complexidade extra que você não precisa. Paper e Purpur podem lidar com contagens de jogadores decentes com otimização sólida.

Proxies também adicionam latência. Geralmente é insignificante em uma LAN ou internet moderna, mas em casos extremos (hardware muito antigo, rede estranha), você pode notar atrasos de tick. Velocity é melhor nisso do que BungeeCord, mas vale a pena fazer benchmarks para o seu setup.

Se você estiver executando um servidor PvP competitivo onde cada milissegundo importa, você vai querer testar se o overhead do proxy é aceitável. A maioria dos jogadores não notará. Os jogadores hardcore de PvP notarão.


Alternativas Válidas para Considerar

Geyser (também mantido pela itzg) é uma criatura diferente por completo - traduz conexões Bedrock para Edição Java, não balanceamento de carga. Não é uma substituição, mas às vezes as pessoas se confundem.

Traefik ou Nginx podem tecnicamente atuar como proxy reverso para Minecraft se você estiver executando tudo no Kubernetes e quiser ingress unificado, mas são excesso. Velocity é mais simples e mais rápido para esse caso de uso específico.

Se você quiser algo ainda mais leve, há projetos de proxy de propósito único flutuando no GitHub, mas geralmente são menos mantidos e faltam as boas práticas operacionais (verificações de saúde, recarregues de config fácil) que tornam docker-mc-proxy confiável para produção.


Executando Isso em Produção

Docker torna essa parte suave. Defina limites de recursos, use políticas de reinício, e deixe o Docker lidar com falhas. Um setup típico reserva 512m-1g para o proxy em si a menos que você esteja roteando centenas de jogadores simultâneos.

Aggregação de logs é seu amigo. O proxy produz muita diagnóstica útil. Se você estiver executando em um host com múltiplos serviços, alimente esses logs em algum lugar central (syslog, ELK, CloudWatch, o que for) para que você possa realmente depurar problemas quando eles surgirem.

Para o MOTD, se você estiver rotacionando mensagens sazonais ou quiser algo dinâmico, você pode usar substituição de variáveis de ambiente. Defina `REPLACE_ENV_VARIABLES=true` e faça referência a `${SOME_VAR}` em seu arquivo de configuração.

Outro ponto digno de nota: se você precisar de um ícone de servidor personalizado, a imagem pode baixar e converter automaticamente. Defina a variável de ambiente `ICON` para uma URL e ela cuidará da conversão para PNG 64x64 para você. Se você já tiver um ícone em `/server`, use `OVERRIDE_ICON=true` para substituí-lo. Você pode usar nossa Busca de Blocos do Minecraft para encontrar IDs de blocos específicos se você estiver construindo ícones de servidor block-art em modo criativo primeiro (sim, as pessoas fazem isso).

itzg/docker-mc-proxy - Apache-2.0, ★320
Sobre o autor
Alexandru Maftei
Alexandru MafteiRedator-chefe

Lead writer at minecraft.how. Long-time Minecraft player running a small SMP server, testing every build, mod, and seed before writing about it.

Comentários

Nenhum comentário ainda. Seja o primeiro a compartilhar sua opinião!

We use cookies to improve your experience. By continuing to use this site, you agree to our use of cookies. Read our Privacy Policy