Infra: 2 servidores (Local Farmer + Hetzner) — Hub v2 + monitorización Beszel #5

Open
opened 2026-07-05 19:27:35 +00:00 by rafa · 0 comments
Owner

Contexto: ahora tenemos 2 servidores

Hasta ahora la infra era solo la máquina local. Desde el 2026-06-28 hay un segundo servidor (Hetzner) en producción 24/7. Este issue documenta la topología y el trabajo asociado (Hub v2 + monitorización).

🖥️ Servidor 1 — Local "Farmer" (WSL, i9 / RTX 5060 Ti)

  • No siempre encendido. Desarrollo + servicios auxiliares.
  • Acceso por Tailscale (farmer.taild3aaf6.ts.net).
  • Hub local hub-proxy (nginx:alpine, :8082) sirve el dashboard y proxya rutas: FeAdulta /fea/, Portfolio /portfolio/, YT /yt/, Gitea local /git/, Joomla /joomla/, OpenClaw /openclaw/, Triptyk /triptyk/, Jellyfin.

☁️ Servidor 2 — Hetzner (188.40.120.157, Coolify 4.1.2, 24/7)

Producción, gestionado solo con features estándar de Coolify (nada ad-hoc). Apps:

  • summaraise.com — WordPress (resúmenes de vídeo, público)
  • gitea.feadulta.com — Git self-hosted
  • rafacalvo.nyc — web personal / CV (static)
  • crm.ayqtalent.com — Relaticle CRM
  • Coolify panel :8000

Host legacy fuera de alcance: hosting cPanel de feadulta.com (134.0.10.170, Joomla), no gestionado por Coolify.


Trabajo 1 — Hub v2 (hecho )

Rediseño del dashboard local (~/.openclaw/workspace/index.html):

  • 2 columnas: 🖥️ Local (Farmer) | ☁️ Servidor (Hetzner), responsive (colapsa en móvil).
  • Widget «Cuotas IA»: barras 5h/Semana de Claude/Codex/MiniMax con % + hora/fecha de reset y umbrales verde/ámbar/rojo. Patrón fichero+fetch: scripts/refresh_quota.sh (cron */10) vuelca data/quota.json (reusa ytsummaries/scripts/quota.py); el JS hace fetch('/data/quota.json').
  • quota.json se sirve desde un directorio montado (data/) para que el mv atómico se vea dentro del contenedor. hub-up.sh documenta el docker run reproducible del hub.

Trabajo 2 — Monitorización con Beszel (en curso 🚧)

Monitor ligero (CPU/RAM/disco/red + contenedores) con alertas por umbral.

  • Beszel Hub desplegado en Hetzner vía Coolify one-click estándar (henrygd/beszel:0.18.7, servicio uuid t2x5c11ngqoaho4peffwy5xr). Reachable y healthy.
  • DNS: mon.rafacalvo.nyc → 188.40.120.157 (creado).
  • Agente Hetzner: incluido en el mismo servicio one-click (beszel-agent).

Pendiente

  • Coolify panel: fijar dominio del servicio Beszel a https://mon.rafacalvo.nyc:8090 + redeploy (genera router HTTPS + Let's Encrypt). (La API de servicios no permite setear dominio; se hace por panel — feature estándar.)
  • Beszel first-run (navegador): crear usuario admin → obtener universal token + clave pública.
  • Agente Hetzner: rellenar env KEY/TOKEN del beszel-agent (por API de Coolify) + redeploy → conecta.
  • Agente local (Farmer/WSL): henrygd/beszel-agent por docker run, conexión WebSocket saliente al hub (funciona detrás de NAT; reporta cuando el PC está encendido).
  • Alertas: Telegram (bot Hermes @whoppie_bot, chat 1018717061, shoutrrr) + Email (SMTP a definir) en la UI de Beszel.
  • Enlazar mon.rafacalvo.nyc desde la columna «Servidor» del Hub (placeholder Beszel ya presente).

Verificación

  • Hub: https://farmer.taild3aaf6.ts.net/ → 2 columnas + cuotas con ts fresco.
  • Beszel: dashboard en mon.rafacalvo.nyc (SSL OK), ambos agentes en verde, forzar un umbral → llega alerta Telegram + Email.
## Contexto: ahora tenemos **2 servidores** Hasta ahora la infra era solo la máquina local. Desde el 2026-06-28 hay un segundo servidor (Hetzner) en producción 24/7. Este issue documenta la topología y el trabajo asociado (Hub v2 + monitorización). ### 🖥️ Servidor 1 — Local "Farmer" (WSL, i9 / RTX 5060 Ti) - **No siempre encendido.** Desarrollo + servicios auxiliares. - Acceso por **Tailscale** (`farmer.taild3aaf6.ts.net`). - **Hub local** `hub-proxy` (nginx:alpine, :8082) sirve el dashboard y proxya rutas: FeAdulta `/fea/`, Portfolio `/portfolio/`, YT `/yt/`, Gitea local `/git/`, Joomla `/joomla/`, OpenClaw `/openclaw/`, Triptyk `/triptyk/`, Jellyfin. ### ☁️ Servidor 2 — Hetzner (188.40.120.157, Coolify 4.1.2, 24/7) Producción, gestionado **solo con features estándar de Coolify** (nada ad-hoc). Apps: - **summaraise.com** — WordPress (resúmenes de vídeo, público) - **gitea.feadulta.com** — Git self-hosted - **rafacalvo.nyc** — web personal / CV (static) - **crm.ayqtalent.com** — Relaticle CRM - **Coolify** panel `:8000` > Host legacy fuera de alcance: hosting cPanel de feadulta.com (134.0.10.170, Joomla), no gestionado por Coolify. --- ## Trabajo 1 — Hub v2 (hecho ✅) Rediseño del dashboard local (`~/.openclaw/workspace/index.html`): - **2 columnas**: 🖥️ Local (Farmer) | ☁️ Servidor (Hetzner), responsive (colapsa en móvil). - **Widget «Cuotas IA»**: barras 5h/Semana de Claude/Codex/MiniMax con % + hora/fecha de reset y umbrales verde/ámbar/rojo. Patrón fichero+fetch: `scripts/refresh_quota.sh` (cron `*/10`) vuelca `data/quota.json` (reusa `ytsummaries/scripts/quota.py`); el JS hace `fetch('/data/quota.json')`. - `quota.json` se sirve desde un **directorio montado** (`data/`) para que el `mv` atómico se vea dentro del contenedor. `hub-up.sh` documenta el `docker run` reproducible del hub. ## Trabajo 2 — Monitorización con **Beszel** (en curso 🚧) Monitor ligero (CPU/RAM/disco/red + contenedores) con alertas por umbral. - **Beszel Hub** desplegado en Hetzner vía **Coolify one-click estándar** (`henrygd/beszel:0.18.7`, servicio uuid `t2x5c11ngqoaho4peffwy5xr`). Reachable y `healthy`. - **DNS**: `mon.rafacalvo.nyc` → 188.40.120.157 (creado). - **Agente Hetzner**: incluido en el mismo servicio one-click (`beszel-agent`). ### Pendiente - [ ] **Coolify panel**: fijar dominio del servicio Beszel a `https://mon.rafacalvo.nyc:8090` + redeploy (genera router HTTPS + Let's Encrypt). *(La API de servicios no permite setear dominio; se hace por panel — feature estándar.)* - [ ] **Beszel first-run** (navegador): crear usuario admin → obtener *universal token* + clave pública. - [ ] **Agente Hetzner**: rellenar env `KEY`/`TOKEN` del `beszel-agent` (por API de Coolify) + redeploy → conecta. - [ ] **Agente local (Farmer/WSL)**: `henrygd/beszel-agent` por `docker run`, conexión WebSocket saliente al hub (funciona detrás de NAT; reporta cuando el PC está encendido). - [ ] **Alertas**: Telegram (bot Hermes `@whoppie_bot`, chat 1018717061, shoutrrr) + Email (SMTP a definir) en la UI de Beszel. - [ ] Enlazar `mon.rafacalvo.nyc` desde la columna «Servidor» del Hub (placeholder Beszel ya presente). ## Verificación - Hub: `https://farmer.taild3aaf6.ts.net/` → 2 columnas + cuotas con `ts` fresco. - Beszel: dashboard en `mon.rafacalvo.nyc` (SSL OK), ambos agentes en verde, forzar un umbral → llega alerta Telegram + Email.
Sign in to join this conversation.
No Label
1 Participants
Notifications
Due Date
No due date set.
Dependencies

No dependencies set.

Reference: rafa/server#5