SERVER / QUICK START

Tutorial de Servidor Linux

Guia passo a passo com Docker cobrindo preparo, compose, inicialização, manutenção e problemas comuns.

Este tutorial orientará você na implantação rápida de um servidor de jogo no Linux usando Docker. Mesmo que você não tenha muita experiência técnica, poderá seguir os passos até a conclusão.

1. Preparação

  • Você deve usar um servidor em nuvem, como Alibaba Cloud, Tencent Cloud, AWS ou provedor semelhante, ou uma VPS.
  • Obrigatório: solicite um TOKEN de autorização do jogo válido (GAME_TOKEN) com a equipe oficial. Sem TOKEN não é possível abrir um servidor público.
  • Prepare um servidor com IP público fixo, que possa responder a ping e ser acessado pela rede; caso contrário, a análise será reprovada.
  • Instale Docker e Docker Compose (recomendado) ou garanta que o ambiente de execução do servidor atenda aos requisitos do jogo.
  • Ao solicitar o TOKEN, envie o e-mail para team@nextindie.cn.

Modelo de solicitação do servidor · Contrato de Licença e Serviços do Jogo

Text
I. Informações básicas do solicitante
UID do usuário: [Preencha o ID de usuário da sua conta do jogo]
IP público vinculado ao servidor: [Preencha o IP público fixo e exclusivo; ele deve responder a ping]
Região física do servidor: [Por exemplo: Ásia, América do Norte]
Resumo da finalidade do pedido e do tamanho da comunidade: [Por exemplo: servidor pessoal, servidor para uma comunidade específica de jogadores]
II. Importante: compromisso de operação sem fins lucrativos e aviso de conformidade
Como operador responsável por este servidor, li com atenção o Capítulo 10 do Contrato de Licença e Serviços do Jogo e assumo solenemente os seguintes compromissos legais:

Natureza puramente sem fins lucrativos: Este servidor manterá natureza estritamente não lucrativa.
Apenas doações gratuitas são permitidas: Este servidor aceitará apenas doações voluntárias, gratuitas e sem qualquer contrapartida, feitas por jogadores que apoiam a comunidade. Todos os valores recebidos poderão ser usados somente para cobrir custos diretos de hospedagem física, como aluguel de hardware, largura de banda e proteção contra DDoS.
É proibida a venda de ativos e atributos do jogo: Este servidor jamais venderá, direta, indiretamente ou de forma disfarçada, criaturas ou dinossauros virtuais, dados de personagem, níveis, bônus de atributos, armas, equipamentos, materiais de construção, moedas do jogo ou qualquer item virtual que afete o equilíbrio do jogo.
É proibida a troca disfarçada por privilégios: Este servidor jamais usará modalidades como sorteio para patrocinadores, brindes por doação, personagens ou criaturas personalizados pagos, ou taxas pagas para entrar no servidor ou na comunidade como condição de troca por itens virtuais ou privilégios no jogo.
Mecanismos de aposta são proibidos: Nem este servidor nem suas comunidades associadas, como grupos de QQ ou servidores de Discord, criarão caixas-surpresa, sorteios, roletas ou mecanismos de cashback com natureza de jogo de azar envolvendo bens virtuais do jogo.
III. Isolamento de privacidade e ciência de segurança
Estou ciente e concordo que a coleta oficial do IP deste servidor e a geração de um TOKEN são necessárias para segurança antitrapaça e cumprimento contratual, e que esse tratamento de dados está em conformidade com as normas de privacidade.
Comprometo-me a guardar adequadamente o TOKEN de autorização emitido e jamais transferi-lo, alugá-lo ou divulgá-lo a terceiros sob qualquer forma. Assumo total responsabilidade por violações decorrentes de má gestão do TOKEN ou da configuração de IP.
Declaro compreender que o envio deste e-mail de solicitação de servidor à equipe oficial constitui minha assinatura digital e minha aceitação incondicional de todos os termos legais do Contrato de Licença e Serviços do Jogo. Se eu violar qualquer uma das regras acima, a equipe oficial poderá revogar o TOKEN de autorização, colocar o IP em uma lista negra e aplicar banimento de conta em toda a plataforma e bloqueio do dispositivo sem aviso prévio.

2. Instalando Docker e Docker Compose

2.1 Instalando o Docker

