promovaweb-devops-review-postgres-stack

Original🇺🇸 English
Translated

Verifica a Stack do PostgreSQL. Além disso analisa parâmetros, rotas Traefik, volumes, recursos e conformidade do stack PostgreSQL de Acordo com as Recomendações da Promovaweb.

9installs
Added on

NPX Install

npx skill4agent add promovaweb/skills-devops 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: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çoRéplicas EsperadasObservação
postgres
1PostgreSQL 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çoCPU MínimoMemó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. ...