- Use Google Distroless images for all services (Go & Node.js). - Standardize documentation with [PROJECT-NAME].md. - Add .dockerignore and .gitignore to all projects. - Remove docker-compose.yml in favor of docker run instructions. - Fix Go version and dependency issues in observability, repo-integrations, and security-governance. - Add Podman support (fully qualified image names). - Update Dashboard to use Node.js static server for Distroless compatibility.
3 KiB
3 KiB
BAAS-CONTROL-PLANE
O baas-control-plane é o orquestrador central para provisionamento e gestão de múltiplos backends-as-a-service (BaaS), como Appwrite e Supabase, oferecendo uma camada unificada de abstração para multi-tenancy.
📋 Visão Geral
Este serviço não armazena dados de negócio, mas sim metadados sobre tenants, projetos e recursos. Ele atua como um "plano de controle" que delega a criação de infraestrutura para drivers ou provedores específicos.
Arquitetura
graph TD
Client[Dashboard / CLI] -->|HTTP REST| API[Control Plane API]
subgraph Core Services
API --> Provisioning[Provisioning Service]
API --> Schema[Schema Sync]
API --> Secrets[Secrets Manager]
API --> Audit[Audit Logger]
end
subgraph Providers
Provisioning -->|Driver Interface| Appwrite[Appwrite Provider]
Provisioning -->|Driver Interface| Supabase[Supabase Provider]
end
Appwrite -->|API| AWS_Appwrite[Appwrite Instance]
Supabase -->|API| AWS_Supabase[Supabase Hosting]
API --> DB[(Metadata DB)]
🚀 Estrutura do Projeto
O projeto segue uma arquitetura modular baseada em Fastify:
| Diretório | Responsabilidade |
|---|---|
src/core |
Configurações globais, plugins do Fastify e tratamento de erros. |
src/modules |
Domínios funcionais (Tenants, Projects, etc.). |
src/providers |
Implementações dos drivers para cada BaaS suportado. |
src/lib |
Utilitários compartilhados. |
docs/ |
Documentação arquitetural detalhada. |
🛠️ Tecnologias e Otimizações
- Backend: Node.js 20 + Fastify (Alta performance)
- Linguagem: TypeScript
- Validação: Zod
- Containerização:
- Baseada em
gcr.io/distroless/nodejs20-debian12. - Multi-stage build para separação de dependências.
- Segurança reforçada (sem shell, usuário non-root).
- Baseada em
💻 Como Executar
Docker (Recomendado)
docker-compose up --build
A API estará disponível na porta 4000.
Desenvolvimento Local
-
Instale as dependências:
npm install -
Configure o ambiente:
cp .env.example .env -
Execute em modo watch:
npm run dev
🔌 Fluxos Principais
- Criar Tenant: Registra uma nova organização no sistema.
- Criar Projeto: Vincula um Tenant a um Provider (ex: Projeto "Marketing" no Appwrite).
- Provisionar: O Control Plane chama a API do Provider para criar bancos de dados, buckets e funções.
- Schema Sync: Aplica definições de coleção/tabela do sistema de forma agnóstica ao provider.
🔧 Detalhes do Dockerfile
O Dockerfile é otimizado para produção e segurança:
- Builder: Compila o TypeScript.
- Prod Deps: Instala apenas pacotes necessários para execução (
--omit=dev). - Runtime (Distroless): Imagem final minúscula contendo apenas o runtime Node.js e os arquivos da aplicação.