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