Saltar a contenido

Dependencias entre Servicios

Mapa completo de las dependencias entre los servicios de SmallCountry: quién necesita a quién para funcionar, cadenas de dependencia críticas y el análisis de puntos únicos de fallo (SPOF).


Grafo de dependencias

flowchart TD
    subgraph Tier_S["Tier S — Supervivencia"]
        Geb["Geb (Cerbo GX)"]
        ShellySotano["Shelly — Bomba sótano"]
    end

    subgraph Tier_A["Tier A — Crítico"]
        Proxmox["Proxmox VE"]
        ZFS["ZFS"]
        PiHole["Pi-hole (DNS)"]
        Authentik["Authentik (IdP)"]
        Caddy["Caddy (proxy)"]
        PostgreSQL["PostgreSQL"]
        Mosquitto["Mosquitto (MQTT)"]
        WireGuard["WireGuard"]
        NetBird["NetBird"]
    end

    subgraph Tier_B["Tier B — Importante"]
        Grafana["Grafana"]
        Victoria["VictoriaMetrics"]
        NodeRED["Node-RED"]
        n8n["n8n"]
        Nextcloud["Nextcloud"]
        Immich["Immich"]
        Matrix["Matrix Synapse"]
        farmOS["farmOS"]
        Ollama["Ollama"]
        Forgejo["Forgejo"]
        Ansible["Ansible"]
        OpenTofu["OpenTofu"]
    end

    subgraph Tier_C["Tier C — Conveniente"]
        Jellyfin["Jellyfin"]
        Navidrome["Navidrome"]
        Kavita["Kavita"]
        Homepage["Homepage"]
        Searxng["Searxng"]
        FreshRSS["FreshRSS"]
        Jitsi["Jitsi"]
        ntfy["ntfy"]
        Uptime["Uptime Kuma"]
        Vaultwarden["Vaultwarden"]
    end

    subgraph Tier_D["Tier D — Experimental"]
        PostHog["PostHog"]
        Matomo["Matomo"]
        BirdNET["BirdNET + Frigate"]
        Continue["Continue.dev"]
        Sherlog["Sherlog"]
    end

    %% Dependencias críticas
    Authentik --> PostgreSQL
    Authentik --> PiHole
    Caddy --> Authentik
    Caddy --> PiHole
    Nextcloud --> PostgreSQL
    Nextcloud --> Authentik
    Nextcloud --> Caddy
    Immich --> PostgreSQL
    Immich --> Authentik
    Immich --> Caddy
    Matrix --> PostgreSQL
    Matrix --> Authentik
    Matrix --> Caddy
    Grafana --> Victoria
    Grafana --> Authentik
    Grafana --> Caddy
    Victoria --> Proxmox
    NodeRED --> Mosquitto
    NodeRED --> Authentik
    farmOS --> PostgreSQL
    farmOS --> Authentik
    Ollama --> Proxmox
    Forgejo --> PostgreSQL
    Forgejo --> Authentik
    Jellyfin --> Caddy
    Jitsi --> Caddy
    Mosquitto --> PiHole
    NetBird --> PiHole
    WireGuard --> PiHole
    Geb --> Mosquitto
    ShellySotano --> Mosquitto
    n8n --> Authentik
    n8n --> PostgreSQL
    ntfy --> Caddy
    Vaultwarden --> Caddy
    Homepage --> Caddy
    Uptime --> Caddy

    %% Infraestructura base
    PostgreSQL --> ZFS
    Proxmox --> ZFS
    Authentik --> ZFS
    Caddy --> ZFS
    Nextcloud --> ZFS
    Immich --> ZFS
    Matrix --> ZFS
    Victoria --> ZFS
    Grafana --> ZFS
    Mosquitto --> ZFS
    Ollama --> ZFS
    Forgejo --> ZFS
    Jellyfin --> ZFS
    farmOS --> ZFS

    style Tier_S fill:#ef9a9a,stroke:#c62828,color:#000
    style Tier_A fill:#ffe082,stroke:#f57f17,color:#000
    style Tier_B fill:#a5d6a7,stroke:#2e7d32,color:#000
    style Tier_C fill:#90caf9,stroke:#1565c0,color:#000
    style Tier_D fill:#ce93d8,stroke:#7b1fa2,color:#000

