halk-patch-server
Servidor de patch do launcher do MHF. É responsável por entregar os arquivos de atualização do jogo para os jogadores quando o launcher inicializa.
Escrito em Rust, exposto externamente via um nginx que atua como proxy reverso e serve arquivos diretamente do PVC usando X-Accel-Redirect. Substitui o gogomoa-patch-server, que era a implementação anterior em PHP.
Como funciona
Quando o launcher abre, ele faz login no sign server (kelbi-sign-server). O sign server autentica o usuário e retorna a URL do patch server que o launcher deve usar para baixar atualizações.
Portas
O binário Rust sobe três servidores ao inicializar:
| Porta | Função |
|---|---|
4000 | Provider de release — servido pelo nginx como release.halk-en.arcamh.com |
4001 | Provider de pre-release — servido pelo nginx como pre-release.halk-en.arcamh.com |
5000 | API administrativa (interna, protegida por API key) |
URLs de patch server
O sign server decide qual URL retornar com base na coluna patch_server_url da tabela users e no idioma do usuário (language):
patch_server_url preenchida → usa esse valor (para qualquer idioma)
patch_server_url null + language = JP → PatchServers.Jp (config)
patch_server_url null + language = EN → PatchServers.En (config)
O sign server envia duas URLs na resposta de login: PatchServerManifest e PatchServerFile. Quando patch_server_url está preenchida, ambas recebem o mesmo valor.
Isso permite que usuários específicos apontem para o pre-release sem afetar os demais jogadores.
Estrutura de dados
O PVC (halk-en-patch-data) é montado em /app/data tanto no halk-patch-server quanto no nginx (read-only). Estrutura:
data/
base/ # arquivos base imutáveis (chk.txt)
release/ # versão atual servida para todos
key.txt
mhfdat/
pre-release/ # versão em teste para devs
key.txt
mhfdat/
versions/ # histórico de versões lançadas
1/
2/
temp/ # arquivos temporários durante upload
server_state.json
Ciclo de release
upload arquivos → data/pre-release/
↓
POST /launch
↓
pre-release → data/versions/{N}/ (backup)
pre-release → data/release/ (ativo)
↓
launcher recebe nova versão
Em caso de falha no launch, o rollback restaura automaticamente a versão anterior a partir de data/versions/.
Ambientes
Existem duas instâncias independentes em produção:
| Instância | Domínio | PVC |
|---|---|---|
halk-en | halk-en.arcamh.com | halk-en-patch-data |
halk-jp | halk-jp.arcamh.com | halk-jp-patch-data |
Cada instância tem seu próprio par halk-*-api (Rust) + halk-*-cdn (nginx).
Pre-release para devs
Para que um dev utilize o pre-release, um administrador preenche o campo patch_server_url do usuário no Kelbi Admin com pre-release.halk-en.arcamh.com. Enquanto o campo estiver vazio, o launcher recebe a URL padrão definida na config do erupe para o idioma do usuário.
API administrativa
A API (porta 5000) é protegida por API key e usada pelo Kelbi Admin para gerenciar o ciclo de release:
| Endpoint | Descrição |
|---|---|
POST /launch | Promove o pre-release para release e cria backup versionado |
POST /set/:version | Restaura uma versão específica do histórico |
GET /health | Health check |