Troubleshooting
Diagnostico Geral
# Ver todos os servicos e status
docker service ls
# Ver logs de um servico
docker service logs <service_name> --tail 50 -f
# Ver tasks (incluindo falhas)
docker service ps <service_name> --no-trunc
# Ver detalhes do servico
docker service inspect <service_name> --pretty
Backend nao conecta no MongoDB
Sintoma: SSL routines: tlsv1 alert internal error
Causa: Imagem Docker Alpine tem OpenSSL incompativel com MongoDB Atlas.
Solucao: Usar node:20-slim (Debian) no Dockerfile em vez de node:20-alpine.
Backend nao conecta no MongoDB (timeout)
Sintoma: Timeout ao conectar, sem erro SSL.
Causa: IP do servidor nao esta na whitelist do MongoDB Atlas.
Solucao:
# Descobrir IP publico do servidor
curl -s ifconfig.me
Frontend mostra localhost:3000 nas requisicoes
Sintoma: Requisicoes da API vao para localhost:3000 em vez da URL correta.
Causa: NEXT_PUBLIC_API_URL e injetada em build time. Se o secret nao estava configurado no momento do build, cai no fallback.
Solucao:
1. Verificar que NEXT_PUBLIC_API_URL esta nos secrets do GitHub
2. Forcar novo build:
git commit --allow-empty -m "ci: rebuild com NEXT_PUBLIC_API_URL" && git push origin main
Container reinicia em loop (CrashLoopBackOff)
Sintoma: docker service ps mostra multiplas tasks falhando.
Diagnostico:
docker service logs <service_name> --tail 50
Causas comuns:
- .env nao existe no path configurado
- Variavel de ambiente obrigatoria faltando
- Porta ja em uso por outro servico
- Erro de conexao com dependencia (RabbitMQ, MongoDB)
Frontend container crasha com ENOTFOUND
Sintoma: Error: getaddrinfo ENOTFOUND <container_hash>
Causa: Next.js standalone tenta fazer bind no hostname do container.
Solucao: Adicionar no Dockerfile:
ENV HOSTNAME=0.0.0.0
ENV PORT=3000
GHCR retorna 403 Forbidden no pull
Sintoma: docker pull da 403 no servidor, mas login funcionou.
Causas:
- Package esta como Private (precisa ser Internal)
- Token nao tem permissao read:packages
Solucao:
1. GHCR > Package settings > Visibility > Internal
2. Verificar que o workflow usa GITHUB_TOKEN com packages: write
Servico nao consegue se comunicar com outro
Sintoma: ECONNREFUSED ou ENOTFOUND ao acessar outro servico.
Diagnostico:
# Verificar se ambos estao na mesma network
docker service inspect <service_name> --format '{{.Spec.TaskTemplate.Networks}}'
# Verificar se o servico destino esta rodando
docker service ls | grep <service_name>
Solucao:
# Adicionar network ao servico
docker service update --network-add network_swarm_01 <service_name>
RabbitMQ fila nao existe
Sintoma: Erro ao publicar na fila events.
Causa: A fila quorum e criada pelo consumer (backend) na inicializacao.
Solucao: Garantir que o backend esta rodando. A fila sera criada automaticamente.
WhatsApp desconectou
Sintoma: Mensagens nao sao recebidas/enviadas.
Diagnostico:
docker service logs whatsapp_whatsapp --tail 20
Solucao: Acessar a API do Go-Whatsmeow e re-escanear o QR code.
GitHub Actions falha no SSH
Sintoma: error: missing server host ou timeout no SSH.
Causas: - Secret de host/user/key nao configurado no environment correto - Firewall bloqueando porta 22 - Chave SSH invalida
Verificar:
1. Confirmar que os secrets existem no environment marie_ai_swarm_manager_01
2. Testar SSH manualmente: ssh -i key user@host