Instrumento de plantão

A stack inteira, na ordem em que o tráfego a atravessa

Quando algo cai, você desce esta página de cima para baixo até encontrar a camada que parou. Cada uma diz o que faz, como está agora, e o comando exato que revela o problema. Mais abaixo: o que a clínica sente quando cada uma delas falha.

19 containers 10 workflows ativos 1 VM Oracle Always Free 0 backups automatizados

Se você só tem 30 segundos

  1. Se o Evolution cair, a clínica fica muda. Duas das três superfícies de contato passam por ele — e ele é Baileys, sem failover. É o único container cuja falha o cliente sente inteira.
  2. Não existe backup. Se a VM morrer, os 10 workflows e todos os agentes vão junto. O script foi escrito em maio e nunca instalado no cron.
  3. O proxy é ponto único de falha. É o único container nas três redes. Se ele cair, não é só o SSL — o n8n perde o Dify.
  4. O sandbox do Dify reinicia em loop há 45 dias. 64 mil vezes. Nenhum agente usa nó de código, então nunca fez falta — mas nunca foi visto.

As camadas

Clique para abrir. A ordem é a do tráfego: paciente no topo, dado no fundo.

01 Cloudflare DNSResolve o nome antes de qualquer coisa acontecer Estável

O que roda aqui

Todos os subdomínios: site, dashboard, experiencia, dify, n8n, evolution. Todos em modo cinza (DNS-only).

A regra que não se quebra

Nuvem laranja (proxy) quebra webhook e SSL do Dify, n8n e Evolution. Já foi testado. Nunca ligar.

Sintoma quando quebra

  • Domínio não resolve
  • Erro 525 no handshake SSL

O comando

dig safeflowai.com.br +short
02 Nginx Proxy ManagerO gargalo de tudo — e o único ponto único de falha Ponto único

Por que ele é crítico

É o único container nas três redes. O n8n-app vive isolado em safeflow-n8n_default; o Evolution em evolution-api-claude_default. Eles só se alcançam através dele.

O que isso significa

Se o NPM cair, não é só o site que sai do ar. O n8n perde o Dify. Os agentes param de responder mesmo estando de pé.

A armadilha conhecida

O NPM cacheia DNS interno. Depois de todo redeploy do Dify, o IP do container muda e o NPM continua batendo no velho — 502 em tudo.

A correção

Reiniciar o safeflow-nginx depois de qualquer redeploy do Dify. Sempre.

curl -I https://dify.safeflowai.com.br
03 DifyOnde os agentes pensam. Nove containers, um deles doente Sandbox em loop

O que roda aqui

  • dify-api · dify-web · dify-worker
  • postgres · redis · weaviate (vetores do RAG)
  • plugin_daemon · sandbox

O achado desta leitura

O dify-sandbox-1 está em restart loop. É o container que executa nó de código dentro de um agente. Se algum agente publicado usar Code node, ele quebra silenciosamente.

A regra do RAG

Refragmentar base existente corrompe os vetores em silêncio. Sempre deletar e recriar. Config: separador \n\n, chunk 1024, overlap 200, nomic-embed-text, Top-K 3.

Sintoma quando quebra

  • 401 persistente após login — cookie __Host-
  • 502 — cache DNS do NPM (camada 02)
  • Agente responde vazio — sandbox
04 n8nA orquestração. 10 workflows publicados, todos vivos 10 ativos

Os roteadores

  • 8cVE18NY · Roteador B2C (trio)
  • zF7voynJ · Íris
  • vIIRTQiA · Cora

O resto

  • KLPLu9e7 · qualifica-completo (Bella)
  • ngswIxAc · valida-dashboard (login)
  • XaL3anyq / 00f4QV3Y · proxies Sofia e Íris web
  • cHnxsrMv · keep-alive do Oracle ATP

Os dois bugs que sempre voltam

  • Objeto inteiro no specifyBody:"json" — vai como string literal
  • Texto multilinha do agente sem JSON.stringify — quebra o JSON

A guerra UI × PATCH

PATCH via REST grava no banco mas não recarrega o runner. Salvar pela UI aberta reverte o PATCH. Fechar a aba — aplicar — reabrir — publicar.

05 Evolution APIA ponte com o WhatsApp. E o maior risco de produto Risco de ban

O que ele é

Baileys — biblioteca não-oficial, versão v1.8.6. Não é a API oficial da Meta.

Por que isso importa mais que técnica

O número de WhatsApp da clínica é a base de pacientes dela. Se o Baileys causar banimento, a culpa recai na SafeFlowAI. É risco de reputação, não de infra.

O portão da migração

Verificação Meta Business — Cloud API oficial (que protege o número). Reenviada em 13/07, aguardando re-crawl.

O formato que sempre erra

sendText exige number + textMessage.text aninhado. Campo text plano retorna "instance requires textMessage".

06 DadosOnde tudo vive. E de onde nada é copiado Sem backup

O que está guardado onde

  • Notion — leads, onboarding, pacientes, histórico
  • Postgres (Dify) — agentes, prompts, bases RAG
  • Postgres (n8n) — os 10 workflows
  • Oracle ATP — produção + staging

O buraco

Nenhum deles tem backup automatizado. O script safeflow-backup.sh foi escrito em 09/05 — com runbook de restauração completo — e nunca foi instalado no cron.

O que acontece se a VM morrer hoje

Os 10 workflows, os 9 agentes e todas as bases RAG somem. Reconstrução do zero. Com cliente pagante, isso não é aceitável.

A regra do Notion

CNPJ é a chave de tenant em toda tabela lida em runtime. Tipo texto, 14 dígitos, sem máscara. Relation nunca serve como filtro de automação.

O acesso

Como se entra na máquina — e como não se entra.

07 PortainerA única porta. SSH está fechada em definitivo Único caminho

A regra permanente

A porta 22 da Oracle está bloqueada. Não existe SSH. Não existe docker CLI no ambiente do Code. Tudo passa pela API do Portainer.

O endpoint correto

É /api/endpoints/3/, não /1/. O endpoint 1 não existe nesta instalação.

Escrever arquivo em container

O volume monta read-only. Método: container auxiliar temporário montando o mesmo volume em RW — grava — destrói o auxiliar.

A regra que nasceu de um erro

Nunca editar arquivo à mão dentro de container servido por repo versionado. Em 09/07 isso deixou o container divergente do git. Deploy = build do main sobrescrevendo o arquivo inteiro.

Quando a dona liga reclamando

A queixa nunca chega em linguagem de container. Chega assim. Estas são as três únicas superfícies onde a clínica encosta na stack — tudo o mais é invisível para ela.

A paciente WhatsApp da clínica

"Mandei mensagem e ninguém respondeu."

Evolutionn8nDifyNotion
Quem atende

Vendedor, Pré e Pós-procedimento (Haiku) · Luna no D7

Onde olhar primeiro

Evolution. Se o chip desconectou ou foi banido, nenhum agente alcança ninguém — a clínica fica muda e você não vê erro em lugar nenhum.

A dona WhatsApp dela, chip próprio

"A Íris não me respondeu."

Evolutionn8nNotionDify
Quem atende

Íris (clínico) e Cora (regulatório), ambas Sonnet · Expert e Elite

Onde olhar primeiro

O roteador cruza o telefone dela com profissionais_iris e exige estagio=ativo. Se o estágio mudou, ela cai no canal restrito — e o silêncio parece falha, mas é a regra funcionando.

A dona Navegador

"O painel não abre."

ProxyDashboardn8nNotion
O que ela vê

Login por CNPJ e senha, validado no servidor. Depois, a ficha viva da clínica dela.

Onde olhar primeiro

É o único ponto que não passa pelo Evolution. Se o WhatsApp caiu mas o painel abre, o problema está isolado no Evolution.

A conta que o mapa não fazia

O Evolution é, ao mesmo tempo, o ponto de contato mais crítico e o componente mais frágil. Duas das três superfícies passam por ele — e ele é Baileys, sem failover, com risco de banimento do número.

Traduzindo para o telefone tocando: se o Evolution cair, a clínica inteira fica muda e a dona vai atribuir isso à SafeFlowAI, esteja a culpa onde estiver. Nenhum outro container tem esse alcance.

A arquitetura por trás

O mesmo sistema, visto de cima. Tudo orbita o proxy — porque é o único container que alcança as três redes. As linhas vermelhas tracejadas são as redes isoladas: elas só se falam pelo centro.

Proxy
reverso
O centro. Nas três redes
DNS
Cloudflare, sempre cinza
Dify
Onde os agentes pensam
Dados
Notion, Postgres, vetores
Ollama
Llama local
n8n
Rede isolada
Evolution
Rede isolada
Portainer

Por fora de tudo

O Portainer não orbita o proxy — ele não faz parte do fluxo. É a porta de manutenção, e a única: a porta 22 da Oracle está fechada em definitivo. Não existe SSH.

Toque em qualquer orbe.