Saltar a contenido

Sistema de Infraestructura

Visión global del subsistema de infraestructura de SmallCountry: el hardware físico, la capa de virtualización, el almacenamiento y la red interna que sostienen todos los servicios.


Descripción general

La infraestructura de SmallCountry se asienta sobre cuatro nodos físicos con nombres de deidades egipcias. Cada nodo tiene un rol definido, no se mezclan responsabilidades y todos convergen en una red interna gobernada por Proxmox VE sobre ZFS.

El principio rector es el Principio 6 — Arquitectura por capas: el hardware no sabe de servicios, la infraestructura no sabe de personas. Cada capa solo conversa con la inmediatamente adyacente.


Topología

flowchart TD
    subgraph Fisica["🏠 Infraestructura Física"]
        direction LR
        Ra["🖥️ Ra<br/>N100 · 32 GB RAM<br/>2 TB SSD + 4 TB HDD<br/>Proxmox VE"]
        Horus["🧠 Horus<br/>Mini-PC + GPU<br/>64 GB RAM · 1 TB SSD<br/>Proxmox VE"]
        Geb["⚡ Geb<br/>Victron Cerbo GX<br/>ARM · 8 GB RAM<br/>Venus OS"]
        Thoth["🗄️ Thoth<br/>Raspberry Pi 5<br/>4 GB RAM · 512 GB SSD<br/>Raspberry Pi OS"]
    end

    subgraph Virtual["☁️ Infraestructura Virtual"]
        direction LR
        LXC["Contenedores LXC<br/>55+ contenedores<br/>aislados por servicio"]
        VM["Máquinas Virtuales<br/>Home Assistant OS<br/>Docker hosts"]
        ZFS["Datasets ZFS<br/>rpool/datos/*<br/>snapshots @15min"]
        Redes["Redes virtuales<br/>vmbr0 · vmbr1 · vmbr2<br/>VLANs segmentadas"]
    end

    subgraph Orquestacion["🎛️ Orquestación"]
        direction LR
        Ansible["Ansible<br/>configuración declarativa"]
        OpenTofu["OpenTofu<br/>infra como código"]
        Semaphore["Semaphore<br/>panel de playbooks"]
        Forgejo["Forgejo Actions<br/>CI/CD"]
    end

    Fisica --> Virtual --> Orquestacion

    style Fisica fill:#c8e6c9,stroke:#2e7d32,color:#000
    style Virtual fill:#bbdefb,stroke:#1565c0,color:#000
    style Orquestacion fill:#f8bbd0,stroke:#c2185b,color:#000

Servidores

Nodo Hardware Rol Sistema IP gestión Servicios
Ra Mini-PC N100, 32 GB RAM, 2 TB SSD NVMe + 4 TB HDD Hipervisor principal. Todos los LXC de servicios Proxmox VE 8.x 10.10.1.1 Chrony (NTP local)
Horus Mini-PC i7-13700H, 64 GB RAM, RTX 4060, 1 TB SSD IA local. LXC de Ollama, Whisper, RAG Proxmox VE 8.x 10.10.1.2
Geb Victron Cerbo GX, ARM Cortex-A7, 8 GB RAM, 32 GB eMMC Gateway energético. MPPT, batería, Shelly Venus OS 10.10.2.1
Thoth Raspberry Pi 5, 4 GB RAM, 512 GB SSD USB 3.0 Backup offsite. PBS client, Restic server Raspberry Pi OS 10.10.9.1

Almacenamiento — ZFS

ZFS es la base del almacenamiento en SmallCountry. Elegido por ADR-006. Todos los datos persistentes viven en datasets ZFS con snapshots automáticos cada 15 minutos.

