-
Notifications
You must be signed in to change notification settings - Fork 580
Expand file tree
/
Copy pathdocker-compose.yml
More file actions
89 lines (85 loc) · 3.75 KB
/
Copy pathdocker-compose.yml
File metadata and controls
89 lines (85 loc) · 3.75 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
# 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: