mirror of
https://github.com/melgarafael/DeskcommCRM.git
synced 2026-10-02 01:28:34 +08:00
O #733 (@satomiflavio) resolve um problema real e genérico: numa VPS com Nginx Proxy Manager na frente, recriar o contêiner do app derrubava o roteamento, porque a rede tinha sido plugada à mão com `docker network connect`. O `docker-compose.npm.yml` que ele traz resolve isso e é autocontido — declara a própria rede externa e não depende de nada fora dele. O que sai aqui é só o efeito colateral: o mesmo PR acrescentava `proxy_network: external: true` ao `docker-compose.yml`, que é o compose de DESENVOLVIMENTO — o que o CLAUDE.md manda rodar em 'Como rodar local'. Medido: `git show origin/main:docker-compose.yml | grep networks` devolve vazio hoje. Com a rede externa declarada ali, todo dev que não tenha uma rede chamada `proxy_network` recebe 'network proxy_network declared as external, but could not be found' no `docker compose up -d` — e nenhum gate pega, porque o `test:shell` exercita o `hostgator-setup-kit/` e o CI nunca sobe esse compose. A intenção do autor sobrevive inteira: o overlay do NPM continua como ele escreveu. Quem precisar publicar o WAHA e o worker pelo mesmo proxy faz isso num overlay, como o app já faz. Co-authored-by: satomiflavio <satomiflavio@users.noreply.github.com>
90 lines
3.8 KiB
YAML
90 lines
3.8 KiB
YAML
# Stack local de dependências externas para o DeskcommCRM.
|
|
#
|
|
# Sobe apenas o WAHA (Plus / NOWEB) pra desenvolvimento. Postgres + Auth + Storage
|
|
# vêm do Supabase Cloud (ou supabase local CLI separadamente, conforme o time preferir).
|
|
#
|
|
# Uso:
|
|
# 1. Copie .env.example -> .env.local e preencha WAHA_API_KEY (plaintext)
|
|
# 2. Gere o hash: echo -n "$WAHA_API_KEY" | shasum -a 512 | awk '{print $1}'
|
|
# 3. Cole esse hash em WAHA_API_KEY abaixo (NÃO o plaintext)
|
|
# 4. docker compose up -d
|
|
# 5. Acesse http://localhost:3030/dashboard/ (UI do WAHA Plus)
|
|
# (host port 3030 — :3000 fica reservado pra outros dev tools como Remotion)
|
|
#
|
|
# Em prod, WAHA roda em VPS dedicada (Hostgator) atrás de Nginx (proxy_buffering off
|
|
# pra SSE). docker-compose aqui é DEV ONLY.
|
|
|
|
version: "3.9"
|
|
|
|
services:
|
|
waha:
|
|
image: devlikeapro/waha:noweb
|
|
platform: linux/amd64
|
|
container_name: deskcomm-waha
|
|
restart: unless-stopped
|
|
ports:
|
|
- "3030:3000"
|
|
environment:
|
|
# Hash SHA512 hex da api key (NÃO plaintext). Cliente envia plaintext em X-Api-Key.
|
|
WAHA_API_KEY: ${WAHA_API_KEY_SHA512}
|
|
# Webhook base URL — precisa ser pública (use ngrok/cloudflared em dev).
|
|
# host.docker.internal: o app Next roda no HOST em dev — localhost dentro do
|
|
# container seria o próprio WAHA e o webhook nunca chegaria. Porta 3002:
|
|
# a stack da fusão é isolada do checkout principal (3001 é do gov-loop).
|
|
WHATSAPP_HOOK_URL: ${WAHA_HOOK_BASE_URL:-http://host.docker.internal:3003}/api/v1/webhooks/waha
|
|
WHATSAPP_HOOK_EVENTS: "message.any,message.ack,message.edited,message.revoked,session.status,state.change"
|
|
# HMAC SHA512 do payload, validado server-side via crypto.timingSafeEqual.
|
|
WHATSAPP_HOOK_HMAC: ${WAHA_HMAC_SECRET}
|
|
# Engine NOWEB por default (mais leve, ~150MB; estável). O env é
|
|
# WHATSAPP_DEFAULT_ENGINE — WAHA_DEFAULT_ENGINE NÃO existe no WAHA e caía
|
|
# silenciosamente no default WEBJS (browser, trava a sessão).
|
|
WHATSAPP_DEFAULT_ENGINE: NOWEB
|
|
# Storage de mídia: Supabase Storage via Backend (NÃO inline base64).
|
|
WAHA_DASHBOARD_ENABLED: "true"
|
|
# Sem isto o container volta (ou o Docker Desktop acorda) e as sessões
|
|
# ficam STOPPED — o front abre em "Conectando…" e as mensagens do período
|
|
# fora não chegam. True retoma as que já existiam; não pede QR de novo.
|
|
WHATSAPP_RESTART_ALL_SESSIONS: "${WHATSAPP_RESTART_ALL_SESSIONS:-True}"
|
|
extra_hosts:
|
|
- "host.docker.internal:host-gateway"
|
|
volumes:
|
|
- waha-data:/app/.sessions
|
|
- waha-media:/app/.media
|
|
healthcheck:
|
|
# /ping é o único endpoint sem auth desta build (api/health = 401/404).
|
|
test: ["CMD", "curl", "-fsS", "http://127.0.0.1:3000/ping"]
|
|
interval: 30s
|
|
timeout: 5s
|
|
retries: 3
|
|
start_period: 30s
|
|
|
|
# Worker 24/7 do agent-engine (fusão Vendaval): fila, cron/follow-up, drain do
|
|
# event_log e turnos do agente rico. Postgres = Supabase (SUPABASE_DB_URL no
|
|
# .env.local). Sobe junto do WAHA: `docker compose up -d`.
|
|
worker:
|
|
build:
|
|
context: .
|
|
dockerfile: Dockerfile.worker
|
|
container_name: deskcomm-agent-worker
|
|
restart: unless-stopped
|
|
env_file:
|
|
- .env
|
|
- .env.local
|
|
environment:
|
|
# dentro do container, localhost é o próprio worker — o WAHA está na rede
|
|
# do compose (serviço waha, porta interna 3000). Sobrepõe o .env.local.
|
|
WAHA_API_BASE_URL: http://waha:3000
|
|
ports:
|
|
- "8787:8787"
|
|
healthcheck:
|
|
# 127.0.0.1 explícito: localhost resolve p/ ::1 e o healthz escuta só IPv4.
|
|
test: ["CMD", "wget", "--quiet", "--tries=1", "--spider", "http://127.0.0.1:8787/healthz"]
|
|
interval: 30s
|
|
timeout: 5s
|
|
retries: 3
|
|
start_period: 20s
|
|
|
|
volumes:
|
|
waha-data:
|
|
waha-media:
|