Infraestrutura k8s para staging

TLDR: Adiciona .infra/ com Terraform + Kustomize para fazer o deploy do onion-backend no Kubernetes em staging (e production).

Contexto

O onion-backend era deployado via supervisor numa VM. O objetivo é migrar para Kubernetes usando o mesmo padrão Terraform + Kustomize já adotado por outros projetos wehive (marketing-automation, gateway).

Objetivos

  • Deployar web, worker, beat e habits-worker como Deployments k8s separados
  • Provisionar PostgreSQL e Valkey/Redis via clusters gerenciados da DigitalOcean
  • Usar RabbitMQ (compartilhado) como broker em staging; SQS em production
  • DNS via Cloudflare: staging.onion.ibft.app / onion.ibft.app
  • Secrets gerenciados com SOPS + age, aplicados via Terraform

Fora de escopo

— (não registrado na spec original)

Mudanças

  • .infra/terraform/backend.tf — backend de state S3 em DO Spaces (onion/backend/)
  • .infra/terraform/versions.tf — providers requeridos
  • .infra/terraform/data.tf — secrets SOPS, remote states, configuração de provider
  • .infra/terraform/main.tf — locals de workspace → namespace/fqdn
  • .infra/terraform/namespace.tf — onion-staging / onion-production
  • .infra/terraform/database.tf — PostgreSQL 16 gerenciado da DO + user + job de grants
  • .infra/terraform/cache.tf — Valkey 8 gerenciado da DO
  • .infra/terraform/messagebroker.tf — vhost/user RabbitMQ (só staging, count condicional)
  • .infra/terraform/secrets.tf — ConfigMap + Secret com todas as env vars
  • .infra/terraform/kustomize.tf — aplica os overlays e faz patch da tag da imagem a partir do secret app_version
  • .infra/terraform/dns.tf — registro A no Cloudflare
  • .infra/terraform/secrets/staging.yaml.example — template de secrets de staging
  • .infra/terraform/secrets/production.yaml.example — template de secrets de production
  • .infra/k8s/base/ — manifests base: web deployment+service, worker, beat, habits-worker, ingress
  • .infra/k8s/overlays/staging/ — namespace, host do ingress, 1 réplica cada
  • .infra/k8s/overlays/production/ — namespace, host do ingress, 2 réplicas, mais recursos
  • Makefile — adiciona include .commons/make/shared/terraform.mk
  • .gitignore — adiciona entradas de state do terraform e .terraform/

Como verificar

```bash # 1. Inicializar secrets make terraform.secrets.staging.init

2. Preview

make terraform.staging.plan

3. Apply

make terraform.staging.apply

4. Checar pods

kubectl get pods -n onion-staging ```

Os quatro deployments (onion-web, onion-worker, onion-beat, onion-habits-worker) devem estar Running.

Documentação

— (não registrado na spec original)