# Filosofia de Operação

# Introdução

O cluster não é apenas um conjunto de servidores executando containers, mas uma plataforma operacional construída sobre alguns princípios fundamentais.

Esses princípios orientam a forma como aplicações são desenvolvidas, empacotadas, implantadas e operadas dentro do ambiente.

O objetivo dessa filosofia é manter o ambiente previsível, auditável, escalável e operável por qualquer pessoa da equipe com conhecimento da plataforma.

# Infraestutura como Plataforma

O cluster deve ser entendido como uma **plataforma interna de execução de software**, e não apenas como um conjunto de máquinas onde aplicações são instaladas manualmente.

Aplicações não devem depender de configurações manuais em servidores específicos.  
Toda aplicação deve ser executada através de containers e publicada via stack.

Isso garante:

- Reprodutibilidade
- Portabilidade
- Versionamento de deploy
- Facilidade de rollback
- Independência de servidor específico
- Escalabilidade controlada

O servidor deixa de ser importante; o que importa é o serviço.

# Containers são Efêmeros

Containers devem ser tratados como **descartáveis**.

Nenhuma informação importante deve existir apenas dentro de um container.  
Tudo que precisa persistir deve estar em:

- Bancos de dados
- Redis
- Volumes NFS
- Storage externo
- Serviços de logs
- Sistemas de métricas

Se um container puder ser destruído e recriado sem perda de dados, então o sistema está corretamente arquitetado.

# Deploy é Versionado

Toda aplicação publicada no cluster deve possuir:

- Repositório Git
- Versionamento semântico
- Imagem Docker versionada
- Deploy via stack
- Histórico de versões
- Possibilidade de rollback

O cluster não deve rodar código sem versão identificável.

Isso permite:

- Rastreabilidade
- Auditoria
- Rollback rápido
- Reprodutibilidade de ambiente
- Comparação entre versões

# Um Processo por Container

O cluster adota o princípio de:

> Um container deve executar apenas uma responsabilidade.

Isso melhora:

- Isolamento de falhas
- Escalabilidade independente
- Observabilidade
- Logging
- Atualizações
- Diagnóstico de problemas
- Consumo de recursos previsível

Exemplo de separação comum:

<div class="TyagGW_tableContainer" id="bkmrk-responsabilidade-ser"><div class="group TyagGW_tableWrapper flex flex-col-reverse w-fit" tabindex="-1"><table class="w-fit min-w-(--thread-content-width)" data-end="2797" data-start="2608"><thead data-end="2638" data-start="2608"><tr data-end="2638" data-start="2608"><th class="" data-col-size="sm" data-end="2627" data-start="2608">Responsabilidade</th><th class="" data-col-size="sm" data-end="2638" data-start="2627">Serviço</th></tr></thead><tbody data-end="2797" data-start="2670"><tr data-end="2685" data-start="2670"><td data-col-size="sm" data-end="2676" data-start="2670">Web</td><td data-col-size="sm" data-end="2685" data-start="2676">nginx</td></tr><tr data-end="2709" data-start="2686"><td data-col-size="sm" data-end="2698" data-start="2686">Aplicação</td><td data-col-size="sm" data-end="2709" data-start="2698">php-fpm</td></tr><tr data-end="2734" data-start="2710"><td data-col-size="sm" data-end="2722" data-start="2710">Scheduler</td><td data-col-size="sm" data-end="2734" data-start="2722">schedule</td></tr><tr data-end="2753" data-start="2735"><td data-col-size="sm" data-end="2744" data-start="2735">Worker</td><td data-col-size="sm" data-end="2753" data-start="2744">queue</td></tr><tr data-end="2777" data-start="2754"><td data-col-size="sm" data-end="2766" data-start="2754">Migration</td><td data-col-size="sm" data-end="2777" data-start="2766">migrate</td></tr><tr data-end="2797" data-start="2778"><td data-col-size="sm" data-end="2787" data-start="2778">Seeder</td><td data-col-size="sm" data-end="2797" data-start="2787">seeder</td></tr></tbody></table>

</div></div>Essa separação é parte fundamental da arquitetura do cluster.

# Logs e Métricas são Obrigatórios

Todo serviço deve gerar logs e métricas.

Se um serviço não gera logs, ele não pode ser operado corretamente.  
Se não existem métricas, não existe monitoramento real.

A observabilidade não é opcional, ela faz parte da plataforma.

# Automação antes de operação manual

Sempre que possível, tarefas devem ser automatizadas.

Evitar:

- Alterações manuais em containers
- Alterações manuais em servidores
- Configurações feitas apenas via interface gráfica
- Deploy manual sem versionamento
- Execução manual de procedimentos repetitivos

Preferir:

- Scripts
- CI/CD
- Stack versionada
- Dockerfile
- Infraestrutura como código
- Secrets do Swarm
- Configs do Swarm

O objetivo é que qualquer ambiente possa ser recriado do zero apenas com código e configurações versionadas.

# Simplicidade Operacional

Uma das decisões arquiteturais do cluster foi priorizar **simplicidade operacional**.

Isso significa:

- Menos ferramentas quando possível
- Menos camadas de abstração
- Sistemas que a equipe entende completamente
- Troubleshooting simples
- Menor overhead operacional
- Menor curva de aprendizado
- Menor dependência de especialistas

A complexidade é considerada um custo operacional.

# Padronização

Aplicações publicadas no cluster devem seguir padrões definidos para:

- Estrutura de containers
- Deploy
- Versionamento
- Uso de secrets
- Uso de Redis
- Uso de volumes
- Logs
- Redes
- Exposição via Traefik
- WAF
- Observabilidade

Padronização reduz erros, facilita troubleshooting e permite que qualquer pessoa da equipe opere qualquer serviço.

# Responsabilidade do Cluster vs Responsabilidade da Aplicação

Divisão clara de responsabilidades:

<div class="TyagGW_tableContainer" id="bkmrk-cluster-aplica%C3%A7%C3%A3o-re"><div class="group TyagGW_tableWrapper flex flex-col-reverse w-fit" tabindex="-1"><table class="w-fit min-w-(--thread-content-width)" data-end="4872" data-start="4611"><thead data-end="4634" data-start="4611"><tr data-end="4634" data-start="4611"><th class="" data-col-size="sm" data-end="4621" data-start="4611">Cluster</th><th class="" data-col-size="sm" data-end="4634" data-start="4621">Aplicação</th></tr></thead><tbody data-end="4872" data-start="4658"><tr data-end="4685" data-start="4658"><td data-col-size="sm" data-end="4665" data-start="4658">Rede</td><td data-col-size="sm" data-end="4685" data-start="4665">Regra de negócio</td></tr><tr data-end="4704" data-start="4686"><td data-col-size="sm" data-end="4694" data-start="4686">Proxy</td><td data-col-size="sm" data-end="4704" data-start="4694">Código</td></tr><tr data-end="4722" data-start="4705"><td data-col-size="sm" data-end="4711" data-start="4705">TLS</td><td data-col-size="sm" data-end="4722" data-start="4711">Queries</td></tr><tr data-end="4743" data-start="4723"><td data-col-size="sm" data-end="4730" data-start="4723">Logs</td><td data-col-size="sm" data-end="4743" data-start="4730">Validação</td></tr><tr data-end="4772" data-start="4744"><td data-col-size="sm" data-end="4755" data-start="4744">Métricas</td><td data-col-size="sm" data-end="4772" data-start="4755">Processamento</td></tr><tr data-end="4794" data-start="4773"><td data-col-size="sm" data-end="4783" data-start="4773">Storage</td><td data-col-size="sm" data-end="4794" data-start="4783">Modelos</td></tr><tr data-end="4823" data-start="4795"><td data-col-size="sm" data-end="4810" data-start="4795">Autenticação</td><td data-col-size="sm" data-end="4823" data-start="4810">Interface</td></tr><tr data-end="4850" data-start="4824"><td data-col-size="sm" data-end="4842" data-start="4824">Observabilidade</td><td data-col-size="sm" data-end="4850" data-start="4842">APIs</td></tr><tr data-end="4872" data-start="4851"><td data-col-size="sm" data-end="4860" data-start="4851">Deploy</td><td data-col-size="sm" data-end="4872" data-start="4860">Features</td></tr></tbody></table>

</div></div>O cluster fornece a **infraestrutura e a plataforma**, a aplicação fornece a **lógica de negócio**.

# Resumo da Filosofia

O cluster foi projetado para ser previsível, reproduzível, observável e operável.

Aplicações devem ser empacotadas como containers, implantadas de forma versionada, gerar logs, expor métricas e não depender de servidores específicos.

A plataforma deve abstrair a infraestrutura para que as equipes possam focar no desenvolvimento de software, enquanto o cluster fornece rede, segurança, storage, observabilidade e mecanismos de deploy.

A simplicidade operacional, a padronização e a automação são princípios fundamentais da operação do ambiente.