Ambiente Local¶
Arquitetura local vs produção¶
flowchart LR
subgraph Local["💻 PC Local (dev)"]
Worker[worker container]
Redis[redis container]
MLflow[mlflow container]
VS[VS Code]
end
subgraph VPS["🌐 VPS Produção"]
API[api container]
DB[(postgres)]
Grafana[grafana]
end
Worker -->|WireGuard tunnel<br/>10.8.0.1:5432| DB
Worker -->|local| Redis
Worker -->|local file| MLflow
VS -->|edit| Worker
Por que worker no PC local:
- MetaTrader 5 só roda em Windows
- Worker faz collect via MT5 terminal (não tem como ser headless)
- Compute pesado de retrain fica no PC sem onerar VPS
Por que API na VPS:
- Disponibilidade 24/7
- Cloudflare + HTTPS
- IP estático para webhooks Eduzz
Stack local (Docker Compose)¶
docker-compose.yml na raiz:
services:
redis: # local cache + rate limit
mlflow: # tracking de experiments
worker: # collector + ML predict loop
# DB e API rodam na VPS, conectados via WireGuard
WireGuard setup¶
1. Receber config da VPS¶
VPS admin (você) gera config do peer:
Adiciona em /etc/wireguard/wg0.conf:
Gera wg0-client.conf para o PC:
[Interface]
PrivateKey = <privatekey_do_pc>
Address = 10.8.0.2/24
DNS = 10.8.0.1
[Peer]
PublicKey = <publickey_vps>
Endpoint = <ip_publico_vps>:51820
AllowedIPs = 10.8.0.0/24
PersistentKeepalive = 25
2. Importar no PC¶
Abrir WireGuard → "Adicionar túnel" → escolher wg0-client.conf.
3. Ativar¶
Clicar em "Ativar" no painel WireGuard.
Testar:
4. Acessar DB remoto¶
VS Code / editor¶
.vscode/settings.json (recomendado):
{
"python.defaultInterpreterPath": ".venv\\Scripts\\python.exe",
"python.analysis.typeCheckingMode": "basic",
"editor.formatOnSave": true,
"[python]": {
"editor.defaultFormatter": "ms-python.black-formatter",
"editor.rulers": [100]
}
}
Extensions úteis:
- Python (ms-python.python)
- Pylance
- Black Formatter
- Docker
- YAML
- SQLTools + PostgreSQL driver
Rodando testes¶
Cobertura atual: ~27 testes, sem E2E.
Rebuild ciclos¶
| Mudou | Comando | Tempo |
|---|---|---|
app/*.py |
docker compose up -d --build worker api |
2-3 min |
requirements.txt |
docker compose up -d --build --no-cache worker |
5-8 min |
docker-compose.yml |
docker compose down && docker compose up -d |
30s |
ea/*.mq5 |
Compilar via MetaEditor (passo manual) | 10s |
docs/*.md |
mkdocs serve (live reload) |
instant |
Frontend *.html |
refresh do browser | instant |
Logs¶
# Stream em tempo real
docker logs forex_worker --follow
# Últimas 100 linhas
docker logs forex_worker --tail 100
# Filtrar
docker logs forex_worker --tail 500 | Select-String -Pattern "ERROR|predict"
# Salvar em arquivo
docker logs forex_worker --tail 1000 > worker.log
Variáveis de ambiente importantes¶
# Dev mode
LOG_LEVEL=DEBUG # mais verboso
DEBUG=true # FastAPI debug page
DISABLE_RATE_LIMIT=true # desliga rate limit para dev
# Override de TFs em treino (testes rápidos)
TRAIN_TFS=H1 # só treina H1
TRAIN_SYMBOLS=EURUSD # só EURUSD
# Force model promotion (skip gates)
FORCE_PROMOTE=true # bypass de quality gates (DANGER em prod)