91 lines
3.7 KiB
Markdown
91 lines
3.7 KiB
Markdown
# 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)
|
|
|
|
```mermaid
|
|
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:**
|
|
1. Usuário acessa `portal.automatizase.com`
|
|
2. Nginx Ingress roteia para Service K8s (porta 80)
|
|
3. Service encaminha para Pod NextJS (porta 3000)
|
|
4. 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
|
|
|
|
---
|