Pular para conteúdo

Deploy

Guia passo-a-passo para atualizar cada componente em produção.

1. EA (MQL5)

Toda mudança em ea/ML_Sensorial_Scanner.mq5 na mesma resposta exige:

1.1 Bump da versão (3 lugares)

//| v2.27 — único EA...                            // cabeçalho linha ~3
#property version "2.27"                            // linha ~18
#define EA_VERSION "2.27"                           // linha ~91

Os três têm que bater.

1.2 Compilar

& "C:\Program Files\MetaTrader 5 - Demonstração\metaeditor64.exe" `
    /compile:"C:\Users\henri\Documents\PROJETOS\ML-Forex\ea\ML_Sensorial_Scanner.mq5" /log

Conferir log:

Get-Content "C:\Users\henri\Documents\PROJETOS\ML-Forex\ea\ML_Sensorial_Scanner.log" `
  | Select-String -Pattern "errors|warnings|Result"

Exigência: 0 errors, 0 warnings. Se warning vir, corrige antes de publicar.

1.3 Publicar local

Copy-Item "C:\Users\henri\Documents\PROJETOS\ML-Forex\ea\ML_Sensorial_Scanner.ex5" `
          "C:\Users\henri\Documents\PROJETOS\ML-Forex\app\api\static\downloads\ML_Sensorial_Scanner.ex5" -Force

1.4 Publicar VPS

scp -i ~/.ssh/id_ed25519 \
  "C:\Users\henri\Documents\PROJETOS\ML-Forex\ea\ML_Sensorial_Scanner.ex5" \
  henrique@10.8.0.1:/tmp/ML_Sensorial_Scanner.ex5

ssh -i ~/.ssh/id_ed25519 henrique@10.8.0.1 \
  "sudo docker cp /tmp/ML_Sensorial_Scanner.ex5 forex_api:/app/api/static/downloads/"

1.5 Notificar assinantes (se mudança comportamental)

🆕 Nova versão do EA disponível: v2.27

Mudanças:
- ...
- ...

Para atualizar:
1. Baixar em https://quantfx.com.br/minha-conta
2. Substituir .ex5 em MQL5/Experts/
3. Reabrir o MT5

A versão antiga continua funcionando, mas perde melhorias.

2. API Python

docker compose restart api NÃO carrega novo código — o Dockerfile.api usa COPY, não volume mount.

2.1 Local (dev)

cd C:\Users\henri\Documents\PROJETOS\ML-Forex
docker compose up -d --build api

2.2 VPS (produção)

Atualmente é local-first: você desenvolve no PC, testa, depois sobe pra VPS via git pull.

ssh henrique@10.8.0.1
cd /opt/quantfx
sudo git pull origin main
sudo docker compose -f docker-compose.vps.yml up -d --build api

Tempo total: ~2-3 min (build + restart).

Smoke test pós-deploy:

curl -s https://api.quantfx.com.br/api/health | jq .
# Esperado: {"status":"ok","db":"ok",...}

2.3 Rollback

ssh henrique@10.8.0.1
cd /opt/quantfx
sudo git log --oneline -10
sudo git checkout <commit_anterior>
sudo docker compose -f docker-compose.vps.yml up -d --build api

3. Worker

Mesmo princípio: mudou scripts/run_worker.py ou app/models/*?

cd C:\Users\henri\Documents\PROJETOS\ML-Forex
docker compose up -d --build worker
docker logs forex_worker --tail 30 --follow

Conferir que está fazendo as predições novas (procurar por [predict] e timestamp recente).


4. Modelos novos (.pkl + .meta.json)

# Sync arquivos novos pra VPS (.pkl ficam em volume host)
scp -i ~/.ssh/id_ed25519 \
  "C:\Users\henri\Documents\PROJETOS\ML-Forex\models\lgbm_*_v*.pkl" \
  henrique@10.8.0.1:/tmp/

scp -i ~/.ssh/id_ed25519 \
  "C:\Users\henri\Documents\PROJETOS\ML-Forex\models\lgbm_*_v*.meta.json" \
  henrique@10.8.0.1:/tmp/

ssh -i ~/.ssh/id_ed25519 henrique@10.8.0.1 \
  "sudo cp /tmp/lgbm_*.pkl /tmp/lgbm_*.meta.json /opt/quantfx/models/"

# Restart API para forçar re-read dos meta.json
ssh -i ~/.ssh/id_ed25519 henrique@10.8.0.1 \
  "cd /opt/quantfx && sudo docker compose -f docker-compose.vps.yml restart api"

Validação:

curl -s https://api.quantfx.com.br/api/models \
  -H "X-API-Key: $API_KEY" | jq '.count'

5. Config (model.yaml)

Mudou quality gates? Re-screening obrigatório:

cd C:\Users\henri\Documents\PROJETOS\ML-Forex
.venv\Scripts\python.exe scripts\rescreen_champions.py --dry-run
# Verifica quantos modelos seriam demotidos. Se OK:
.venv\Scripts\python.exe scripts\rescreen_champions.py --apply

Sync meta.json demotidos pra VPS (mesmo procedimento da seção 4).


Checklist de deploy

Antes de aceitar PR pra main:

  • EA bumped 3 lugares + compilado 0 warnings + copiado pra static/downloads
  • API: testes locais passam
  • Worker: log mostra predições funcionando após rebuild
  • Smoke test produção: curl /api/health retorna ok
  • /api/account/me autenticado retorna dados corretos
  • /api/scan retorna sinais (não vazio)
  • Telegram canal recebe próximo confluência sem erro
  • MATURITY_ANALYSIS.md atualizado se feature ou métrica mudou