Saltar a contenido

02 reconstruibilidad

Principio

SmallCountry debe poder regenerarse por completo desde un Proxmox VE limpio utilizando OpenTofu (infraestructura como código), Ansible (configuración declarativa con roles), Forgejo (fuente de verdad) y code-server (entorno de rescate).
Esta reconstrucción se apoya en un espejo local de paquetes y un registro OCI con cuarentena que garantizan la soberanía de la cadena de suministro y la operación offline.
La infraestructura es efímera; los datos son el único activo permanente.

Ciclo de reconstrucción completa

  1. Arranque desde cero
    El script bootstrap.sh configura las fuentes de paquetes para usar exclusivamente el espejo local, instala OpenTofu y Ansible, y clona el repositorio central desde Forgejo.
    No se necesita acceso a internet.

  2. **Aprovisionamiento con OpenTofu
    OpenTofu recrea toda la estructura del sistema: bridges, VLANs, LXCs, volúmenes ZFS (sistema de archivos con integridad de datos) y reglas de firewall.
    El archivo de estado de la infraestructura se protege localmente como un activo más.

  3. **Configuración declarativa con Ansible
    Ansible aplica sus roles: instala paquetes desde el proxy caché local, despliega contenedores desde el registro OCI local y aplica configuraciones y certificados TLS (cifrado de comunicaciones).
    La idempotencia asegura que el proceso es repetible y seguro.

  4. Verificación funcional
    Se ejecutan tests automáticos: healthchecks HTTP, consultas de integridad a bases de datos y pruebas funcionales de servicios.
    Objetivo de RTO (tiempo objetivo de recuperación): < 15 minutos.

Cadena de suministro soberana

Para que la reconstrucción y los despliegues diarios no dependan de repositorios externos, SmallCountry controla todos los artefactos que consume.

Espejo local (Tier A obligatorio)

Recurso Herramienta Función
Paquetes Debian/Proxmox Apt‑Cacher‑NG Proxy caché transparente. Si internet cae, los paquetes ya descargados se siguen sirviendo.
Imágenes Docker **Registro OCI pull‑through en Forgejo Descarga, almacena en ZFS y sirve las imágenes. Los nodos de producción nunca acceden a Docker Hub.
Paquetes Python Espejo PyPI local Cachea las dependencias de Ansible, code-server y otras herramientas.

Cuarentena de artefactos (Supply Chain Guard)

Todo artefacto nuevo debe pasar un período de cuarentena antes de usarse en producción.

Tier del servicio Período de cuarentena Excepción
Tier A (Crítico) 60 días Solo parches de seguridad confirmados, tras verificación rápida.
Tier B (Importante) 14 días Solo parches de seguridad confirmados.
Tier C (Medio) 7 días
Tier D/5 (Degradable/Efímero) Sin cuarentena

Pipeline de cuarentena automatizado:

  1. Cacheo: la nueva imagen o paquete se descarga en el espejo local.
  2. Escaneo: se analiza con Trivy (vulnerabilidades), se verifica su firma con Cosign y se inspecciona su SBOM (lista de componentes de software).
  3. Pruebas en staging: el artefacto se despliega en un entorno de pruebas y se ejecutan tests funcionales.
  4. Promoción: si pasa todas las verificaciones, se promociona para producción. Si falla, se bloquea y se alerta.

Stack necesario

  • Proxmox VE – Hipervisor de destino.
  • OpenTofu – Módulos declarativos para crear la infraestructura.
  • Ansible + Semaphore – Roles declarativos para provisionar los servicios.
  • Forgejo – Repositorio de código, CI/CD (integración y despliegue continuo) y registro OCI pull‑through.
  • Apt‑Cacher‑NG – Proxy caché de paquetes APT.
  • Espejo PyPI local – Caché de paquetes Python.
  • Trivy, Cosign, SBOM – Herramientas de escaneo de la cadena de suministro.
  • ZFS – Snapshots, réplicas e integridad de datos.
  • code-server – IDE de rescate basado en navegador.
  • Nivel 0 (Rescue Boat) – SSD físico con binarios, estado de OpenTofu y el script bootstrap.sh.

Relaciones con otros principios

graph TD
    %% Cadena de suministro soberana (columna izquierda)
    subgraph Cadena [Cadena de suministro soberana]
        direction TB
        E1[Espejo APT / PyPI / OCI]
        E2[Cuarentena Trivy + Cosign + SBOM]
        E3[Staging + tests funcionales]
        E4[Promoción a producción]
        E1 --> E2 --> E3 --> E4
    end

    %% Arranque desde cero
    subgraph Arranque [Arranque desde cero]
        direction TB
        A1[Proxmox VE limpio]
        A2[bootstrap.sh]
        A3[OpenTofu + Ansible instalados]
        A4[Repositorio Forgejo clonado]
        A1 --> A2 --> A3 --> A4
    end

    %% Aprovisionamiento
    subgraph Aprovisionamiento [Aprovisionamiento]
        direction TB
        B1[OpenTofu]
        B2[Bridges / VLANs / LXCs]
        B3[Volúmenes ZFS]
        B1 --> B2 --> B3
    end

    %% Configuración declarativa
    subgraph Configuracion [Configuración declarativa]
        direction TB
        C1[Ansible + roles]
        C2[Paquetes desde caché local]
        C3[Contenedores desde registro OCI local]
        C4[Certificados TLS]
        C1 --> C2
        C1 --> C3
        C1 --> C4
    end

    %% Verificación funcional
    subgraph Verificacion [Verificación funcional]
        direction TB
        D1[Healthchecks HTTP]
        D2[Consultas de integridad]
        D3[Pruebas funcionales de servicios]
        D4[Objetivo RTO < 15 min]
        D1 --> D2 --> D3 --> D4
    end

    %% Flujo vertical principal
    Arranque --> Aprovisionamiento
    Aprovisionamiento --> Configuracion
    Configuracion --> Verificacion

    %% Conexiones de la cadena de suministro
    E4 --> A2
    E1 --> C2
    E1 --> C3

    %% Colores por fase
    style Cadena fill:#e1bee7,stroke:#8e24aa,color:#000
    style Arranque fill:#f9a8d4,stroke:#c2185b,color:#000
    style Aprovisionamiento fill:#90caf9,stroke:#1565c0,color:#000
    style Configuracion fill:#a5d6a7,stroke:#2e7d32,color:#000
    style Verificacion fill:#ffe082,stroke:#f57f17,color:#000

Principio 1: Fuente única de verdad   |   Principio 3: Aislamiento del núcleo


Declarativo vs Reactivo: dos paradigmas de automatización

SmallCountry utiliza dos motores de automatización con filosofías complementarias:

Herramienta Paradigma Qué hace Ejemplo
Ansible Declarativo Mantiene el estado deseado. Aplica una y otra vez la misma configuración idempotente. Si algo se desvía, lo corrige "El LXC (contenedor ligero de Proxmox) de Nextcloud debe tener PostgreSQL 16 instalado y el puerto 8080 abierto"
n8n Reactivo Responde a eventos en tiempo real. Detecta un cambio, ejecuta un flujo y se detiene "Ha fallado el backup nocturno → notificar al admin y crear un issue en Forgejo"

Ansible garantiza que el paisaje es correcto. n8n garantiza que el sistema reacciona a lo que ocurre. Ambos se ejecutan desde Semaphore para tener trazabilidad unificada, y ambos se definen en código versionado en Forgejo.

Secciones relacionadas