Como gerenciar o versionamento de configurações do servidor de MU Online
Estruture um sistema de versionamento para as configurações do seu servidor de MU Online usando Git, convenções de branch e changelog — para reverter mudanças com segurança e coordenar a equipe sem sobrescrever trabalho alheio.
Configurações de servidor de MU Online mudam o tempo todo: taxas de drop, cooldown de skills, eventos sazonais, itens novos, balanceamento de classes. Sem um sistema de versionamento, cada alteração é um risco silencioso — um arquivo editado errado, sem backup recente, pode derrubar o servidor ou qu
Configurações de servidor de MU Online mudam o tempo todo: taxas de drop, cooldown de skills, eventos sazonais, itens novos, balanceamento de classes. Sem um sistema de versionamento, cada alteração é um risco silencioso — um arquivo editado errado, sem backup recente, pode derrubar o servidor ou quebrar a economia sem que ninguém saiba exatamente o que mudou ou como reverter. Este tutorial mostra como estruturar o versionamento das configurações do seu servidor usando Git, convenções de commit e branch, e um fluxo de changelog que permite à equipe trabalhar em paralelo sem pisar no trabalho um do outro.
Por que versionar configurações de servidor
Um servidor de MU típico tem dezenas de arquivos de configuração espalhados (drop rates, skills, eventos, itens, NPCs, spawns) e frequentemente mais de uma pessoa mexendo neles — o dono, um GM de eventos, um desenvolvedor de scripts. Sem versionamento, a única forma de saber "o que mudou desde ontem" é comparar arquivos manualmente ou confiar na memória de quem editou. Com Git, cada mudança fica registrada com autor, data, motivo (mensagem de commit) e diff exato — e reverter uma mudança problemática vira questão de segundos, não de reconstruir tudo do zero a partir de um backup antigo.
O que versionar e o que não versionar
| Tipo de arquivo | Versionar em Git? | Motivo |
|---|---|---|
| Configurações de drop, skills, itens (.txt/.ini/.xml) | Sim | Texto puro, muda com frequência, precisa de histórico |
| Scripts de eventos (Lua, JS, etc.) | Sim | Código, se beneficia diretamente de controle de versão |
| Banco de dados (contas, personagens, itens em jogo) | Não | Muda a cada segundo em produção, não cabe em diffs de texto |
| Arquivos binários grandes (client, BMD, texturas) | Não (ou Git LFS) | Tamanho e frequência de mudança inviabilizam Git puro |
| Segredos (senhas de banco, chaves de API, tokens) | Não (nunca em texto puro) | Vazamento de segurança; use variáveis de ambiente ou secrets manager |
Passo 1 — Estruturar o repositório de configurações
Crie um repositório dedicado (separado do código do emulador, se possível) só para as configurações que sua equipe edita com frequência. Uma estrutura de pastas típica:
mu-config/
├── gameserver/
│ ├── drop-rates.ini
│ ├── skill-cooldown.txt
│ └── item-list.xml
├── events/
│ ├── devil-square.ini
│ └── blood-castle.ini
├── changelog/
│ └── CHANGELOG.md
└── README.md
Passo 2 — Inicializar o Git e definir o .gitignore
cd mu-config
git init
git add .
git commit -m "Configuração inicial versionada"
No .gitignore, exclua qualquer arquivo que contenha segredos ou dados voláteis:
*.log
*password*
*secret*
database-credentials.ini
Passo 3 — Definir convenção de mensagens de commit
Uma convenção simples evita mensagens vagas como "ajustes" ou "fix". Sugestão de padrão:
| Prefixo | Uso | Exemplo |
|---|---|---|
feat: | Nova configuração/sistema | feat: adiciona configuração de sockets nível 5 |
fix: | Correção de bug de configuração | fix: corrige cooldown do stun do Dark Knight |
balance: | Ajuste de balanceamento | balance: reduz drop rate de Excellent em 15% |
event: | Configuração de evento sazonal | event: ativa taxas dobradas para Devil Square de julho |
revert: | Reversão de mudança anterior | revert: volta cooldown do Berserker ao valor anterior |
Passo 4 — Estratégia de branches
Para servidores com equipe (mais de uma pessoa editando configuração), uma estratégia de branch simples funciona melhor que complexidade desnecessária:
main— configuração estável, é o que está rodando em produção agora.staging— mudanças testadas em servidor de teste, aguardando aprovação para ir a produção.feature/nome-da-mudança— branches curtas para uma mudança específica (ex.:feature/novo-evento-halloween).
O fluxo: cria a branch de feature, edita e testa em ambiente de teste, abre um merge/pull request para staging, valida, e só então faz merge para main e aplica no servidor de produção.
Passo 5 — Automatizar o deploy da configuração
Depois que uma mudança é aprovada em main, o ideal é ter um script (ou pipeline de CI simples) que copia os arquivos versionados para o diretório real do GameServer e reinicia o serviço afetado, evitando cópia manual sujeita a erro:
#!/bin/bash
# deploy-config.sh
git pull origin main
cp gameserver/*.ini /srv/muserver/Data/
cp gameserver/*.txt /srv/muserver/Data/
systemctl restart muserver-gameserver
echo "Configuração implantada: $(git rev-parse --short HEAD)"
Passo 6 — Manter um changelog legível para a comunidade
Além do histórico técnico do Git, mantenha um CHANGELOG.md com linguagem voltada ao jogador, para publicar nas redes sociais e no site do servidor:
## [2024-06-10]
- Reduzida a taxa de drop de itens Excellent em 15% (balanceamento de economia).
- Corrigido cooldown do Stun do Dark Knight (estava 3s abaixo do configurado).
- Adicionado evento especial de fim de semana com taxas dobradas.
Passo 7 — Revertendo uma mudança problemática
Se uma configuração publicada quebrar algo (economia, balanceamento, ou até o boot do servidor), o Git permite reverter rapidamente:
git log --oneline -- gameserver/drop-rates.ini
git revert <hash-do-commit-problemático>
./deploy-config.sh
Isso restaura o arquivo ao estado anterior sem perder o histórico da tentativa (o commit de reversão fica registrado, explicando o motivo).
Passo 8 — Controlar acesso e permissões da equipe
Nem todo GM ou colaborador deve ter permissão de merge direto em main. Use permissões de branch protegida (disponíveis em GitHub, GitLab e Gitea) exigindo revisão de pelo menos uma outra pessoa antes de qualquer merge para produção — isso evita que uma mudança de balanceamento mal calculada vá ao ar sem segundo olhar.
Erros comuns e soluções
| Sintoma | Causa provável | Solução |
|---|---|---|
| Ninguém sabe o que mudou na última semana | Sem versionamento ou commits vagos | Adote convenção de commit e changelog obrigatório |
| Segredo (senha de banco) vazou no repositório | Arquivo de credenciais commitado por engano | Remova do histórico com git filter-repo, rotacione a senha imediatamente |
| Deploy aplicou configuração errada | Deploy manual sem confirmar branch/commit | Automatize o deploy e sempre confira o hash antes de aplicar |
| Dois GMs sobrescreveram a configuração um do outro | Edição direta sem branch/PR | Exija branch e revisão antes de merge para main |
| Reversão não resolveu o problema | Mudança problemática estava em mais de um arquivo | Revise o diff completo do commit, não só o arquivo suspeito |
Checklist de versionamento de configurações
- Repositório Git dedicado às configurações criado.
.gitignoreconfigurado para excluir segredos e logs.- Convenção de mensagens de commit definida e documentada.
- Estratégia de branches (main/staging/feature) adotada pela equipe.
- Script de deploy automatizado testado.
- Changelog legível mantido para a comunidade.
- Branch de produção protegida com exigência de revisão.
- Processo de reversão testado ao menos uma vez em ambiente de teste.
Com o versionamento estruturado, sua equipe ganha confiança para testar mudanças de balanceamento sem medo de quebrar produção de forma irreversível. Se você ainda está definindo a infraestrutura básica do servidor, veja o tutorial de criação de servidor de MU Online antes de aplicar esse fluxo de versionamento.
Perguntas frequentes
Preciso saber Git avançado para versionar configurações do servidor?
Não. O uso básico (add, commit, push, branch, revert) já resolve 90% das necessidades de um servidor de MU. Comandos avançados como rebase interativo raramente são necessários para esse tipo de projeto.
Devo versionar o banco de dados junto com os arquivos de configuração?
Não diretamente. Bancos de dados mudam constantemente com o jogo em produção (contas, personagens, itens) e não cabem bem em Git. Versione apenas os arquivos de configuração estáticos e mantenha backups separados e programados do banco.
Como reverto uma configuração que quebrou o servidor?
Se você versionou com Git, basta usar 'git revert' ou fazer checkout do commit anterior estável naquele arquivo específico, reiniciar o serviço afetado e confirmar a normalização. Sem versionamento, você depende de backups manuais, que costumam estar desatualizados.
Onde devo hospedar o repositório de configurações — GitHub público, privado ou self-hosted?
Sempre em repositório privado, seja no GitHub, GitLab ou um Gitea self-hosted. Arquivos de configuração de servidor de MU costumam conter informações sensíveis (senhas de banco, chaves, IPs) que nunca devem ficar públicas.
Vale a pena usar branches separadas para cada evento ou temporada?
Sim, principalmente se você faz testes de balanceamento sazonais. Uma branch por temporada/evento permite testar mudanças isoladas e só fazer merge para a branch principal quando aprovado, sem arriscar a configuração estável em produção.