promovaweb-devops-review-postgres-stack
Review PostgreSQL Stack
Executa uma auditoria completa do arquivo postgres.yaml e reporta conformidade, problemas e sugestões.
Instruções de Execução
Quando esta skill for invocada, siga exatamente este roteiro:
Passo 1 — Ler o arquivo
Leia o arquivo postgres.yaml completo.
Passo 2 — Executar todos os checks abaixo
Execute cada bloco de verificação e registre os resultados (✅ OK / ⚠️ Atenção / ❌ Erro).
Passo 3 — Gravar o resultado
Grave o relatório completo em um arquivo chamado postgres.audit.md.
Checks de Verificação
1. Imagem
- Verificar se a imagem usada é
pgvector/pgvector:pg18(ou variante com suporte a pgvector) - Alertar se estiver usando
postgres:latestsem suporte a pgvector, chatwoot precisa de pgvector para funcionar - Alertar se a tag não fixar uma versão major (ex:
pg18é aceitável,latestnão é recomendado) - Verificar se a versão do PostgreSQL é compatível com os outros stacks que a utilizam (n8n, chatwoot, metabase, kestra)
2. Variáveis de Ambiente
POSTGRES_PASSWORD— deve existir e não deve ser o placeholderSENHAPOSTGRES_INITDB_ARGS— verificar se contém--auth-host=scram-sha-256(autenticação segura)- Alertar se
POSTGRES_USERnão estiver definido (usa padrãopostgres) - Alertar se não houver
POSTGRES_DBdefinido (banco padrão épostgres)
3. Comando de Inicialização
Verifique os parâmetros do comando postgres:
--max_connections=200— deve ser definido e adequado para a carga esperada--wal_level=minimal— aceitável para setup sem replicação; alertar se replicação for necessária--max_wal_senders=0— consistente comwal_level=minimal; alertar se replicação for necessária--port=5432— deve ser a porta padrão
4. Portas Expostas
5432:5432— verificar se a porta está exposta externamente- Alertar se a porta 5432 estiver exposta em produção (risco de segurança — acesso externo ao banco), habilitar somente caso o firewall esteja configurado para bloquear acesso externo
- Recomendar uso de rede interna Docker Swarm sem exposição de porta se não for necessário acesso externo
5. Volumes
postgres_data— deve ser declarado comoexternal: true- Verificar se o volume está montado em
/var/lib/postgresql/data - Alertar se o volume não for externo (dados perdidos em redeploy)
- Verificar comentário sobre volume externo em VPS (alternativa
/mnt/VOLUME/pasta)
6. Réplicas
| Serviço | Réplicas Esperadas | Observação |
|---|---|---|
postgres |
1 | PostgreSQL standalone — não deve ter mais de 1 réplica sem configuração de cluster |
Alertar se houver mais de 1 réplica (pode causar corrupção de dados sem configuração de replicação adequada).
7. Recursos do Container
| Serviço | CPU Mínimo | Memória Máxima |
|---|---|---|
postgres |
"1" | 1024M |
- Alertar se memória for inferior a 512M (PostgreSQL pode ser instável)
- Verificar se os limites são adequados para o número de conexões configurado (
max_connections=200)
8. Configuração de Deploy
mode: replicated— deve serreplicatedplacement.constraints— deve incluirnode.role == manager- Verificar se há constraints adicionais de hostname para fixar o banco em um nó específico
entrypoint: docker-entrypoint.sh— deve estar presente
9. Redes
- O serviço deve estar na rede
network_swarm_public - A rede deve ser declarada como
external: true - Verificar se a exposição na rede pública do swarm é necessária ou se poderia ser uma rede interna
10. Segurança
POSTGRES_PASSWORDnão deve serSENHA(placeholder)POSTGRES_INITDB_ARGSdeve incluirscram-sha-256para autenticação segura- Porta 5432 exposta externamente — alertar como risco se não houver firewall configurado
- Verificar se
--wal_level=minimalé adequado (impede Point-in-Time Recovery)
Formato do Relatório de Saída
Ao final, produza um relatório estruturado:
# Relatório de Auditoria — postgres.yaml
Data: <data atual>
## Resumo
- Total de checks: X
- ✅ OK: X
- ⚠️ Atenções: X
- ❌ Erros: X
## Resultados por Categoria
### 1. Imagem
✅ pgvector/pgvector:pg18: suporte a pgvector disponível
⚠️ Tag `pg18` é aceitável mas considere fixar versão completa (ex: pg18.3)
...
### 2. Variáveis de Ambiente
❌ POSTGRES_PASSWORD: usando placeholder SENHA — troque antes do deploy
✅ POSTGRES_INITDB_ARGS: scram-sha-256 configurado
...
### 3. Comando
✅ max_connections=200: definido
⚠️ wal_level=minimal: sem suporte a PITR — adequado apenas se backup alternativo existir
...
### 4. Portas
⚠️ Porta 5432 exposta externamente — garanta que firewall está configurado
...
### 5. Volumes
✅ postgres_data: volume externo configurado
...
### 6. Réplicas
✅ postgres: 1 réplica (correto para standalone)
...
### 7. Recursos
✅ 1024M de memória configurada
...
### 8. Deploy
✅ node.role == manager: placement correto
...
### 9. Redes
⚠️ Serviço exposto na rede pública do swarm — considere rede interna se acesso externo não for necessário
...
### 10. Segurança
❌ POSTGRES_PASSWORD: placeholder SENHA detectado
⚠️ Porta 5432 exposta: certifique-se de que firewall bloqueia acesso externo
...
## Ações Recomendadas (por prioridade)
### Crítico (fazer antes do deploy)
1. ...
### Recomendado
1. ...
### Opcional
1. ...
More from promovaweb/skills-devops
promovaweb-devops-docker
Verifica o ambiente Docker do servidor — versão do Docker Engine, status do Swarm, nós do cluster, rede network_swarm_public, volumes externos e conformidade geral com as recomendações da Promovaweb.
10promovaweb-devops-review-evolution-go-stack
Verifica a Stack do Evolution Go. Além disso analisa parâmetros, rotas Traefik, volumes, recursos e conformidade do stack Evolution Go de Acordo com as Recomendações da Promovaweb.
9promovaweb-devops-dockerfile-basics
Aprenda os fundamentos do Dockerfile e as melhores práticas para criar imagens de container prontas para produção
9promovaweb-devops-docker-networking
Configure a rede (networking) do Docker para containers, incluindo bridge, overlay e service discovery
9promovaweb-devops-review-kestra-stack
Verifica a Stack do Kestra. Além disso analisa parâmetros, rotas Traefik, volumes, recursos e conformidade do stack Kestra de Acordo com as Recomendações da Promovaweb.
9promovaweb-devops-docker-swarm
Orquestração Docker Swarm, gerenciamento de cluster e implantações em produção
9