# Visao Geral de Deployment

O FluxiQ PIX suporta multiplos modelos de deploy: Docker Compose para ambientes simples, Kubernetes (Helm) para orquestracao em nuvem, e instalacao on-premises para infraestrutura propria.

## Pre-requisitos

- Leitura dos [Requisitos do Sistema](../guide/requirements.md)
- Definicao do ambiente-alvo (desenvolvimento, staging, producao)
- Acesso administrativo ao ambiente de destino

## Modelos de Deployment

### FluxiQ-Managed (SaaS)

Deploy e operacao gerenciados pela equipe FluxiQ em infraestrutura dedicada. A instituicao financeira acessa via APIs e portal admin sem preocupacao com infraestrutura.

### Client Self-Deploy

A instituicao financeira realiza o deploy em sua propria infraestrutura utilizando os artefatos fornecidos (imagens Docker, Helm chart, documentacao).

## Comparacao de Opcoes

| Caracteristica | Docker Compose | Kubernetes (Helm) | On-Premises |
|----------------|---------------|-------------------|-------------|
| **Complexidade** | Baixa | Media | Alta |
| **Escalabilidade** | Limitada (vertical) | Alta (horizontal) | Media |
| **Alta Disponibilidade** | Com HA override | Nativa (PDB, HPA) | Manual (Patroni, Sentinel) |
| **Tempo de setup** | 15 minutos | 30-60 minutos | 2-4 horas |
| **Ideal para** | Dev, staging, POC | Producao cloud | Producao on-prem |
| **Auto-scaling** | Nao | Sim (HPA) | Nao |
| **Rolling updates** | Manual | Automatico | Manual |
| **Monitoramento** | Prometheus endpoint | Prometheus + cloud nativo | Prometheus + Grafana |
| **Certificados TLS** | Manual (nginx) | cert-manager | Manual |
| **Custo operacional** | Baixo | Medio | Alto |

## Arvore de Decisao

```mermaid
graph TD
    START{Qual o ambiente?} -->|Desenvolvimento / POC| DC[Docker Compose]
    START -->|Staging / Producao| CLOUD{Tem Kubernetes?}

    CLOUD -->|Sim| K8S{Qual provedor cloud?}
    CLOUD -->|Nao| INFRA{Infraestrutura propria?}

    K8S -->|AWS| AWS[EKS + values-aws.yaml]
    K8S -->|GCP| GCP[GKE + values-gcp.yaml]
    K8S -->|Azure| AZURE[AKS + values-azure.yaml]
    K8S -->|Oracle| OCI[OKE + values-oci.yaml]
    K8S -->|On-prem K8s| GENERIC[Kubernetes generico]

    INFRA -->|Sim| ONPREM[On-Premises<br/>ProxMox / VMs]
    INFRA -->|Nao| DC_HA[Docker Compose HA<br/>com nginx LB]

    DC --> QUICK[Inicio Rapido<br/>15 minutos]
    AWS --> HELM[Helm Install<br/>30 minutos]
    GCP --> HELM
    AZURE --> HELM
    OCI --> HELM
    GENERIC --> HELM
    ONPREM --> MANUAL[Instalacao Manual<br/>2-4 horas]
    DC_HA --> HA[Docker Compose + HA<br/>30 minutos]
```

## Dimensionamento por Ambiente

### Desenvolvimento (1 node)

- **Uso**: Desenvolvimento local, testes unitarios, POC
- **Infra**: Docker Compose (dev mode)
- **Replicas**: 1 backend, 1 admin
- **Banco**: PostgreSQL single (container)
- **Redis**: Single instance (container)
- **NATS**: Single instance (container)
- **TPS esperado**: < 100

### Staging / Homologacao (2 nodes)

- **Uso**: Testes de integracao, homologacao BACEN, UAT
- **Infra**: Kubernetes ou Docker Compose HA
- **Replicas**: 2 backend, 2 admin
- **Banco**: PostgreSQL com replica de leitura
- **Redis**: Single instance dedicado
- **NATS**: Cluster de 3 nos
- **TPS esperado**: 100-1.000

