promovaweb-devops-review-postgres-stack

Compare original and translation side by side

🇺🇸

Original

English
🇨🇳

Translation

Chinese

Review PostgreSQL Stack

PostgreSQL栈审核

Executa uma auditoria completa do arquivo
postgres.yaml
e reporta conformidade, problemas e sugestões.
postgres.yaml
文件执行完整审计,并输出合规性、问题和改进建议。

Instruções de Execução

执行说明

Quando esta skill for invocada, siga exatamente este roteiro:
调用该技能时,请严格遵循以下流程:

Passo 1 — Ler o arquivo

步骤1 — 读取文件

Leia o arquivo
postgres.yaml
completo.
读取完整的
postgres.yaml
文件。

Passo 2 — Executar todos os checks abaixo

步骤2 — 执行以下所有检查项

Execute cada bloco de verificação e registre os resultados (✅ OK / ⚠️ Atenção / ❌ Erro).
逐一执行每个检查模块并记录结果(✅ 正常 / ⚠️ 警告 / ❌ 错误)。

Passo 3 — Gravar o resultado

步骤3 — 保存结果

Grave o relatório completo em um arquivo chamado postgres.audit.md.

将完整报告保存为名为postgres.audit.md的文件。

Checks de Verificação

检查项

1. Imagem

1. 镜像

  • 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)

  • 检查所用镜像是否为
    pgvector/pgvector:pg18
    (或其他支持pgvector的变体)
  • 如果使用无pgvector支持的
    postgres:latest
    需要告警,chatwoot运行需要pgvector支持
  • 如果镜像标签未固定大版本需要告警(例如
    pg18
    是可接受的,不推荐使用
    latest
    标签)
  • 检查PostgreSQL版本是否与其他依赖它的栈(n8n、chatwoot、metabase、kestra)兼容

2. Variáveis de Ambiente

2. 环境变量

  • 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
    )

  • POSTGRES_PASSWORD
    — 必须存在,且不能是占位符
    SENHA
  • POSTGRES_INITDB_ARGS
    — 检查是否包含
    --auth-host=scram-sha-256
    (安全认证配置)
  • 如果未定义
    POSTGRES_USER
    需要告警(默认会使用
    postgres
    用户)
  • 如果未定义
    POSTGRES_DB
    需要告警(默认库为
    postgres

3. Comando de Inicialização

3. 启动命令

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

检查
postgres
命令的参数:
  • --max_connections=200
    — 必须配置且符合预期负载要求
  • --wal_level=minimal
    — 无复制的部署场景下可接受;如果需要复制则需告警
  • --max_wal_senders=0
    — 与
    wal_level=minimal
    配置一致;如果需要复制则需告警
  • --port=5432
    — 必须使用默认端口

4. Portas Expostas

4. 暴露端口

  • 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

  • 5432:5432
    — 检查端口是否对外暴露
  • 生产环境下如果暴露5432端口需要告警(安全风险——数据库对外暴露),仅当防火墙配置为拦截外部访问时才可开启
  • 如果无需外部访问,建议使用Docker Swarm内部网络,不暴露端口

5. Volumes

5. 存储卷

  • 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
    )

  • postgres_data
    — 必须声明为
    external: true
  • 检查卷是否挂载到
    /var/lib/postgresql/data
    路径
  • 如果卷不是外部卷需要告警(重新部署时会丢失数据)
  • 检查VPS上外部卷的相关注释(可选路径
    /mnt/VOLUME/pasta

6. Réplicas

6. 副本数

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).

服务预期副本数说明
postgres
1独立部署的PostgreSQL——未配置集群时副本数不能超过1
如果副本数超过1需要告警(没有合理的复制配置时可能导致数据损坏)。

7. Recursos do Container

7. 容器资源

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
    )

