CreaRack-SL

Hetzner OPS (crearack-ops) — runners CI + crons del ecosistema

Hetzner OPS (crearack-ops) — runners CI + crons del ecosistema

Servidor de operaciones del equipo, creado el 03-07-2026 (s193) para sacar TODO el mantenimiento automatizado de GitHub Actions (0 minutos) y descargar a STAGE de responsabilidades que no eran suyas. Desde la limpieza F3 (s201, 05-07-2026) es el ÚNICO host de crons del ecosistema.

Naturaleza: máquina RECREABLE. No guarda datos de negocio ni tiene rol DR — todo lo que corre aquí se reconstruye desde los repos + 4 secretos. Si se pierde, se re-provisiona con el playbook de §5 en <1h. El DR del workspace vive en STAGE (concept--infra--staging-server).

1. Hardware y red

  • Hetzner CX33 (4 vCPU / 8 GB), Ubuntu. Swapfile 2G (anti-OOM del build Astro).
  • IP pública: 178.104.244.255 · NetBird: 100.96.245.233 (acceso SSH habitual del equipo).
  • Node 22 + pnpm 9 + wrangler 4 + Python 3.12 + jq + Docker (para los runners).
  • ✅ Monitor UptimeRobot del host activo (monitor crearack-ops → 178.104.244.255, dado de alta el 04-07-2026; visible en el widget de servidores del workspace y vía get_uptime).

2. Runners self-hosted del CI (0 minutos de Actions)

  • 2 runners: crearack-ops-1 / crearack-ops-2, en usuarios AISLADOS runner / runner2 (el HOME compartido provocaba carreras en pnpm/action-setup, s193).
  • Sirven el CI de CreaRack-Pro (PR #250) y del workspace (PR #130).
  • Toolcache compartido /opt/hostedtoolcache con chmod -R g+w + ACL por defecto (footgun s196: un runner lo creaba 755 y el otro no podía cachear → EACCES en setup-node).
  • Higiene semanal: cron docker-prune (domingo 05:30, docker system prune -af --filter until=168h).

3. Crons (/etc/cron.d/ · scripts en /opt/)

El inventario detallado con frecuencias y objetivos es la tabla §4 de AUTOMATISMOS.md (fuente de verdad viva). Resumen de grupos:

GrupoQué cubre
bib-reindexgrafo de CreaRack-Pro: AST cada 10 min · extras (openapi+docs) cada hora · communities diario
bib-reindex-wsgrafo del workspace: supercontext (diario 00:45) · ts + claude-method (L+J) · chunks Pro (01:30) · wiki (01:00, dom --full)
biblioteca-cronsmantenimiento wiki: lint (04:30) · lint-consolidation (dom) · curator (L+J) · utility (L+M+V) · drift-check (06:00) · escriba (04:15) · enrich (02:50)
cf-pages-deploybuild+deploy del sitio workspace a CF Pages cada 10 min con debounce por SHA (palanca 1 anti-Actions, s188)
gh-actions-watchdogcada 5 min re-dispara ci.yml (Pro) / post-merge-ingest.yml (workspace) si un commit de main se queda sin runs (footgun “push triggers pausados”). Par del workspace corregido en s201 (antes apuntaba al deshabilitado cf-pages-deploy.yml → 422)
cron-heartbeatdead-man’s-switch cada 30 min: email si un cron no reporta [OK] dentro de su ventana
docker-prunehigiene semanal de los runners

4. Credenciales y clones

  • Deploy keys SSH (/root/.ssh/, read-only, tituladas crearack-ops (read-only) en GitHub): github_crearack → CreaRack-Pro · github_workspace → workspace · github_claude_method → claude-method. Las viejas de STAGE (staging-bib-reindex, hetzner-reindex ×2) se revocaron en la F3.
  • Tokens (chmod 600): /opt/bib-reindex/{.token,.cf-access-id,.cf-access-secret} (BIB_MCP_TOKEN + CF Access Service Token) · /opt/cf-pages-deploy/.env (token CF “hetzner-cf-pages-deploy”, scope Pages Write) · /opt/gh-actions-watchdog/.token (PAT fine-grained contents:read + actions:write sobre Pro y workspace, puesto el 03-07).
  • Clones (read-only, los refresca cada cron con pull --rebase --autostash): /opt/crearack-pro · /opt/crearacksl-workspace · /opt/claude-method · /opt/cf-pages-deploy/workspace (clone dedicado del deploy).

5. Réplica desde cero (playbook corto)

  1. Provisionar CX33 Ubuntu + alta en NetBird + swapfile 2G.
  2. Instalar Node 22, pnpm 9, wrangler 4, Python 3.12, jq, Docker.
  3. Generar 3 deploy keys nuevas → añadirlas read-only a los 3 repos → clonar en /opt/.
  4. Restaurar los 4 secretos de la bóveda (BIB_MCP_TOKEN, CF Access ST, token CF Pages, PAT watchdog).
  5. Copiar los /etc/cron.d/ y scripts desde los repos (los scripts viven en scripts/ de workspace y Pro; los de biblioteca-crons y heartbeat en /opt — ver AUTOMATISMOS.md §4).
  6. Runners CI: registrar 2 runners en la org con usuarios separados + ACL del toolcache (§2).
  7. Verificar: ejecución manual de cada grupo + heartbeat en [OK].

6. Impacto si OPS cae

Se paraEfectoDolor
Runners CIPRs de Pro/workspace sin checks (CI en cola infinita)Inmediato
cf-pages-deployel sitio workspace deja de reflejar pushes≤1 h
Reindex del grafobib_ask responde con datos rancios12-24 h
Crons wiki (lint/curator/…)drift documental sin vigilanciadías
Heartbeatnadie avisa de los crons — pero el host caído SÍ lo avisa UptimeRobot (crearack-ops)—

No afecta: DR del workspace, Dokploy, PROD, STAGE (viven en otros hosts).

Véase también

  • [[concept—infra—staging-server]]
  • [[runbook—infra—rotate-mcp-token]]
  • [[workspace—infra—servidor-ops]]
  • [[decision—20260614—rearquitectura-automatismos]]