Cadenas de dependencia críticas

Cadena Longitud Impacto si se rompe
Persona → Caddy → Authentik → PostgreSQL → ZFS → Proxmox 6 Nadie puede acceder a ningún servicio con SSO
Persona → Caddy → Nextcloud → PostgreSQL → ZFS → Proxmox 6 Sin acceso a archivos, calendario, contactos
ESP32 → Mosquitto → Node-RED → ntfy → Persona 5 Sin alertas de campo en tiempo real
Prometheus → Alertmanager → ntfy → Persona 4 Sin notificaciones de monitorización
Ansible → SSH → LXC → Docker → Servicio 5 Sin capacidad de despliegue automatizado
Forgejo Actions → Ansible → SSH → LXC 4 Sin CI/CD para despliegues
Ollama → Qdrant → PostgreSQL → ZFS 4 Sin búsqueda semántica (RAG desactivado)
Geb → Mosquitto → Node-RED → Shelly → Bomba sótano 5 La bomba del sótano no se activa automáticamente

Análisis de Puntos Únicos de Fallo (SPOF)

Componente ¿SPOF? Si cae, ¿qué se pierde? Mitigación
Proxmox (Ra) ✅ Sí Todos los LXC de Ra (~42 servicios) ZFS snapshot @15min. Recuperación en <2h con hardware de repuesto
ZFS (rpool) ✅ Sí Todos los datos persistentes Backup 3-2-1. PBS diario + Restic offsite en Thoth
Authentik ✅ Sí Acceso SSO a todos los servicios Forward-auth bypass de emergencia. Recuperación en <15 min con runbook
Caddy ✅ Sí Proxy inverso. Sin él, nada es accesible vía HTTPS Configuración versionada en Forgejo. Recuperación en <5 min
Pi-hole ✅ Sí Resolución DNS del dominio .sc Registros DNS replicados en archivos hosts de emergencia
PostgreSQL ✅ Sí Backend de 20+ servicios Replicación en streaming a Horus. WAL archives en ZFS
Mosquitto ✅ Sí Bus de mensajería IoT. Sin MQTT, los sensores no hablan ESP32 almacenan datos localmente y retransmiten al reconectar
Red eléctrica ✅ Sí Todo Batería LiFePO4 4.8 kWh + SAI. Autonomía de 30 horas
Router internet ✅ Sí Conectividad externa Modo isla: el 90% de los servicios funcionan sin internet
Geb (Cerbo GX) ✅ Sí Monitorización energética y automatismos solares Sin Geb, Node-RED pierde telemetría. Batería y MPPT funcionan autónomamente
WireGuard ❌ No Redundante con NetBird Si WireGuard cae, NetBird mantiene la malla
NetBird ❌ No Redundante con WireGuard Si NetBird cae, WireGuard mantiene los túneles

Dependencias externas

SmallCountry minimiza las dependencias externas por diseño. Estas son las únicas que existen:

Dependencia ¿Crítica? ¿Modo isla? Notas
Energía eléctrica ✅ Sí ✅ Batería + solar 30h de autonomía. Perfiles de ahorro automáticos
Proveedor de internet ⚠️ No ✅ Modo isla 90% de servicios funcionan sin internet
NTP (hora exacta) ⚠️ Baja ⚠️ Deriva del reloj TOTP y TLS toleran derivas de varias horas
DNS externo ❌ No ✅ Pi-hole local Solo necesario para servicios que consultan APIs externas
Let's Encrypt ❌ No ✅ Certs internos Caddy usa certificados internos en modo isla

Estrategia de mitigación de SPOFs

  1. Todo versionado en Forgejo. Si un servidor muere, Ansible reconstruye el servicio desde cero.
  2. Backup 3-2-1. Tres copias, dos medios, uno externo (Thoth). Verificación semanal.
  3. Modo isla. El sistema está diseñado para funcionar sin internet. El 90% de los servicios son isla-compatibles.
  4. Runbooks. Cada SPOF tiene un runbook de recuperación documentado con pasos exactos.
  5. Degradación independiente. Si un servicio cae, los que no dependen de él siguen funcionando (Mecanismo 3).