Se você estiver usando um servidor em nuvem com um serviço de contêiner Docker pré-instalado, ou se o Docker já estiver instalado e funcionando no seu sistema, você pode pular esta seção e continuar para o próximo passo.

Execute o seguinte comando para baixar e instalar o Docker (funciona na maioria das distribuições Linux):

Bash
curl -fsSL https://get.docker.com | bash

Após a instalação, inicie o Docker e configure-o para iniciar automaticamente com o sistema:

Bash
systemctl start docker
systemctl enable docker

Verifique a instalação:

Bash
docker --version

2.2 Instalando o Docker Compose

As instalações modernas do Docker geralmente incluem o plugin docker compose. Caso contrário, instale o binário independente docker-compose. Este tutorial usa docker-compose em todos os comandos. Se o seu sistema só suporta o plugin, substitua por docker compose.

Método 1: Verificar o plugin integrado

Bash
docker compose version

Método 2: Instalar o binário independente

Bash
curl -L "https://github.com/docker/compose/releases/latest/download/docker-compose-$(uname -s)-$(uname -m)" -o /usr/local/bin/docker-compose
chmod +x /usr/local/bin/docker-compose
docker-compose --version

3. Criando o diretório do servidor e os arquivos de configuração

3.1 Usando o diretório padrão após o login

Este tutorial pressupõe o uso do diretório padrão após o login para armazenar docker-compose.yml e .env. Não é necessário criar uma pasta de projeto adicional. Se você fizer login como root, esse diretório normalmente é /root.

Após o login, seus dois arquivos de configuração ficam lado a lado no diretório inicial (por exemplo, ao entrar como root, esse diretório é /root):

Text
/root/
├── docker-compose.yml   ← Configuração do Docker Compose
└── .env                  ← Variáveis de ambiente (configurações do servidor)

3.2 Criando o arquivo de variáveis de ambiente .env

O arquivo .env armazena os parâmetros do servidor. Use o editor padrão do sistema vi para criá-lo:

Bash
vi .env

No arquivo aberto, veja abaixo duas configurações completas e prontas para uso. Escolha a que corresponde ao modo desejado, cole-a e preencha GAME_TOKEN (para um servidor público, defina também GAME_IP com seu IP público real):

Servidor em modo sandbox

INI
# TOKEN de autorização do jogo (solicite à equipe oficial; obrigatório para servidores públicos)
GAME_TOKEN=
# Nome do servidor
GAME_NAME=The Sandbox
# IP público (127.0.0.1 serve apenas para teste local; use seu IP público real para que outros se conectem)
GAME_IP=203.0.113.10
# Porta do servidor (UDP)
GAME_PORT=26666

# Tempo até o cadáver desaparecer (segundos)
GAME_DEAD_TIME=600
# Quantidade de crias: 0 = desativado, 1 = uma, 2 = duas, e assim por diante
GAME_CHILD=1

# Ativar o modo sandbox
GAME_MODE_SANDBOX=true

# Registrar na lista global de servidores
GAME_GLOBAL=true
# Número máximo de jogadores
GAME_MAX_PLAYERS=50
# Nó do servidor (apenas dica de região para os jogadores; sem efeito funcional)
GAME_NODE=AS
# Servidor público
GAME_PUBLIC=true

# Permitir proficiência genética
GAME_GENE_SKILLFUL=true
# Permitir ganhar proficiência ao matar
GAME_KILL_SKILLFUL=true
# Permitir o aprendizado de genes
GAME_LEARN=true
# Dificuldade do jogo (quanto maior, mais difícil)
GAME_HARD=1
# Sem ovos de evolução (os ovos sempre permanecem na espécie atual)
GAME_EVOL=false

# Nome do mapa
GAME_MAP=Oasis
# Permitir companheiro de IA
GAME_AI_MATE=true

Servidor em modo evolução

INI
# TOKEN de autorização do jogo (solicite à equipe oficial; obrigatório para servidores públicos)
GAME_TOKEN=
# Nome do servidor
GAME_NAME=The Evolution
# IP público (127.0.0.1 serve apenas para teste local; use seu IP público real para que outros se conectem)
GAME_IP=203.0.113.10
# Porta do servidor (UDP)
GAME_PORT=26666