Pool Nodo Discos RAID Datasets principales
rpool Ra 2 TB SSD NVMe single rpool/datos/* (55+ datasets de servicio)
hddpool Ra 4 TB HDD single hddpool/backup, hddpool/media
hpool Horus 1 TB SSD NVMe single hpool/ollama, hpool/qdrant

Estrategia de snapshots

Frecuencia Retención Alcance
Cada 15 min 4 (1 hora) Todos los datasets
Cada hora 24 (1 día) Todos los datasets
Cada día 31 (1 mes) Datasets críticos (Tier S, A)
Cada semana 8 (2 meses) Datasets críticos (Tier S, A)

Los snapshots permiten volver atrás si un fallo corrompe datos o una actualización rompe algo. La recuperación se hace con zfs rollback en segundos.


Contenedores — LXC

Cada servicio de SmallCountry corre en su propio contenedor LXC, aislado del resto. Esto responde al Principio 3 — Aislamiento del núcleo y al ADR-018.

Rango IP Bridge (puente de red virtual) Propósito
10.10.10.0/24 vmbr0 Servicios con exposición externa vía Caddy
10.10.20.0/24 vmbr1 Servicios internos sin exposición (BBDD, MQTT)
10.10.30.0/24 vmbr2 Gestión y administración (Proxmox, SSH, Forgejo)
10.10.40.0/24 vmbr3 IoT y dispositivos de campo

Red interna

La red interna está gobernada por Pi-hole como DNS autoritativo para el dominio .sc. Cada servicio tiene un nombre canónico servicio.sc que Pi-hole resuelve a la IP correcta independientemente del nodo físico donde esté alojado (ADR-007).

El esquema de bridges de Proxmox segmenta el tráfico por propósito. Los bridges aplican VLANs (red lógica aislada) a nivel de switch virtual para que un contenedor en vmbr1 no pueda alcanzar directamente a uno en vmbr0 salvo que una regla explícita lo permita (Principio 4 — Segmentación de redes).

CA interna — certificados TLS con CA propia para modo isla (previsto Q4 2026). Mientras tanto se usan certificados autofirmados con fingerprint conocido.


Orquestación

La configuración de la infraestructura es declarativa (describe el estado deseado, no los pasos para alcanzarlo) y versionada. No se hacen cambios manuales en servidores en producción.

Herramienta Propósito Repositorio
Ansible Configuración de LXC y servicios con roles y playbooks (guiones de automatización de Ansible) infra-core/ansible/
OpenTofu Provisionamiento de infraestructura como código infra-core/tofu/
Semaphore Panel web para ejecutar playbooks con registro de auditoría Proyectos en Semaphore
Forgejo Actions CI/CD: lint, test, deploy automático al hacer push .forgejo/workflows/
Para el arquitecto

ZFS layout completo

rpool/
├── datos/
│   ├── authentik/
│   ├── caddy/
│   ├── nextcloud/
│   ├── immich/
│   ├── postgresql/
│   ├── matrix/
│   ├── farmos/
│   ├── forgejo/
│   ├── ollama/
│   ├── victoria/
│   └── ...
├── backup/
│   └── pbs/
└── ISO/
    └── templates/

Asignación de LXC por nodo

  • Ra: ~42 contenedores de servicios de usuario, seguridad y observabilidad
  • Horus: ~8 contenedores de IA (Ollama, Qdrant, Open WebUI, Whisper, Piper, Hermes, n8n-ia)
  • Geb: ~3 contenedores (Mosquitto, Node-RED-iot, VictoriaMetrics-edge)
  • Thoth: 0 contenedores — solo backup pasivo con PBS client + Restic

Fichas relacionadas

  • Proxmox VE — Hipervisor y gestión de contenedores
  • ZFS — Sistema de archivos con integridad de datos
  • Docker — Motor de contenedores para aplicaciones
  • Ansible — Automatización de configuración
  • OpenTofu — Infraestructura como código
  • Semaphore — Panel de playbooks
  • Forgejo — Forja de código con CI/CD
  • PBS — Backup automático de contenedores
  • Restic — Backup cifrado externo
  • Pi-hole — DNS interno del dominio .sc