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.