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
- Single ingress — todo HTTP externo entra por CF Tunnel → VIP
.250. No port forward en router.
- GitOps source of truth — configs PVE, observability, Caddy, crons en
monxas/homelab-infra. Ansible-pull cada 15min.
- Secret hygiene — SOPS + age. Cero plaintext en repo, cero secretos en docs públicos.
- HA donde duele — Caddy active-passive (ingress crítico). VM 208 sigue SPOF (RTO aceptable vía PBS restore).
- Observabilidad centralizada — Loki + Prometheus en VM 208; Grafana único pane. Alertmanager → n8n → Telegram.
- Documentación versionada — este sitio. Cambios via PR.
Referencias