Skip to content

Architecture overview

Vista de pájaro del cluster. Para detalle de decisiones, ver ADR-0007. Para IPs concretas y puertos, ver Reference → Inventory.

Hardware

Equipo Modelo CPU RAM Storage Rol
pmx-50 Mini-PC Ryzen AMD Ryzen 7 7735HS (8c/16t) ~29 GB DDR5 NVMe + ZFS-HA Proxmox nodo primario (workloads pesados)
pmx-51 Mini-PC Celeron Intel Celeron N5095 (4c/4t) ~8 GB DDR4 NVMe + ZFS-HA Proxmox nodo secundario (HA/quorum)
NAS TerraMaster F4-423 Intel N5105 (4c) 16 GB 4×6TB RAID5 22TB + Crucial P310 500GB cache Bulk storage, NFS exports, SMART telemetry
Pi-hole Raspberry Pi 4 ARM Cortex-A72 4 GB SD DNS interno + sinkhole, monitorizada
Router ASUS TUF-AX6000 Gateway/NAT/DHCP en 192.168.0.1. No es "router Movistar" — ese dato quedó obsoleto

Topología

graph TB
    subgraph Internet["Internet"]
        CFNET[Cloudflare
Tunnel + Access] end subgraph LAN["LAN 192.168.0.0/24"] ROUTER[ASUS TUF-AX6000
.1] PIHOLE[Pi-hole
.204] NAS[(NAS F4-423
.20)] TV[LG TV
.227] subgraph PMX50["pmx-50 — Ryzen"] VM171[VM 171
Home Assistant
.171] VM208[VM 208
media-server
.208] LXC100[CT 100
clawdbot
.203] LXC186[LXC 186
PBS
.22] LXC251[LXC 251
RAG
.202] LXC270[LXC 270
caddy-primary
.40] LXC110[LXC 110
tv-gw
.210] end subgraph PMX51["pmx-51 — Celeron"] LXC123[LXC 123
cloudflared
.207] LXC200[LXC 200
n8n
.200] LXC271[LXC 271
caddy-secondary
.41] end VIP{{VIP .250
keepalived}} end CFNET --> LXC123 LXC123 --> VIP VIP -.MASTER.-> LXC270 VIP -.BACKUP.-> LXC271 LXC270 --> VM208 LXC271 --> VM208 LXC110 --> TV PIHOLE --> ROUTER VM208 --> NAS style VIP fill:#ff6b6b,color:#fff style VM208 fill:#ffd43b style LXC270 fill:#51cf66 style LXC271 fill:#51cf66

Workloads principales

ID Nodo Propósito Notas
VM 208 pmx-50 Hub Docker — ~90 containers, ~76 running (verificado 2026-08-01; resto duermen vía Sablier). Loki, Prom, Grafana, arr, Immich, Vaultwarden, PocketID, etc. Container Caddy eliminado* post-F4.f. SPOF backends; Caddy HA ya desacoplado en LXCs
VM 171 pmx-50 Home Assistant OS Backups solo a NAS, no Time Machine
LXC 270 pmx-50 Caddy primary (VIP MASTER).40 (movido de .247) — full routing, source-of-truth post-F4.f homelab-ctl.py auto-rsync managed.caddy + .env
LXC 271 pmx-51 Caddy secondary (VIP BACKUP).41 (movido de .248) — full routing Mismo managed.caddy vía homelab-ctl + Ansible
LXC 123 pmx-51 cloudflared (CF Tunnel daemon) — .207 Apunta a VIP .250 post-F4
CT 100 pmx-50 clawdbot (OpenClaw).203 — AI assistant, Telegram @Veraclawd_bot VMID migró 253→100. LXC 101 (hermesbot) destruido 2026-07-05; OpenClaw sigue vivo
LXC 200 pmx-51 n8n + alert forwarder Webhook receiver Alertmanager → Telegram
LXC 186 pmx-50 Proxmox Backup Server — .22 (movido de .186) Datastore main al 41% usado (verificado 2026-08-01)
LXC 251 pmx-50 RAG (offline-kit) + Kiwix ZIM — .202 (movido de .188) Wikipedia/Appropedia, ZIM HTTP
LXC 110 pmx-50 tv-gw — L3 gateway monitoring para LG TV Captura tráfico, ADR-0001
LXC 172 pmx-50 ha-ml — modelo arrival_predictor — .201 Features F7 pendientes
CT 280 pmx-50 rp-server — .205 (movido de .196)
CT 281 pmx-50 wp-pulse-host — host WordPress Pulse .211

CT 102 iarq-backup-target está DESTRUIDO (confirmado 2026-08-01, ya no existe en pvesh get /cluster/resources) — quitado de esta tabla. LXC 249 (beszel) y LXC 250 (kiwix, no confundir con el ZIM de LXC 251) también destruidos.

Principios de diseño

  1. Single ingress — todo HTTP externo entra por CF Tunnel → VIP .250 → LXC 270/271 Caddy (full routing) → backends 192.168.0.208:<host_port>. No port forward en router.
  2. GitOps source of truth — configs PVE, observability, Caddy, crons en monxas/homelab-infra. Ansible-pull cada 15min.
  3. Secret hygiene — SOPS + age (5 keypairs, ~50 secretos). Cero plaintext en repo, cero secretos en docs públicos.
  4. HA donde duele — Caddy active-passive (LXCs propios). VM 208 backends siguen SPOF (RTO aceptable vía PBS restore).
  5. Observabilidad centralizada — Loki + Prometheus en VM 208; Grafana único pane. Alertmanager → Telegram (n8n legacy). Pi-hole exporter + Pushgateway añadidos 2026-05-20.
  6. SSO unificado — PocketID IdP para 11 OIDC clients (verificado 2026-08-01 en la DB de PocketID) + CF Access (54 apps self_hosted, verificado 2026-07-19 vía CF API — ver reference/cf-access.md; los 37/31 que circulaban en otros docs estaban desactualizados), sin email PIN.
  7. Documentación versionada — este sitio. Cambios via PR.

Referencias