promovaweb-devops-review-postgres-stack

Installation
SKILL.md

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:latest sem suporte a pgvector, chatwoot precisa de pgvector para funcionar
  • Alertar se a tag não fixar uma versão major (ex: pg18 é aceitável, latest nã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 placeholder SENHA
  • POSTGRES_INITDB_ARGS — verificar se contém --auth-host=scram-sha-256 (autenticação segura)
  • Alertar se POSTGRES_USER não estiver definido (usa padrão postgres)
  • Alertar se não houver POSTGRES_DB definido (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 com wal_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 como external: 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 ser replicated
  • placement.constraints — deve incluir node.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_PASSWORD não deve ser SENHA (placeholder)
  • POSTGRES_INITDB_ARGS deve incluir scram-sha-256 para 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. ...
Related skills
Installs
8
GitHub Stars
4
First Seen
Mar 28, 2026
Security Audits