Motivación

Siempre quise tener un entorno donde experimentar con las mismas herramientas que uso profesionalmente. Un homelab con HashiCorp Stack me permite iterar rápido, romper cosas sin miedo, y aprender en profundidad.

Arquitectura

┌─────────────────────────────────────────────────┐
│                 Traefik (Ingress)                │
├─────────────────────────────────────────────────┤
│              Consul Cluster                      │
│         (Service Discovery + Mesh)              │
├─────────────────────────────────────────────────┤
│              Nomad Cluster                       │
│         (Workload Orchestration)                │
├─────────────────────────────────────────────────┤
│              Vault Cluster                       │
│         (Secrets + PKI)                         │
├─────────────────────────────────────────────────┤
│   Prometheus + Grafana + Loki (Observabilidad)  │
├─────────────────────────────────────────────────┤
│         NixOS Nodes (x4) - Bare Metal           │
└─────────────────────────────────────────────────┘

Nodos

El cluster está compuesto por 4 nodos NixOS, cada uno con su configuración declarativa:

  • homelab-0: Server principal (Nomad server + Consul server + Vault)
  • homelab-1: Worker node (Nomad client + Consul client)
  • homelab-2: Worker node (Nomad client + Consul client)
  • homelab-3: Worker node (Nomad client + Consul client)

Cada nodo se gestiona con un fichero .config.nix dedicado, permitiendo reproducir exactamente el mismo estado del sistema en cualquier momento.

Gestión con NixOS

Todo el sistema operativo se gestiona de forma declarativa:

# Aplicar configuración completa del nodo
nixos-rebuild-switch.sh

# Actualizar y aplicar
nixos-rebuild-switch-upgrade.sh

# Garbage collect para liberar espacio
nixos-gc.sh

Con Ansible se puede hacer rebuild en todos los nodos simultáneamente:

# ansible-playbook -i inventory.yaml nixos-rebuild-switch.yaml
- hosts: homelab
  tasks:
    - name: NixOS rebuild switch
      command: nixos-rebuild switch

Servicios desplegados (+30)

Los servicios se organizan por categorías como Nomad jobs:

Categoría Servicios
AI LLMs, embeddings
Media Plex, Sonarr, Radarr, Jellyfin
Monitoring Prometheus, Grafana, Loki, Alertmanager
DB PostgreSQL, Redis, MariaDB
Productividad Nextcloud, Vaultwarden
Networking Traefik, Pi-hole, WireGuard
Gaming Servidores de juegos
Backup Restic, rclone
SSO Authelia, LDAP
Finanzas Firefly III

Service Discovery con Consul

Cada servicio se registra automáticamente en Consul. Esto permite:

  • DNS interno (servicio.service.consul)
  • Health checks automáticos
  • Service mesh con Consul Connect (mTLS entre servicios)

Secrets con Vault

Vault gestiona todos los secrets del cluster:

  • Credenciales de bases de datos (dynamic secrets)
  • Certificados TLS (PKI backend)
  • API keys y tokens
  • Integración nativa con Nomad para inyección de secrets en jobs

Resultado

Un homelab que funciona como un mini-datacenter: resiliente, observable, seguro y completamente reproducible. Cada cambio está versionado en git y se puede aplicar con un solo comando.