# Tempo até o cadáver desaparecer (segundos)
GAME_DEAD_TIME=1200
# Quantidade de crias: 0 = desativado, 1 = uma, 2 = duas, e assim por diante
GAME_CHILD=1

# Ativar o modo evolução
GAME_MODE_EVOL=true
# Permitir que os ovos contenham ovos de evolução (NÃO é o interruptor do modo evolução)
GAME_EVOL=true
# Ativar o modo primeval
GAME_MODE_PRIMEVAL=true

# Registrar na lista global de servidores
GAME_GLOBAL=true
# Número máximo de jogadores
GAME_MAX_PLAYERS=50
# Nó do servidor (apenas dica de região para os jogadores; sem efeito funcional)
GAME_NODE=AS
# Servidor público
GAME_PUBLIC=true

# Dificuldade do jogo (quanto maior, mais difícil)
GAME_HARD=0
# Permitir companheiro de IA
GAME_AI_MATE=true

Para salvar e sair: pressione i para entrar no modo de edição. Após editar, pressione Esc, digite :wq e pressione Enter. Para ver a lista completa de parâmetros, consulte o Manual de Configuração do Servidor de Jogo. Para parâmetros de ativação, basta escrever o nome da variável e atribuir qualquer valor (como 1) para ativá-la.

💡 Dica: Use o botão Baixar nos blocos de código acima para salvá-los como arquivo. Os arquivos .env baixados têm o nome sandbox.env ou evolution.env — renomeie para .env antes de implantar.

3.3 Criando o arquivo docker-compose.yml

Bash
vi docker-compose.yml
YAML
services:
  # Aplicação do jogo
  gameserv:
    image: hkccr.ccs.tencentyun.com/mesozoicdawn/gameserver:latest
    container_name: gameserv
    # Arquivo de ambiente (se você o renomeou, ex. sandbox.env, altere o nome abaixo)
    env_file:
      - .env
    volumes:
      - /data/Database:/app/GameServ_Data/Database
      - /data/Mods:/app/GameServ_Data/StreamingAssets/Mods
      - /data/Logs:/app/GameServ_Data/Logs
      # Montar o fuso horário do host
      - /etc/localtime:/etc/localtime:ro
      # Sinais de notificação de atualização do Watchtower
      - /data/Signals:/app/GameServ_Data/Signals
      - /data/Signals:/signals
    environment:
      - GAME_AUTO_RESTART=1
      - TZ=Asia/Shanghai

    labels:
      - "com.centurylinklabs.watchtower.scope=gameserv"
      - "com.centurylinklabs.watchtower.enable=true"
      # Notificar o servidor do jogo para salvar antes da atualização
      - "com.centurylinklabs.watchtower.lifecycle.pre-update=/usr/local/bin/watchtower-pre-update gameserv"
      - "com.centurylinklabs.watchtower.lifecycle.pre-update-timeout=2"

    restart: unless-stopped
    stop_grace_period: 60s

    healthcheck:
      test: ["CMD-SHELL", "pgrep -f GameServ.x86_64 || exit 1"]
      interval: 50s
      timeout: 5s
      retries: 3
      start_period: 60s

    # Modo host (reduz a latência)
    network_mode: host

    deploy:
      resources:
        limits:
          cpus: '1.8'
          memory: 3800M

  # Watchtower — atualização automática
  watchtower:
    image: containrrr/watchtower
    container_name: watchtower
    volumes:
      - /var/run/docker.sock:/var/run/docker.sock
    environment:
      # Docker 26+ exige uma versão de API explícita
      - DOCKER_API_VERSION=1.40
      - WATCHTOWER_POLL_INTERVAL=300
      - WATCHTOWER_CLEANUP=true
      - WATCHTOWER_LABEL_ENABLE=true
      - WATCHTOWER_TIMEOUT=120s

    command:
      - "--label-enable"
      - "--scope"
      - "gameserv"
      - "--cleanup"
      # Ativar hooks de ciclo de vida
      - "--enable-lifecycle-hooks"

    restart: unless-stopped

    deploy:
      resources:
        limits:
          cpus: '0.2'
          memory: 128M
  • network_mode: host significa que o contêiner usa a rede do host diretamente, portanto a GAME_PORT no .env deve corresponder à porta liberada no firewall.
  • Os diretórios de dados (/data/Database, /data/Mods, /data/Logs e /data/Signals) são persistidos no host. O Docker os criará automaticamente — não é necessário criá-los manualmente.
  • deploy.resources.limits.memory: 3800M limita o servidor de jogo a cerca de 3,8 GB de memória, e cpus: '1.8' limita a 1,8 núcleos de CPU. Ajuste esses valores em deploy.resources.limits de acordo com o hardware do seu servidor.

