promovaweb-devops-review-portainer-stack
Compare original and translation side by side
🇺🇸
Original
English🇨🇳
Translation
ChineseReview Portainer Stack
Portainer栈审核
Executa uma auditoria completa do arquivo e reporta conformidade, problemas e sugestões.
portainer.yaml对文件执行完整审计,输出合规性结果、问题以及优化建议。
portainer.yamlInstruções de Execução
执行说明
Quando esta skill for invocada, siga exatamente este roteiro:
调用该skill时,请严格遵循以下流程:
Passo 1 — Ler o arquivo
步骤1 — 读取文件
Leia o arquivo completo.
portainer.yaml读取完整的文件。
portainer.yamlPasso 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 portainer.audit.md.
将完整报告保存为名为portainer.audit.md的文件。
Checks de Verificação
检查项
1. Imagens
1. 镜像
Verifique as imagens dos serviços:
Agent:
- Deve usar ou versão estável (
portainer/agent:sts)portainer/agent:<versão> - Alertar se estiver usando tag instável em produção
Portainer CE:
- Deve usar ou versão estável
portainer/portainer-ce:sts - Verificar se a tag (Short Term Support) é adequada ou se
sts(Long Term Support) é mais apropriado para produçãolts
检查服务使用的镜像:
Agent:
- 必须使用或稳定版本(
portainer/agent:sts)portainer/agent:<版本号> - 生产环境使用不稳定标签需给出告警
Portainer CE:
- 必须使用或稳定版本
portainer/portainer-ce:sts - 检查(Short Term Support)标签是否适用,或者
sts(Long Term Support)是否更适合生产环境lts
2. Serviços Obrigatórios
2. 必选服务
Verifique se todos estes serviços estão presentes:
| Serviço | Obrigatório |
|---|---|
| Sim |
| Sim |
检查是否包含以下所有服务:
| 服务 | 是否必选 |
|---|---|
| 是 |
| 是 |
3. Comando do Portainer
3. Portainer启动命令
Verifique o comando do serviço :
portainer- Deve conter — aponta para o serviço agent via DNS do Swarm
-H tcp://tasks.agent:9001 - Deve conter — permite comunicação sem TLS entre portainer e agent (aceitável em rede interna)
--tlsskipverify - Alertar se a URL do agent não usar (nome de serviço do Swarm)
tasks.agent
检查服务的启动命令:
portainer- 必须包含— 通过Swarm的DNS指向agent服务
-H tcp://tasks.agent:9001 - 必须包含— 允许Portainer和agent之间无需TLS通信(内部网络可接受)
--tlsskipverify - 若agent的URL没有使用(Swarm服务名)需给出告警
tasks.agent
4. Modo de Deploy
4. 部署模式
Agent:
- Deve usar — garante que um agent roda em cada nó do Swarm
mode: global - Alertar se não for (agents ausentes em alguns nós)
global
Portainer:
- Deve usar com
mode: replicatedreplicas: 1 - Alertar se tiver mais de 1 réplica (Portainer CE não suporta HA nativo)
Agent:
- 必须使用— 确保Swarm的每个节点上都运行一个agent
mode: global - 若不是模式需给出告警(部分节点无agent运行)
global
Portainer:
- 必须使用且
mode: replicatedreplicas: 1 - 若副本数超过1需给出告警(Portainer CE原生不支持高可用)
5. Placement Constraints
5. 部署位置约束
Agent:
- Deve ter — garante compatibilidade com nós Linux
node.platform.os == linux - Não deve ter (agent deve rodar em todos os nós)
node.role == manager
Portainer:
- Deve ter — interface web acessível apenas no manager
node.role == manager
Agent:
- 必须配置— 确保与Linux节点兼容
node.platform.os == linux - 不能配置(agent需要在所有节点上运行)
node.role == manager
Portainer:
- 必须配置— Web界面仅在manager节点可访问
node.role == manager
6. Volumes do Agent
6. Agent卷配置
Agent:
- — obrigatório para comunicação com Docker
/var/run/docker.sock:/var/run/docker.sock - — obrigatório para gerenciamento de volumes
/var/lib/docker/volumes:/var/lib/docker/volumes
Alertar se algum desses volumes estiver ausente no agent.
Agent:
- — 与Docker通信的必选项
/var/run/docker.sock:/var/run/docker.sock - — 卷管理的必选项
/var/lib/docker/volumes:/var/lib/docker/volumes
如果agent缺少以上任意卷配置需给出告警。
7. Volume do Portainer
7. Portainer卷配置
- — deve ser declarado como
portainer_dataexternal: true - Verificar se está montado em
/data - Alertar se o volume não for externo (dados de configuração perdidos em redeploy)
- — 必须声明为
portainer_dataexternal: true - 检查是否挂载到路径
/data - 若卷不是外部卷需给出告警(重新部署时配置数据会丢失)
8. Portas Expostas
8. 暴露端口
Portainer:
- — porta HTTP do Portainer
9000:9000 - Verificar se esta porta é necessária ou se apenas Traefik (HTTPS) é suficiente
- Alertar se porta 9000 exposta e Traefik também configurado (redundante)
Agent:
- Não deve ter portas expostas publicamente (comunicação apenas interna via Swarm)
Portainer:
- — Portainer的HTTP端口
9000:9000 - 检查该端口是否必要,或者是否仅Traefik(HTTPS)即可满足需求
- 若同时暴露9000端口且配置了Traefik需给出告警(配置冗余)
Agent:
- 不能公网暴露端口(仅通过Swarm进行内部通信)
9. Rotas Traefik
9. Traefik路由
Para o serviço , verifique:
portainerÂncora de endereço ():
x-portainer-app-url- A âncora deve existir e conter um domínio válido (não placeholder como
x-portainer-app-url)painel.seudominio.com.br - O domínio na âncora deve ser idêntico ao domínio dentro de na label
Host(...)traefik.http.routers.portainer.rule - Se não forem iguais, reportar como ❌ Erro: inconsistência entre e a regra Traefik
x-portainer-app-url
Labels obrigatórias:
traefik.enable=truetraefik.swarm.network=network_swarm_public- — deve conter
traefik.http.routers.portainer.rulecom domínio válido e coincidir comHost(...)x-portainer-app-url traefik.http.routers.portainer.entrypoints=websecuretraefik.http.routers.portainer.tls.certresolver=letsencryptresolvertraefik.http.routers.portainer.service=portainertraefik.http.services.portainer.loadbalancer.server.port=9000- — verificar se é adequado
traefik.http.routers.portainer.priority=1
Regras:
- O não deve ter labels Traefik (serviço interno)
agent
检查服务的以下配置:
portainer地址锚点():
x-portainer-app-url- 必须存在锚点且包含有效域名(不能是
x-portainer-app-url这类占位符)painel.seudominio.com.br - 锚点中的域名必须与标签中
traefik.http.routers.portainer.rule内的域名完全一致Host(...) - 若不一致,标记为❌ 错误:与Traefik规则不一致
x-portainer-app-url
必选标签:
traefik.enable=truetraefik.swarm.network=network_swarm_public- — 必须包含
traefik.http.routers.portainer.rule且配置有效域名,与Host(...)一致x-portainer-app-url traefik.http.routers.portainer.entrypoints=websecuretraefik.http.routers.portainer.tls.certresolver=letsencryptresolvertraefik.http.routers.portainer.service=portainertraefik.http.services.portainer.loadbalancer.server.port=9000- — 检查配置是否合理
traefik.http.routers.portainer.priority=1
规则:
- 不能配置Traefik标签(内部服务)
agent
10. Redes
10. 网络
Agent:
- Deve estar na rede
network_swarm_public
Portainer:
- Deve estar na rede
network_swarm_public - A rede deve ser declarada como
external: true
Agent:
- 必须加入网络
network_swarm_public
Portainer:
- 必须加入网络
network_swarm_public - 该网络必须声明为
external: true
11. Segurança
11. 安全
- na comunicação portainer-agent — aceitável em rede interna, mas documentar
--tlsskipverify - Porta 9000 exposta + Traefik: considere remover a exposição de porta direta
- Portainer CE por padrão não tem autenticação além do login — garanta senha forte no primeiro acesso
- Verificar se o domínio configurado no Traefik tem acesso restrito (recomendado proteger com IP allowlist)
- portainer与agent通信配置— 内部网络可接受,但需记录说明
--tlsskipverify - 同时暴露9000端口+配置Traefik:建议移除直接端口暴露
- Portainer CE默认仅支持登录认证 — 首次访问需设置强密码
- 检查Traefik中配置的域名是否做了访问限制(建议配置IP白名单保护)
Formato do Relatório de Saída
输出报告格式
Ao final, produza um relatório estruturado:
undefined执行完成后,输出结构化的报告:
undefinedRelatório de Auditoria — portainer.yaml
审计报告 — portainer.yaml
Data: <data atual>
日期: <当前日期>
Resumo
摘要
- Total de checks: X
- ✅ OK: X
- ⚠️ Atenções: X
- ❌ Erros: X
- 总检查项: X
- ✅ 正常: X
- ⚠️ 注意: X
- ❌ 错误: X
Resultados por Categoria
分类检查结果
1. Imagens
1. 镜像
✅ portainer/agent:sts: tag definida
⚠️ Tag (Short Term Support): considere para ambientes de produção estáveis
...
stslts✅ portainer/agent:sts: 标签配置正常
⚠️ (短期支持)标签:稳定生产环境建议使用标签
...
stslts2. Serviços
2. 服务
✅ agent: presente
✅ portainer: presente
✅ agent: 已配置
✅ portainer: 已配置
3. Comando
3. 启动命令
✅ portainer: -H tcp://tasks.agent:9001 --tlsskipverify correto
...
✅ portainer: -H tcp://tasks.agent:9001 --tlsskipverify 配置正确
...
4. Modo de Deploy
4. 部署模式
✅ agent: mode global (correto para todos os nós)
✅ portainer: mode replicated, 1 réplica
...
✅ agent: global模式(适配所有节点,配置正确)
✅ portainer: replicated模式,1个副本
...
5. Placement
5. 部署位置约束
✅ agent: node.platform.os == linux
✅ portainer: node.role == manager
...
✅ agent: node.platform.os == linux 配置正确
✅ portainer: node.role == manager 配置正确
...
6. Volumes Agent
6. Agent卷配置
✅ docker.sock: montado
✅ docker volumes: montado
...
✅ docker.sock: 已挂载
✅ docker volumes: 已挂载
...
7. Volume Portainer
7. Portainer卷配置
✅ portainer_data: volume externo em /data
...
✅ portainer_data: 已配置为外部卷,挂载到/data路径
...
8. Portas
8. 端口
⚠️ Porta 9000 exposta e Traefik configurado — considere remover exposição direta de porta
...
⚠️ 同时暴露9000端口且配置了Traefik — 建议移除直接端口暴露
...
9. Rotas Traefik
9. Traefik路由
✅ portainer: rota Host correta, TLS ok
✅ agent: sem Traefik (correto)
...
✅ portainer: Host路由配置正确,TLS配置正常
✅ agent: 未配置Traefik(配置正确)
...
10. Redes
10. 网络
✅ network_swarm_public: configurado como external
...
✅ network_swarm_public: 已配置为外部网络
...
11. Segurança
11. 安全
⚠️ --tlsskipverify: documentar que comunicação interna é confiável
⚠️ Configure senha forte no primeiro acesso ao Portainer
⚠️ Considere adicionar IP allowlist no Traefik para o Portainer
...
⚠️ --tlsskipverify: 需记录说明内部通信是可信的
⚠️ Portainer首次访问需设置强密码
⚠️ 建议在Traefik中为Portainer添加IP白名单限制
...
Ações Recomendadas (por prioridade)
建议操作(按优先级排序)
Crítico (fazer antes do deploy)
严重(部署前必须修复)
- ...
- ...
Recomendado
建议优化
- ...
- ...
Opcional
可选优化
- ...
undefined- ...
undefined