### Producao (3+ nodes)

- **Uso**: Operacao em producao com trafego real
- **Infra**: Kubernetes com HPA
- **Replicas**: 3+ backend (HPA min:2 max:10), 2+ admin
- **Banco**: PostgreSQL HA (Patroni ou managed)
- **Redis**: Cluster ou Sentinel (3 nos)
- **NATS**: Cluster de 3 nos dedicados
- **TPS esperado**: 1.000-7.500

| Componente | Dev | Staging | Producao |
|------------|-----|---------|----------|
| Backend pods | 1 | 2 | 3-10 (HPA) |
| Admin pods | 1 | 2 | 2-5 (HPA) |
| PostgreSQL | Container | Managed (1 instance) | Managed HA ou Patroni |
| Redis | Container | Dedicado (1 instance) | Sentinel (3 nos) |
| NATS | Container | Cluster (3 nos) | Cluster (3 nos dedicados) |
| Pool size (por repo) | 20 | 50 | 200 |
| Total conexoes DB | 80 | 400 | 1.600+ |
| CPU por backend pod | 1 core | 2 cores | 2-4 cores |
| RAM por backend pod | 1 GB | 2 GB | 2-4 GB |

## Estrutura de Arquivos de Deploy

```
deploy/
├── docker-compose/
│   ├── .env.example              # Template de variaveis de ambiente
│   ├── docker-compose.yml        # Producao (apenas app, infra externa)
│   ├── docker-compose.dev.yml    # Dev (app + PostgreSQL + Redis + NATS)
│   ├── docker-compose.ha.yml     # HA (3 backend + 2 admin + nginx LB)
│   ├── nginx.conf                # Config nginx para HA mode
│   ├── nginx-upstreams.conf      # Upstreams para load balancing
│   ├── certs/                    # Certificados TLS
│   ├── Makefile                  # Comandos uteis
│   └── quickstart.sh             # Script de inicio rapido
│
└── kubernetes/
    └── helm/
        └── pix/
            ├── Chart.yaml            # Metadata do chart (v1.0.0)
            ├── values.yaml           # Valores padrao
            ├── values-aws.yaml       # Override AWS (EKS + ALB + ECR)
            ├── values-gcp.yaml       # Override GCP (GKE + Traefik)
            ├── values-azure.yaml     # Override Azure (AKS + App Gateway)
            ├── values-oci.yaml       # Override OCI (OKE + LB)
            ├── values.schema.json    # Schema de validacao
            └── templates/
                ├── backend-deployment.yaml
                ├── backend-service.yaml
                ├── admin-deployment.yaml
                ├── admin-service.yaml
                ├── ingress.yaml
                ├── pdb.yaml
                ├── networkpolicy.yaml
                ├── serviceaccount.yaml
                ├── _helpers.tpl
                └── NOTES.txt
```

## Proximos Passos

Escolha o guia de deployment adequado ao seu ambiente:

| Opcao | Guia | Tempo |
|-------|------|-------|
| Docker Compose | [deployment/docker-compose](./docker-compose.md) | 15-30 min |
| Kubernetes (generico) | [deployment/kubernetes](./kubernetes.md) | 30-60 min |
| AWS (EKS) | [deployment/aws](./aws.md) | 45-90 min |
| GCP (GKE) | [deployment/gcp](./gcp.md) | 45-90 min |
| Azure (AKS) | [deployment/azure](./azure.md) | 45-90 min |
| Oracle Cloud (OKE) | [deployment/oci](./oci.md) | 45-90 min |
| On-Premises | [deployment/on-premises](./on-premises.md) | 2-4 horas |

## Resultado Esperado

Ao final desta secao, voce tera:

- Clareza sobre qual modelo de deploy e adequado para seu cenario
- Entendimento do dimensionamento necessario para cada ambiente
- Visao geral dos arquivos de deploy disponiveis no repositorio
- Proximo passo definido com o guia especifico para seu ambiente
