Runbook Operacional
0) Escopo
Operacao do backend WordPress do Dhedalos em:
- ambiente local com Docker Compose;
- ambientes Kubernetes provisionados por Helm, via pipeline GitHub Actions.
Este runbook cobre:
- execucao local;
- deploy;
- rollback;
- comandos de operacao;
- troubleshooting dos 5 incidentes mais provaveis.
0.1 Fontes de verdade
docker-compose.ymlDockerfilewp/wp-su.sh.github/workflows/ci-cd-pipeline.ymlhelm/Chart.yamlhelm/templates/_helpers.tplhelm/templates/deployment.yamlhelm/templates/wp-cron-deployment.yamlhelm/values.yamlkubernetes/oke-we-001/dhedalos-ecosystem/values.yamlkubernetes/oke-we-001/essencia-ecosystem/values.yamlkubernetes/oke-we-002/piloto-dhedalos-ecosystem/values.yamlwe-dhedalos/functions/wp/rest_path.phpwe-dhedalos/functions/rest/auth_callback.phpwe-dhedalos/functions.phpwe-dhedalos/functions/utils/cache.phpwe-dhedalos/functions/utils/notify_course_start_date_cron.phpwe-dhedalos/functions/utils/auto_cancel_enrollments_cron.phpwe-dhedalos/functions/utils/inactive_users_notification_cron.phpwe-dhedalos/functions/utils/last_day_notification_cron.php
1) Como rodar local
1.1 Pre-requisitos
- Docker + Docker Compose disponiveis.
- Porta
80livre (Nginx local) e3306livre (MariaDB local).
Evidencias:
docker-compose.yml:5docker-compose.yml:49
1.2 Subida
docker compose up -d --build
Servicos esperados:
mariadbrediswordpress(PHP-FPM)nginxinit(one-shot para copia de plugins)
Evidencias:
docker-compose.yml:2docker-compose.yml:56
1.3 Verificacao basica
docker compose ps
docker compose logs -f nginx wordpress mariadb redis
1.4 Smoke de aplicacao
curl -I http://localhost
curl --request GET --url 'http://localhost/api/dhedalos/v1/theme_settings'
curl --request GET \
--url 'http://localhost/api/dhedalos/v1/live/cycles' \
--header 'Authorization: Svc <API_SERVICE_TOKEN>'
Evidencias:
- Prefixo REST
/api:we-dhedalos/functions/wp/rest_path.php:5 - Callback token de servico:
we-dhedalos/functions/rest/auth_callback.php:2
2) Como deployar (pipeline atual)
2.1 Fluxo da pipeline
Workflow: .github/workflows/ci-cd-pipeline.yml
Passos implementados:
- checkout;
- normalizacao de tag de branch;
- login no Docker Registry;
- build e push da imagem;
- deploy Helm por branch alvo.
Evidencias:
.github/workflows/ci-cd-pipeline.yml:18.github/workflows/ci-cd-pipeline.yml:21.github/workflows/ci-cd-pipeline.yml:33.github/workflows/ci-cd-pipeline.yml:40
2.2 Mapeamento de ambientes
| Branch | Cluster | Namespace | Release Helm | Values file |
|---|---|---|---|---|
develop | oke-we-002 | piloto-dhedalos-ecosystem | dhedalos-app-backend-wp | kubernetes/oke-we-002/piloto-dhedalos-ecosystem/values.yaml |
main | oke-we-001 | dhedalos-ecosystem | dhedalos-app-backend-wp | kubernetes/oke-we-001/dhedalos-ecosystem/values.yaml |
main | oke-we-001 | essencia-ecosystem | essencia-app-backend-wp | kubernetes/oke-we-001/essencia-ecosystem/values.yaml |
development | oke-we-002 | dev-dhedalos-wp | dhedalos-app-backend-wp-dev | kubernetes/oke-we-002/dev-dhedalos-wp/values.yaml |
Evidencias:
.github/workflows/ci-cd-pipeline.yml:51.github/workflows/ci-cd-pipeline.yml:83.github/workflows/ci-cd-pipeline.yml:115.github/workflows/ci-cd-pipeline.yml:147
2.3 Comando-base de deploy (igual ao workflow)
helm dependency build helm
helm upgrade --install --create-namespace -n <namespace> <release> helm \
-f kubernetes/<cluster>/<namespace>/values.yaml \
--set image.repository=<registry/repository/name> \
--set image.tag=<github.sha>
Evidencias:
.github/workflows/ci-cd-pipeline.yml:77.github/workflows/ci-cd-pipeline.yml:78
2.4 Pre-checks antes de deploy manual
helm lint helm
helm dependency build helm
kubectl -n <namespace> get deploy,po,svc,ing
Observacao:
- nome final do deployment pode variar por
fullnameOverrideou combinacaorelease + chart.
Evidencias:
- Regra de naming:
helm/templates/_helpers.tpl:13 - Override em Essencia:
kubernetes/oke-we-001/essencia-ecosystem/values.yaml:1
2.5 Pos-checks apos deploy
kubectl -n <namespace> get deploy,pods
kubectl -n <namespace> rollout status deploy/<deployment-name>
kubectl -n <namespace> get ingress
Valide endpoint publico do ambiente:
- Piloto:
https://admin.piloto.sebraeingresse.com.br/api/dhedalos/v1/theme_settings - Producao:
https://admin.sebraeingresse.com.br/api/dhedalos/v1/theme_settings - Essencia:
https://admin.essencia.dhedalos.com/api/dhedalos/v1/theme_settings
Evidencias:
kubernetes/oke-we-002/piloto-dhedalos-ecosystem/values.yaml:8kubernetes/oke-we-001/dhedalos-ecosystem/values.yaml:9kubernetes/oke-we-001/essencia-ecosystem/values.yaml:11
3) Como rollback
3.1 Rollback Helm para revisao anterior
helm -n <namespace> history <release>
helm -n <namespace> rollback <release> <revision>
helm -n <namespace> status <release>
kubectl -n <namespace> rollout status deploy/<deployment-name>
3.2 Rollback por imagem (sha anterior)
Como o workflow publica image.tag=<github.sha>, tambem e possivel reexecutar deploy apontando para um SHA anterior conhecido:
helm upgrade --install --create-namespace -n <namespace> <release> helm \
-f kubernetes/<cluster>/<namespace>/values.yaml \
--set image.repository=<registry/repository/name> \
--set image.tag=<sha-anterior>
Evidencias:
- tag por SHA no workflow:
.github/workflows/ci-cd-pipeline.yml:48 - deploy com
--set image.tag:.github/workflows/ci-cd-pipeline.yml:80
4) Comandos uteis
4.1 Logs
Local:
docker compose logs -f nginx wordpress mariadb redis
Kubernetes:
kubectl -n <namespace> get deploy
kubectl -n <namespace> logs deploy/<deployment-name> -c dhedalos-app-backend-wp-phpfpm --tail=200 -f
kubectl -n <namespace> logs deploy/<deployment-name> -c dhedalos-app-backend-wp-nginx --tail=200 -f
Evidencias:
- nomes de containers:
helm/templates/deployment.yaml:49,helm/templates/deployment.yaml:85
4.2 Migrations
Nao foi encontrado framework de migrations dedicado (Laravel/Django/Doctrine) no repositorio.
Comandos relevantes de manutencao de schema WP:
docker compose exec wordpress wp core update-db
docker compose exec wordpress wp db query "SHOW TABLES LIKE '<prefix>user_patch_log';"
docker compose exec wordpress wp db query "SHOW TABLES LIKE '<prefix>simplybook_api_requests_log';"
docker compose exec wordpress wp db query "SHOW TABLES LIKE '<prefix>user_logs';"
Nota:
- substitua
<prefix>pelo prefixo real (WORDPRESS_TABLE_PREFIX), que por padrao local ewp_.
Observacoes de criacao automatica de tabelas customizadas:
user_patch_log: hookafter_switch_themeuser_logs: hookafter_setup_themesimplybook_api_requests_log: criado quandoSimpleBookLogTablee instanciada
Evidencias:
we-dhedalos/functions/utils/create_patch_log_table.php:8we-dhedalos/functions/utils/log_user.php:24we-dhedalos/functions/3rd/log.php:22
4.3 Cache clear
docker compose exec wordpress wp cache flush
docker compose exec wordpress wp transient delete --all
Comportamento automatico no codigo:
- flush global em
pre_post_update.
Evidencias:
we-dhedalos/functions/utils/cache.php:28we-dhedalos/functions/utils/cache.php:33
4.4 Assincrono (cron worker / queue restart equivalente)
Nao existe fila baseada em broker (RabbitMQ/SQS/Kafka) neste repositorio. O processamento assincrono e feito por WP-Cron, com:
- execucao manual/local via WP-CLI;
- deployment dedicado
wp-cronno Kubernetes (loop a cada 10 minutos).
Operacao local:
docker compose exec wordpress wp cron event list
docker compose exec wordpress wp cron event run --due-now
Operacao Kubernetes:
kubectl -n <namespace> get deploy
kubectl -n <namespace> logs deploy/<release>-wp-cron -c wp-cron --tail=200 -f
kubectl -n <namespace> exec deploy/<release>-wp-cron -c wp-cron -- \
wp cron event run --due-now --allow-root --path=/var/www/html
Executar hooks especificos (quando necessario, local):
docker compose exec wordpress wp cron event run course_start_today_notify
docker compose exec wordpress wp cron event run auto_cancel_enrollments_daily
docker compose exec wordpress wp cron event run inactive_users_notification_daily
docker compose exec wordpress wp cron event run last_day_notification_daily
Evidencias:
we-dhedalos/functions/utils/notify_course_start_date_cron.php:19we-dhedalos/functions/utils/auto_cancel_enrollments_cron.php:31we-dhedalos/functions/utils/inactive_users_notification_cron.php:31we-dhedalos/functions/utils/last_day_notification_cron.php:31helm/templates/wp-cron-deployment.yaml:4helm/templates/wp-cron-deployment.yaml:54helm/templates/wp-cron-deployment.yaml:89helm/templates/wp-cron-deployment.yaml:91
4.5 Comandos WP-CLI no container
A imagem instala wrapper wp para executar como www-data:
docker compose exec wordpress wp --info
Evidencias:
Dockerfile:16wp/wp-su.sh:4
5) Troubleshooting (top 5)
5.1 401 auth em rotas de servico
Sintoma:
- endpoints com
rest_auth_validate_tokennegam acesso.
Diagnostico:
- Verifique valor de
API_SERVICE_TOKENno runtime. - Verifique header
Authorization: Svc <token>. - Confirme se a rota realmente exige token.
Checks:
curl --request GET \
--url 'http://localhost/api/dhedalos/v1/live/cycles' \
--header 'Authorization: Svc <API_SERVICE_TOKEN>'
Evidencias:
we-dhedalos/functions/rest/auth_callback.php:3docker-compose.yml:40
5.2 Timeout em integracoes externas
Sintoma:
- lentidao/erro em agenda, notificacao ou limpeza de arquivos externos.
Diagnostico:
- Ver logs do
wordpress. - Validar variaveis de integracao (Novu, API de submissions).
- Validar disponibilidade dos endpoints externos.
Checks:
docker compose logs --tail=200 wordpress
Evidencias de timeout no codigo:
- submissions:
we-dhedalos/functions.php:104 - simplybook cURL:
we-dhedalos/functions/3rd/simplybook.php:127
5.3 Cron nao rodando
Sintoma:
- notificacoes/cancelamentos diarios nao executam.
Diagnostico:
- Listar eventos cron.
- Rodar eventos vencidos manualmente.
- Em Kubernetes, confirmar se o deployment
wp-cronesta em execucao e sem restart anormal. - Testar gatilhos admin por query string.
Checks:
docker compose exec wordpress wp cron event list
docker compose exec wordpress wp cron event run --due-now
kubectl -n <namespace> get deploy,pods | grep wp-cron
kubectl -n <namespace> logs deploy/<release>-wp-cron -c wp-cron --tail=200
Gatilhos admin implementados:
?executar_limpeza_atividades_submetidas=1?execute_auto_cancel_enrollments=1?execute_inactive_users_notification=1?execute_last_day_notification=1
Evidencias:
we-dhedalos/functions.php:54we-dhedalos/functions/utils/auto_cancel_enrollments_cron.php:23we-dhedalos/functions/utils/inactive_users_notification_cron.php:23we-dhedalos/functions/utils/last_day_notification_cron.php:23helm/templates/wp-cron-deployment.yaml:4helm/templates/wp-cron-deployment.yaml:87
5.4 Processamento assincrono parado
Sintoma:
- backlog de processamento assincrono.
Diagnostico no contexto deste repo:
- nao existe fila baseada em broker;
- backlog normalmente equivale a eventos WP-Cron pendentes ou falha no deployment
wp-cron.
Acao:
- Aplicar diagnostico de cron (item 5.3).
- Verificar logs do container
wp-cron. - Verificar se hooks de cron esperados existem na lista de eventos.
Evidencias:
we-dhedalos/functions.php:45we-dhedalos/functions/utils/notify_course_start_date_cron.php:8helm/templates/wp-cron-deployment.yaml:54
5.5 CORS
Sintoma:
- browser bloqueia chamadas cross-origin para
/api/*.
Diagnostico:
- Confirmar origem chamadora e host de API.
- Verificar configuracao de Ingress (anotacoes e controlador).
- Verificar Nginx versionado (nao ha bloco explicito de CORS no repo).
Checks:
kubectl -n <namespace> get ingress -o yaml
Evidencias:
docker/nginx.conf:1kubernetes/oke-we-001/dhedalos-ecosystem/values.yaml:3kubernetes/oke-we-002/piloto-dhedalos-ecosystem/values.yaml:2
6) Pendencias
- O caminho
kubernetes/oke-we-002/dev-dhedalos-wp/values.yamle referenciado no workflow, mas nao foi encontrado no estado atual do repositorio.- Evidencia:
.github/workflows/ci-cd-pipeline.yml:174
- Evidencia:
- Nao existe job dedicado de rollback na pipeline atual.
- Evidencia:
.github/workflows/ci-cd-pipeline.yml:50
- Evidencia:
- Nao foi identificado sistema de fila com broker neste repositorio (somente WP-Cron).
- Evidencia:
we-dhedalos/functions.php:45
- Evidencia: