Files
chemavxandClaude Fable 5 ae0b5f9492 feat(reddit-intel): manifiestos preparados, INACTIVOS hasta promoción
App corre en docker compose en n97 (semana de calibración). El app-of-apps
no es recursivo: nada de este directorio se sincroniza hasta aplicar a mano
argocd-app.yaml. Checklist de activación en PROMOTION.md (imagen construida,
secrets en Infisical /reddit-intel, copia de la BD al PVC).

Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
2026-07-06 17:14:06 +00:00

62 lines
3.3 KiB
Markdown

# reddit-intel — promoción de docker compose (n97) a k3s
Estado: **INACTIVO**. Los manifiestos de este directorio existen solo en git;
el app-of-apps `k8s-manifests` no es recursivo, así que ArgoCD no los
sincroniza. La app corre en docker compose en chemavx-n97
(`/opt/reddit-intel`, semana de calibración desde 2026-07-06).
## Checklist de activación (en este orden)
1. **Imagen en el registro.** Primer build manual, o `workflow_dispatch` del
workflow "Build reddit-intel image" en el repo
`git.chemavx.xyz/chemavx/reddit-intel` (requiere secrets `CI_TOKEN` y
`TELEGRAM_BOT_TOKEN` configurados en ese repo). El workflow actualiza el
tag de `deployment.yaml` aquí; si el build es manual, sustituir el
placeholder `:00000000` a mano por el sha8 real.
2. **Secrets en Infisical** (proyecto "homelab", env `prod`, path
`/reddit-intel`) — mismos valores que el `.env` del compose:
`reddit-client-id`, `reddit-client-secret`, `llm-api-key`,
`dashboard-auth-token`, `telegram-bot-token`, `telegram-chat-id`
(los dos de telegram pueden ir vacíos).
3. **Congelar el compose y copiar la BD al PVC:**
```bash
# en n97
cd /opt/reddit-intel && docker compose down # para la app (checkpoint WAL limpio)
/opt/reddit-intel/scripts/backup.sh # backup final pre-migración
# activar la app (crea PVCs y arranca el pod con BD vacía)
kubectl apply -f reddit-intel/argocd-app.yaml
kubectl -n reddit-intel rollout status deploy/reddit-intel
# parar el pod y volcar la BD del host al PVC
kubectl -n reddit-intel scale deploy/reddit-intel --replicas=0
kubectl -n reddit-intel run pvc-loader --image=busybox --restart=Never \
--overrides='{"spec":{"nodeSelector":{"kubernetes.io/hostname":"chemavx-n97"},"containers":[{"name":"pvc-loader","image":"busybox","command":["sleep","600"],"volumeMounts":[{"name":"data","mountPath":"/data"}]}],"volumes":[{"name":"data","persistentVolumeClaim":{"claimName":"reddit-intel-data"}}]}}'
kubectl -n reddit-intel wait --for=condition=Ready pod/pvc-loader
kubectl -n reddit-intel cp /opt/reddit-intel/data/reddit-intel.db pvc-loader:/data/reddit-intel.db
kubectl -n reddit-intel delete pod pvc-loader
kubectl -n reddit-intel scale deploy/reddit-intel --replicas=1
```
(El `docker compose down` previo garantiza que no hay `-wal`/`-shm`
pendientes: basta copiar el `.db`.)
4. **Verificar:** `kubectl -n reddit-intel logs deploy/reddit-intel` debe
mostrar `scheduler_start jobs=monitor,detector,analyzer,karma,learning`;
el dashboard responde vía `svc/reddit-intel` (port-forward o el ingress
que se decida — pendiente de elegir exposición).
5. **Desmantelar la fase compose:** quitar la línea del crontab de chemavx en
n97 (el CronJob `reddit-intel-db-backup` de aquí la reemplaza) y archivar
`/opt/reddit-intel` cuando la semana de convivencia confirme que todo va bien.
## Notas
- El CronJob de backup (`backup-cronjob.yaml`) replica el patrón researchowl:
`sqlite3 .backup` + `integrity_check` + retención 7, contra el PVC.
- Un solo replica siempre (`strategy: Recreate`): SQLite WAL + APScheduler
in-process no admiten dos pods.
- El namespace `reddit-intel` ya existe en el clúster (creado durante la
preparación); `CreateNamespace=true` lo cubre igualmente.