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) 64 GB DDR5 NVMe + ZFS-HA Proxmox nodo primario (workloads pesados)
pmx-51 Mini-PC Celeron Intel Celeron N5095 (4c/4t) 16 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 Movistar R2 Gateway WAN, IP fija pública

Topología

graph TB
    subgraph Internet["Internet"]
        CFNET[Cloudflare
Tunnel + Access] end subgraph LAN["LAN 192.168.0.XXX/24"] ROUTER[Router Movistar R2
.1] PIHOLE[Pi-hole
.204] NAS[(NAS F4-423
.237)] TV[LG TV
.227] subgraph PMX50["pmx-50 — Ryzen"] VM171[VM 171
Home Assistant
.171] VM208[VM 208
media-server
.208] LXC101[LXC 101
hermesbot
.138] LXC186[LXC 186
PBS
.186] LXC251[LXC 251
RAG
.188] LXC270[LXC 270
caddy-primary
.247] LXC110[LXC 110
tv-gw
.210] end subgraph PMX51["pmx-51 — Celeron"] LXC123[LXC 123
cloudflared] LXC200[LXC 200
n8n
.200] LXC271[LXC 271
caddy-secondary
.248] 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 — 40+ containers (Caddy, Loki, Prom, Grafana, *arr, Immich, Stash, Vaultwarden, PocketID, etc.) SPOF actual; se mitiga con Caddy HA (F4) sin tocar VM 208
VM 171 pmx-50 Home Assistant OS Backups solo a NAS, no Time Machine
LXC 270 pmx-50 Caddy primary (VIP MASTER) Sirve managed.caddy generado por homelab-ctl.py
LXC 271 pmx-51 Caddy secondary (VIP BACKUP) Mismo managed.caddy vía rsync
LXC 123 pmx-51 cloudflared (CF Tunnel daemon) Apunta a VIP .250 post-F4
LXC 101 pmx-50 Hermes (agente conversacional) Sustituye OpenClaw; usa MCPs operacionales (F6)
LXC 200 pmx-51 n8n + alert forwarder Webhook receiver Alertmanager → Telegram
LXC 186 pmx-50 Proxmox Backup Server Datastore main, ~57% usado
LXC 251 pmx-50 RAG (offline-kit) + Kiwix ZIM 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 Features F7 pendientes

Principios de diseño

  1. Single ingress — todo HTTP externo entra por CF Tunnel → VIP .250. 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. Cero plaintext en repo, cero secretos en docs públicos.
  4. HA donde duele — Caddy active-passive (ingress crítico). VM 208 sigue SPOF (RTO aceptable vía PBS restore).
  5. Observabilidad centralizada — Loki + Prometheus en VM 208; Grafana único pane. Alertmanager → n8n → Telegram.
  6. Documentación versionada — este sitio. Cambios via PR.

Referencias