promovaweb-devops-review-mysql-stack

Installation
SKILL.md

Review MySQL (Percona) Stack

Executa uma auditoria completa do arquivo mysql.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 os arquivos

Leia o arquivo mysql.yaml completo. Leia também mautic.yaml para verificar a consistência das credenciais de banco usadas pelos serviços dependentes.

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 mysql.audit.md.


Checks de Verificação

1. Imagem (Percona)

Verifique o anchor x-percona-image:

  • A imagem deve ser percona/percona-server:<versão> (não mysql:latest)
  • A versão deve ser fixada (ex: 8.4.7) — não usar latest em produção
  • Verificar se a versão é compatível com os clients MySQL dos serviços dependentes (Mautic)

2. Variáveis de Ambiente

Verifique o anchor x-percona-env:

  • MYSQL_ROOT_PASSWORD — deve existir e não deve ser o placeholder SENHA_ROOT
  • Verificar se MYSQL_DATABASE está definido para o banco do Mautic (ex: mautic)
  • Verificar se MYSQL_USER está definido para o usuário do Mautic (ex: mautic)
  • Verificar se MYSQL_PASSWORD está definido para o usuário do Mautic — não deve ser SENHA_MAUTIC
  • Alertar se apenas MYSQL_ROOT_PASSWORD estiver definido (serviços devem usar usuário dedicado, não root)

3. Serviço

Verifique se o serviço mysql está presente e corretamente configurado.


4. Portas Expostas

  • 3306:3306 — verificar se a porta está exposta externamente
  • Alertar se a porta 3306 estiver exposta em produção (risco de segurança)
  • Recomendar uso de rede interna Docker Swarm sem exposição de porta se não for necessário acesso externo

5. Volumes

  • percona_data — deve ser declarado como external: true
  • Verificar se o volume está montado em /var/lib/mysql
  • Alertar se o volume não for externo (dados perdidos em redeploy)

6. Réplicas

Serviço Réplicas Esperadas Observação
mysql 1 MySQL 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
mysql "1" 1024M
  • Alertar se memória for inferior a 512M
  • Verificar se os limites são adequados para a carga esperada

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
  • Verificar se há update_config com failure_action: rollback

9. Redes

  • O serviço deve estar na rede network_swarm_public
  • A rede deve ser declarada como external: true

10. Segurança

  • MYSQL_ROOT_PASSWORD não deve ser SENHA_ROOT (placeholder)
  • MYSQL_PASSWORD não deve ser SENHA_MAUTIC (placeholder)
  • Porta 3306 exposta externamente — alertar como risco se não houver firewall configurado
  • Recomendar uso de usuário dedicado por aplicação (não root)
  • Verificar se o usuário mautic tem permissões apenas no banco mautic (princípio do menor privilégio)

Formato do Relatório de Saída

Ao final, produza um relatório estruturado:

# Relatório de Auditoria — mysql.yaml
Data: <data atual>

## Resumo
- Total de checks: X
- ✅ OK: X
- ⚠️ Atenções: X
- ❌ Erros: X

## Resultados por Categoria

### 1. Imagem
✅ percona/percona-server:8.4.7: versão fixada
...

### 2. Variáveis de Ambiente
❌ MYSQL_ROOT_PASSWORD: usando placeholder SENHA_ROOT — troque antes do deploy
⚠️ MYSQL_USER/MYSQL_PASSWORD: não definidos — serviços como Mautic usarão root?
...

### 3. Serviço
✅ mysql: presente

### 4. Portas
⚠️ Porta 3306 exposta externamente — garanta que firewall está configurado
...

### 5. Volumes
✅ percona_data: volume externo configurado em /var/lib/mysql
...

### 6. Réplicas
✅ mysql: 1 réplica (correto para standalone)
...

### 7. Recursos
✅ 1024M de memória configurada
...

### 8. Deploy
✅ node.role == manager: placement correto
⚠️ update_config não definido
...

### 9. Redes
✅ network_swarm_public: configurado como external
...

### 10. Segurança
❌ MYSQL_ROOT_PASSWORD: placeholder SENHA_ROOT detectado
⚠️ Porta 3306 exposta: certifique-se de que firewall bloqueia acesso externo
⚠️ Sem usuário dedicado para Mautic — use MYSQL_USER/MYSQL_DATABASE/MYSQL_PASSWORD
...

## 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