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>
This commit is contained in:
@@ -0,0 +1,61 @@
|
||||
# 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.
|
||||
Reference in New Issue
Block a user