3.4 Criando os diretórios de dados (opcional)

Embora o Docker crie automaticamente os diretórios vinculados, criá-los manualmente pode ajudar a verificar as permissões antecipadamente:

Bash
mkdir -p /data/Database /data/Mods /data/Logs

4. Iniciando o servidor

Certifique-se de que está no diretório que contém docker-compose.yml e .env e execute o comando. Seguindo o fluxo padrão deste tutorial, execute diretamente no diretório de login. Se você fez login como root, normalmente é /root.

Bash
docker-compose up -d
  • O parâmetro -d executa o contêiner em segundo plano.
  • A primeira execução baixará a imagem do servidor de jogo do registro — aguarde pacientemente.
  • Use docker-compose logs -f para visualizar os logs em tempo real. Pressione Ctrl+C para sair da visualização sem parar o contêiner.

Se tudo estiver configurado corretamente, o servidor terminará de iniciar e se registrará no lobby oficial (desde que GAME_PUBLIC e GAME_TOKEN válidos estejam configurados).

5. Liberando portas no firewall

Para permitir que outros jogadores se conectem, libere a porta UDP correspondente à GAME_PORT definida no .env (padrão 26666).

  • Se estiver usando um servidor em nuvem, adicione uma regra de liberação de porta UDP no grupo de segurança.
  • Se o servidor tiver um firewall de sistema ativado (ex.: ufw), execute o seguinte comando:
Bash
ufw allow 26666/udp

6. Comandos de gerenciamento diário

OperaçãoComando
Iniciar servidordocker-compose up -d
Parar servidordocker-compose down
Reiniciar servidordocker-compose restart
Visualizar logsdocker-compose logs -f --tail=100
Atualizar imagem e reiniciardocker-compose pull depois docker-compose up -d
Entrar no shell do contêinerdocker exec -it gameserv bash
  • Ao parar o servidor, o Docker reserva 60 segundos para salvar os dados. Não force o kill.
  • O contêiner watchtower monitora automaticamente as atualizações da imagem e baixa novas versões com reinicialização em intervalos de 5 minutos.

7. Como modificar a configuração

  1. Execute cd ~ e use vi .env para abrir o arquivo de configuração.
  2. Após salvar, execute docker-compose down e depois docker-compose up -d para recarregar as variáveis de ambiente.

Você deve executar down primeiro e depois up. Um restart direto pode não recarregar as novas variáveis de ambiente.

8. Problemas comuns

8.1 O servidor iniciou mas não aparece no lobby?

  • Verifique se o GAME_TOKEN no .env está preenchido corretamente e se você o solicitou à equipe oficial.
  • Verifique se GAME_PUBLIC=1 está definido.
  • Verifique se o IP público do servidor corresponde ao GAME_IP. Use curl ifconfig.me para verificar.
  • Verifique se o firewall e o grupo de segurança liberaram a porta UDP.
  • Visualize os logs: docker-compose logs -f gameserv.

8.2 Porta já está em uso?

Altere GAME_PORT no .env para outra porta e atualize as regras do firewall de acordo.

8.3 O contêiner está saindo por falta de memória?

  • Ajuste mem_limit no docker-compose.yml.
  • Reduza parâmetros de alto consumo, como GAME_MAX_PLAYERS.

8.4 Como instalar MODs?

Coloque os arquivos MOD no diretório /data/Mods do host, adicione GAME_MODS=NomeMod1,NomeMod2 ao .env e reinicie o servidor.

8.5 Como fazer backup dos dados?

Faça backup do diretório /data/Database do host. Ele contém personagens dos jogadores, ninhos, ovos e outros dados. Recomendamos compactá-lo periodicamente e enviá-lo para armazenamento em nuvem.

9. Obtendo ajuda

  • Consulte a referência completa de parâmetros: Manual de Configuração do Servidor de Jogo.
  • Participe da comunidade oficial no Discord ou grupo QQ para obter o endereço mais recente do registro de imagem e instruções de solicitação de TOKEN.