3.7 KiB
Arquitetura de Alto Nível
Resumo Técnico
O AutomatizaSE Portal é uma POC simples com NextJS 14+ App Router containerizado em Docker, deployado em Kubernetes usando manifests básicos. Utiliza Supabase como backend completo (auth, database PostgreSQL, recuperação de senha). O frontend NextJS renderiza páginas SSR e se comunica com API Routes que orquestram chamadas à EvolutionAPI (REST) e Supabase. OAuth do Google Calendar é delegado ao n8n. A aplicação roda em container Docker, exposta via Nginx Ingress. Arquitetura minimalista para deploy rápido em poucas horas.
Escolha de Plataforma e Infraestrutura
Plataforma: Kubernetes + Docker + Supabase (POC Simplificada)
Componentes Essenciais:
- Docker: Containerização da aplicação NextJS
- Kubernetes: Orquestração básica (deployment + service + ingress)
- Nginx Ingress: Roteamento HTTP para o portal
- Supabase: Auth + PostgreSQL (schema
portal) + SMTP - EvolutionAPI: Integração REST WhatsApp (externo)
- n8n: OAuth Google Calendar (externo)
Topologia Simples:
- Namespace:
automatizase-portal - Replicas: 1 pod (POC, sem HA)
- Ingress: HTTP via Nginx Ingress, domínio
portal.automatizase.com(HTTPS opcional) - Recursos: Limits mínimos (256Mi RAM, 100m CPU)
Justificativa:
- Simplicidade: Setup rápido em poucas horas
- Mínimo viável: Apenas o necessário para rodar NextJS em K8s
- Supabase gerenciado: Reduz complexidade de backend
Estrutura do Repositório
Estrutura: Single NextJS App (monorepo não necessário para POC)
Ferramenta Monorepo: N/A
Organização de Pacotes:
- Projeto NextJS único contendo frontend (
/app,/components) e API routes (/app/api) - Shared types em
/types(TypeScript interfaces compartilhadas entre frontend e backend) - Libs utilitárias em
/lib(Supabase client, EvolutionAPI client, helpers)
Justificativa: Para POC simplificada, monorepo com múltiplos packages adiciona complexidade desnecessária. Single app NextJS oferece estrutura clara e setup rápido.
Diagrama de Arquitetura de Alto Nível (POC Simplificada)
graph TB
User[Usuário<br/>Mobile/Desktop] -->|HTTP| Ingress[Nginx Ingress<br/>portal.automatizase.com]
subgraph K8s["Kubernetes Cluster"]
Ingress -->|Route| Service[Service<br/>ClusterIP:80]
Service --> Pod[Pod<br/>NextJS Container<br/>porta 3000]
Pod -->|Auth + DB| Supabase
Pod -->|API Calls| EvolutionAPI
Pod -->|OAuth Redirect| n8n
end
subgraph External["Serviços Externos"]
Supabase[(Supabase<br/>Auth + PostgreSQL)]
EvolutionAPI[EvolutionAPI<br/>WhatsApp]
n8n[n8n<br/>Google Calendar OAuth]
end
Supabase -->|SMTP| Email[SMTP]
n8n -->|Callback| Service
style User fill:#4A90E2
style Ingress fill:#009639
style Service fill:#326CE5
style Pod fill:#4A90E2
style Supabase fill:#3ECF8E
style EvolutionAPI fill:#25D366
style n8n fill:#FF6D5A
Fluxo Simplificado:
- Usuário acessa
portal.automatizase.com - Nginx Ingress roteia para Service K8s (porta 80)
- Service encaminha para Pod NextJS (porta 3000)
- NextJS se comunica com Supabase (auth/DB) e EvolutionAPI (WhatsApp)
Padrões Arquiteturais (Simplificados para POC)
- Containerized App: NextJS em Docker, deploy via K8s manifests simples
- Component-Based UI: Componentes React com TailwindCSS (Shadcn/ui)
- API Routes (BFF):
/app/api/*centralizam comunicação com EvolutionAPI e Supabase - OAuth Delegation: Google Calendar via n8n (evita gerenciar credenciais)
- Config via Env Vars: Secrets e configs via K8s ConfigMap/Secret