Arquitetura e Infraestrutura¶
Visão Geral¶
Este documento consolida a visão atual da arquitetura e da infraestrutura da Page Saúde. Ele tem como objetivo fornecer entendimento técnico, contexto de decisões e referências essenciais, sem substituir as fontes operacionais detalhadas (planilhas e sistemas).
A infraestrutura da Page Saúde é composta por ambientes segregados, com foco em estabilidade operacional, previsibilidade e evolução controlada. Detalhamentos extensos de inventário, requisitos e configurações são mantidos em fontes externas dedicadas.
Topologia (Visão de Alto Nível)¶
A topologia atual segue o modelo:
- Provedor de infraestrutura dedicado
- Virtualização como base para segregação de workloads
- Ambientes separados por finalidade
- Serviços organizados por responsabilidade (aplicação, dados, monitoramento)
Stack de Serviços¶
- Proxy Web: Traefik (Roteador de Borda, SSL, Balanceamento de Carga).
- Banco de Dados: PostgreSQL + PgBouncer (Pooling de Conexões).
- Observabilidade:
- Grafana Alloy: Coletor OpenTelemetry (Métricas, Logs, Traces, Perfis). Padronização de ambiente (label
environment) e coleta de logs de serviços (Apache, etc).
- Grafana Alloy: Coletor OpenTelemetry (Métricas, Logs, Traces, Perfis). Padronização de ambiente (label
Para detalhes sobre arquitetura, provisionamento e operação da stack de monitoramento, consulte Monitoramento e Observabilidade. * Grafana Stack: Loki (Logs), Tempo (Traces), Prometheus (Métricas), Pyroscope (Profiling), Grafana (Interface). * Aplicações: * Projetos Externos: Aplicações PHP, Node.js e React (Frontend) provisionadas independentemente.
Diagrama de Topologia¶
flowchart TB
subgraph INTERNET["Internet"]
USER["Usuários Web"]
end
subgraph DNS["DNS"]
CF["Cloudflare<br/>*.pagesaude.com.br"]
REGISTROBR["Registro.br<br/>*.cosemsmg.org.br"]
end
subgraph EVEO["Servidor Dedicado EVEO"]
FW["Firewall EVEO"]
subgraph PROD_PAGESAUDE["Produção PageSaúde"]
subgraph APP01["prod-pagesaude-app-01"]
APP01_SVC["Apache, PHP, Node<br/>MySQL (local), Cache"]
end
subgraph APP02["prod-pagesaude-app-02"]
APP02_SVC["Traefik<br/>Docker Apps"]
end
subgraph DB01["prod-pagesaude-db-01"]
DB01_SVC["PostgreSQL 14<br/>pgBouncer"]
end
subgraph DB02["prod-pagesaude-db-02"]
DB02_SVC["PostgreSQL 14<br/>Redis"]
end
end
subgraph PROD_CREDENCIA["Produção PageCredencia"]
subgraph CRED_APP01["prod-credencia-app-01"]
CRED_APP01_SVC["Traefik<br/>Docker Apps"]
end
subgraph CRED_DB01["prod-credencia-db-01"]
CRED_DB01_SVC["PostgreSQL 14<br/>pgBouncer"]
end
end
subgraph STAGING["Staging"]
subgraph STG_APP01["stg-shared-app-01"]
STG_SVC["Traefik, Docker Apps<br/>PostgreSQL, Redis"]
end
end
subgraph PROD_COSEMSMG["Produção COSEMSMG"]
subgraph COSEMS01["prod-cosemsmg-app-01"]
COSEMS01_SVC["Apache, Node<br/>MySQL (local)"]
end
subgraph COSEMS02["prod-cosemsmg-app-02"]
COSEMS02_SVC["Windows Server<br/>NGINX, Tomcat, MySQL"]
end
end
subgraph OPS["Operações"]
subgraph MONITOR["ops-shared-monitor-01"]
MON_SVC["Traefik, Grafana<br/>Prometheus, Loki, Tempo<br/>Portainer"]
end
end
end
%% Fluxo de Tráfego DNS
USER --> CF & REGISTROBR
CF --> FW
REGISTROBR --> FW
%% Roteamento por Domínio
FW -->|"api/app/beta*.pagesaude.com.br"| APP01
FW -->|"pagesaude.com.br (novo)"| APP02
FW -->|"credencia*.pagesaude.com.br"| CRED_APP01
FW -->|"*-stg.pagesaude.com.br"| STG_APP01
FW -->|"grafana/portainer*.pagesaude.com.br"| MONITOR
FW -->|"*.cosemsmg.org.br"| COSEMS01
FW -->|"sislog.cosemsmg.org.br"| COSEMS02
%% Conexões de Banco
APP01 -.->|PostgreSQL| DB01
APP02 -.->|PostgreSQL + Redis| DB02
CRED_APP01 -.->|PostgreSQL| CRED_DB01
%% Monitoramento (Alloy Agent → Stack)
APP01 -.->|OTLP| MONITOR
APP02 -.->|OTLP| MONITOR
DB01 -.->|OTLP| MONITOR
DB02 -.->|OTLP| MONITOR
STG_APP01 -.->|OTLP| MONITOR
COSEMS01 -.->|OTLP| MONITOR
CRED_APP01 -.->|OTLP| MONITOR
CRED_DB01 -.->|OTLP| MONITOR
Ambientes¶
Produção¶
Ambiente responsável pela operação dos sistemas em uso real.
Características gerais:
- Alta criticidade
- Mudanças controladas
- Monitoramento ativo
- Backups regulares
Staging¶
Ambiente destinado a validações, testes e homologações.
Características gerais:
- Replica, quando possível, a produção
- Menor criticidade
- Usado para validação de mudanças
Monitoramento¶
Ambiente dedicado à observabilidade da infraestrutura e aplicações.
Características gerais:
- Coleta de métricas
- Logs
- Alertas
- Suporte à operação e resposta a incidentes
Inventário de Infraestrutura¶
A fonte oficial e detalhada do inventário da infraestrutura está mantida em uma planilha Google dedicada.
Este documento mantém apenas informações que não fazem sentido em formato tabular, como:
- visão consolidada da infraestrutura
- observações relevantes
- decisões técnicas
- exceções
Resumo Atual¶
- Provedor principal: EVEO
- Modelo: infraestrutura virtualizada
- Ambientes segregados: Produção, Staging e Monitoramento
- Componentes críticos identificados e acompanhados via monitoramento
Requisitos e Configurações¶
Os requisitos técnicos e configurações detalhadas também possuem uma planilha dedicada como fonte de verdade.
Neste documento são mantidos apenas:
- observações fora do escopo da planilha
- exceções técnicas
- decisões de configuração
- riscos associados
Observações Relevantes¶
- Existem diferenças de configuração entre ambientes que não são completamente simétricas
- Algumas configurações são resultado de restrições históricas
- Dependências externas devem ser monitoradas com atenção
Estrutura nos Servidores¶
Tudo que este repositório provisiona vive sob /opt/pagesaude:
/opt/pagesaude
├── apps/ # aplicações de negócio (webapps, workers)
├── services/ # infraestrutura compartilhada (banco, cache, proxy, observabilidade)
└── secrets/ # segredos gerados pelo provisionamento (nunca versionados)
Regras de execução:
| Executar via | Critério | Exemplos |
|---|---|---|
| systemd (host) | Precisa existir antes ou independentemente do Docker | Docker engine, sshd, agente do provedor |
| Container | Todo o resto | aplicações, PostgreSQL, Redis, Traefik, observabilidade, Portainer |
Logs vão apenas para stdout/stderr (coletados pelo Alloy via socket do Docker) e dados
persistentes ficam em volumes Docker nomeados — sem diretórios de logs ou data criados
manualmente no host.
Detalhamento e justificativa: ADR-0003.
Decisões Técnicas¶
As decisões técnicas formais (ADR) são mantidas no repositório GitHub como fonte oficial e compartilhada com o cliente.
Este documento referencia apenas decisões relevantes para entendimento da arquitetura.
Riscos e Pontos de Atenção¶
- Dependência de infraestrutura específica
- Necessidade de padronização maior entre ambientes
- Evolução da infraestrutura sem perda de rastreabilidade
Referências¶
Este é um documento vivo. Ele deve ser atualizado sempre que houver mudanças estruturais, decisões técnicas relevantes ou alterações significativas na infraestrutura.