服务最低CPU配置最大内存配置
postgres
"1"1024M
  • 如果内存低于512M需要告警(PostgreSQL可能运行不稳定)
  • 检查资源限制是否与配置的连接数匹配(
    max_connections=200

8. Configuração de Deploy

8. 部署配置

  • 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

  • mode: replicated
    — 必须为
    replicated
  • placement.constraints
    — 必须包含
    node.role == manager
  • 检查是否有额外的主机名约束,将数据库固定到指定节点
  • entrypoint: docker-entrypoint.sh
    — 必须存在

9. Redes

9. 网络配置

  • 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

  • 服务必须加入
    network_swarm_public
    网络
  • 该网络必须声明为
    external: true
  • 检查是否有必要暴露到Swarm公网,是否可以改用内部网络

10. Segurança

10. 安全配置

  • 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)

  • POSTGRES_PASSWORD
    不能是占位符
    SENHA
  • POSTGRES_INITDB_ARGS
    必须包含
    scram-sha-256
    以启用安全认证
  • 5432端口对外暴露——如果没有配置防火墙需要告警安全风险
  • 检查
    --wal_level=minimal
    配置是否合理(该配置不支持时间点恢复)

Formato do Relatório de Saída

输出报告格式

Ao final, produza um relatório estruturado:
undefined
执行完成后输出结构化报告:
undefined

Relatório de Auditoria — postgres.yaml

审计报告 — postgres.yaml

Data: <data atual>
日期: <当前日期>

Resumo

概览

  • Total de checks: X
  • ✅ OK: X
  • ⚠️ Atenções: X
  • ❌ Erros: X
  • 总检查项: X
  • ✅ 正常: X
  • ⚠️ 警告: X
  • ❌ 错误: X

Resultados por Categoria

各分类检查结果

1. Imagem

1. 镜像

✅ pgvector/pgvector:pg18: suporte a pgvector disponível ⚠️ Tag
pg18
é aceitável mas considere fixar versão completa (ex: pg18.3) ...
✅ pgvector/pgvector:pg18: 已支持pgvector ⚠️ 标签
pg18
可接受,但建议固定完整版本(例如pg18.3) ...

2. Variáveis de Ambiente

2. 环境变量

❌ POSTGRES_PASSWORD: usando placeholder SENHA — troque antes do deploy ✅ POSTGRES_INITDB_ARGS: scram-sha-256 configurado ...
❌ POSTGRES_PASSWORD: 使用了占位符SENHA — 部署前请修改 ✅ POSTGRES_INITDB_ARGS: 已配置scram-sha-256 ...

3. Comando

3. 启动命令

✅ max_connections=200: definido ⚠️ wal_level=minimal: sem suporte a PITR — adequado apenas se backup alternativo existir ...
✅ max_connections=200: 已配置 ⚠️ wal_level=minimal: 不支持PITR — 仅当有其他备份方案时该配置可接受 ...

4. Portas

4. 端口

⚠️ Porta 5432 exposta externamente — garanta que firewall está configurado ...
⚠️ 5432端口对外暴露 — 请确保防火墙已正确配置 ...

5. Volumes

5. 存储卷

✅ postgres_data: volume externo configurado ...
✅ postgres_data: 已配置外部卷 ...

6. Réplicas

6. 副本数

✅ postgres: 1 réplica (correto para standalone) ...
✅ postgres: 1个副本(独立部署配置正确) ...

7. Recursos

7. 资源配置

✅ 1024M de memória configurada ...
✅ 已配置1024M内存 ...

8. Deploy

8. 部署配置

✅ node.role == manager: placement correto ...
✅ node.role == manager: 调度配置正确 ...

9. Redes

9. 网络配置

⚠️ Serviço exposto na rede pública do swarm — considere rede interna se acesso externo não for necessário ...
⚠️ 服务暴露在Swarm公网 — 如果无需外部访问建议改用内部网络 ...

10. Segurança

10. 安全配置

❌ POSTGRES_PASSWORD: placeholder SENHA detectado ⚠️ Porta 5432 exposta: certifique-se de que firewall bloqueia acesso externo ...
❌ POSTGRES_PASSWORD: 检测到占位符SENHA ⚠️ 5432端口暴露: 请确认防火墙已拦截外部访问 ...

Ações Recomendadas (por prioridade)

建议操作(按优先级排序)

Crítico (fazer antes do deploy)

严重(部署前必须修复)

  1. ...
  1. ...

Recomendado

建议修复

  1. ...
  1. ...

Opcional

可选优化

  1. ...
undefined
  1. ...
undefined