59 puntos por GN⁺ 16 일 전 | 19 comentarios | Compartir por WhatsApp
  • Resumen de un caso de construcción de un homelab que opera por cuenta propia diversos servicios como medios, IA, fotos y monitoreo combinando hardware pequeño con túneles de nube gratuitos
  • Empezó con un OrangePI 5, luego se actualizó a un GMKTec NUC (32 GB de RAM, 1 TB NVMe) y opera una estructura híbrida junto con una máquina virtual de Hetzner
  • Todos los servicios corren en contenedores Docker, con IaC basado en roles de Ansible y cifrado con SOPS para asegurar reproducibilidad y seguridad
  • Proporciona acceso externo mediante Cloudflare Tunnel sin abrir puertos de entrada, y usa Traefik + Authentik para el proxy inverso y la autenticación SSO
  • Con un costo operativo de aproximadamente 7 euros al mes, mantiene la propiedad de los datos sin dependencia de proveedores y prioriza el aprendizaje y la diversión por encima de la perfección

Configuración de hardware

  • Al principio usaba OrangePI 5, pero cambió a GMKTec NUC por problemas de gestión de energía y de almacenamiento conectado por USB
    • Equipado con CPU AMD Ryzen 7 5700U, 32 GB de RAM y 1 TB de almacenamiento NVMe M2
    • Con 2 ranuras M2, se pueden ampliar tanto la RAM como el disco
    • Mucho más estable para operación continua durante todo el año
  • Los servicios que necesitan estar activos 24/7 se ejecutan por separado en una máquina virtual de Hetzner
  • Todavía no hay un NAS montado, y los datos importantes se sincronizan con Syncthing
    • Hay interés en Ugreen NAS, Ubiquiti y otros, pero por ahora disfruta más del proceso de meter mano directamente

Principios de operación

  • Infrastructure-as-Code: automatizar en lo posible toda la configuración con scripts o plataformas de gestión (como Ansible) y guardarla como código
  • Reproducibilidad: ante una falla o un reemplazo de máquina, la infraestructura debe poder redesplegarse y reconfigurarse rápido, y al eliminar servicios de prueba no deben quedar residuos
  • Facilidad de uso: al ser un proyecto de hobby, se prefieren enfoques estándar y conocidos

Sistema operativo

  • Usa la distribución Debian instalada directamente sobre bare metal
  • También consideró NixOS (builds reproducibles) o Talos (clúster k8s), pero lo dejó en pausa por la carga de administrar workloads de k8s en una sola máquina y la falta de tiempo
  • También concluyó que un hipervisor como ProxMox era innecesario, por lo que no lo usa

Arquitectura de red

  • Adoptó Cloudflare Tunnel como método de exposición externa
    • El servidor crea una conexión solo saliente hacia la red de Cloudflare, así que no hace falta abrir puertos de entrada en el firewall
    • Una vez configurado el túnel, el tráfico bidireccional fluye a través de él
    • Si el dominio está conectado a Cloudflare DNS, se puede mapear por subdominio a puertos o protocolos específicos de la máquina (HTTP/HTTPS/TCP, etc.)
    • Se ofrece de forma totalmente gratuita y se considera una mejor alternativa que ngrok
  • El esquema con IP fija (IP pública) implica costo y riesgos de seguridad; existen alternativas como Tailscale Funnel, pero se eligió Cloudflare Tunnel por ser la solución más simple
  • Traefik

    • Proxy inverso de código abierto que reconoce Docker de forma nativa, lo que facilita la automatización del servidor
    • Si se agregan las etiquetas adecuadas al contenedor, detecta automáticamente el enrutamiento sin necesidad de modificar archivos de configuración por separado
  • Authentik

    • Plataforma de IdP (Identity Provider) y SSO
    • Permite guardar la configuración en forma de blueprints (archivos YAML), lo que ayuda a cumplir el principio de IaC
    • Mediante el middleware ForwardAuth, redirige a la página de inicio de sesión cuando se accede a servicios sensibles

Herramientas de operación

  • Ansible

    • Herramienta de automatización de infraestructura agentless (solo requiere SSH), con la ventaja de su configuración basada en YAML y abundantes ejemplos
    • Cada servicio se define por roles: tasks, defaults, handlers, templates y files
      • tasks: define las tareas a ejecutar
      • defaults: valores por defecto como image tag, puertos y nombre del contenedor
      • handlers: reinicia contenedores cuando cambia la configuración
      • templates: renderizado de archivos .env y config.yaml basados en Jinja2
      • files: configuración estática y scripts
    • Flujo general para desplegar un servicio:
      • crear recursos compartidos (redes, volúmenes) → crear esquema y usuario en PostgreSQL → renderizar plantillas de configuración → hacer pull de la imagen Docker → ejecutar el contenedor (incluyendo variables de entorno y configuración de logging) → aprovisionar configuración de autenticación en los blueprints de Authentik → configurar Cloudflare Tunnel si hace falta
    • Como desventajas, tiene documentación enorme, una estructura DSL repetitiva y bastante boilerplate, pero se sigue usando por familiaridad
    • Los playbooks se ejecutan manualmente, sin integración con GitOps, y por ahora eso es suficiente
  • SOPS (Secrets OPerationS)

    • Cifra solo los valores YAML/JSON y mantiene intacta la estructura de claves, lo que hace útiles los diffs en Git
    • Usa age como backend de cifrado: una herramienta que “simplifica el cifrado sin PGP”
    • Para cada host se gestionan por separado un archivo de configuración general (homelab.yaml) y un archivo cifrado (homelab.sops.yaml)
    • Flujo de trabajo:
      • generar una clave con age-keygen → editar el archivo cifrado con el comando sops (se descifra en el editor y al guardar se vuelve a cifrar automáticamente) → descifrado automático al ejecutar Ansible
      • Como Ansible soporta SOPS de forma nativa, no hacen falta módulos ni flags adicionales
    • Frente a Ansible Vault, la ventaja es el cifrado a nivel de valor en vez de cifrar el archivo completo, lo que permite aprovechar los diffs
    • Limitación: la clave privada de age debe compartirse de forma segura con el equipo y, si se pierde, no hay forma de recuperar los secretos
      • Para un homelab operado por una sola persona, es un nivel adecuado de complejidad

Servicios en ejecución

  • Gestión de medios: stack *arr

    • Prowlarr: gestor de indexadores que envía resultados de búsqueda a otros servicios *arr
    • Radarr: gestor de colección de películas; al indicar una película deseada, automatiza la búsqueda, descarga y organización
    • Lidarr: la misma función para música, integrado con Navidrome
    • Bazarr: descarga automática de subtítulos
    • Tidarr: servicio para conservar localmente audio de Tidal
    • Transmission: cliente BitTorrent (puerto 9091) que procesa todas las solicitudes de descarga de los servicios *arr
    • Todos los servicios están detrás de autenticación con Authentik
    • Usa el directorio de descargas compartido (/mnt/data/docker/transmission/downloads) y PUID/PGID 1000 para ahorrar espacio en disco con hardlinks
    • Ejemplo de flujo: agregar una película en Radarr → buscar con Prowlarr → Transmission la descarga → Radarr la mueve a la biblioteca multimedia → se puede ver en Jellyfin
  • Consumo de medios

    • Jellyfin: servidor multimedia de código abierto que, a diferencia de Plex, no requiere inicio de sesión en la nube. Usa autenticación propia y soporta varios dispositivos, incluyendo app para Android TV
    • Navidrome: servidor de streaming de música compatible con la API de Subsonic, integrado con apps móviles (como DSub2000). Lidarr alimenta la carpeta de la biblioteca
    • Calibre Web: gestor y lector de biblioteca de ebooks
      • La base de datos de metadatos administrada por la app de escritorio Calibre en la laptop se sincroniza al servidor con Syncthing
      • Permite acceder a libros desde varios lectores mediante la API OPDS
  • IA y chat

    • LibreChat: interfaz de chat de IA self-hosted que puede conectarse a varios proveedores de LLM (OpenAI, Anthropic, Ollama local)
      • Soporta RAG (Retrieval Augmented Generation)
      • Requiere MongoDB (historial de chat), PostgreSQL + pgvector (embeddings) y MeiliSearch (búsqueda full-text), por lo que es una configuración relativamente pesada
      • Como Claude Code es más accesible, se usa poco y se está considerando eliminarlo
  • Fotos y archivos

    • Immich: alternativa self-hosted a Google Photos
      • Respaldo automático de fotos desde el teléfono, reconocimiento facial, organización de álbumes y extracción de metadatos EXIF
      • Usa su propio PostgreSQL (con pgvector) y un contenedor de machine learning (clasificación de imágenes), y actualmente almacena miles de fotos
    • Syncthing: sincronización de carpetas entre laptop, teléfono y servidor. Sincronización P2P directa sin intermediación en la nube
      • Sincroniza Obsidian Vault, documentos y otros contenidos entre varios dispositivos y Android
    • MinIO: almacenamiento de objetos compatible con S3, usado para pruebas o aplicaciones que requieren la API de S3
  • Lectura e información

    • Miniflux: lector minimalista de feeds RSS con suscripción a unos 50 blogs y fuentes de noticias
      • Soporta atajos de teclado y ofrece un feed cronológico sin ordenamiento basado en algoritmos
  • Infraestructura y autenticación

    • Traefik: proxy inverso que enruta tráfico a contenedores Docker según el hostname. Si el contenedor tiene las etiquetas adecuadas al iniciar, se detecta automáticamente
    • Authentik: proveedor de SSO e identidad. Protege servicios con el middleware ForwardAuth y guarda los blueprints en Git para gestionar toda la configuración de autenticación
    • PostgreSQL: servidor de base de datos compartido; Authentik, Miniflux, Immich y LibreChat, entre otros, comparten una sola instancia en lugar de usar bases separadas, lo que ahorra recursos y facilita los respaldos
    • Redis: caché compartida y almacenamiento de sesiones, usado sobre todo para gestión de sesiones y colas de trabajo en servicios como Authentik
  • Software personalizado

    • Highlight Exporter: servicio en Go que extrae subrayados de libros desde KOReader, Readwise y Apple Books y los convierte a Markdown compatible con Obsidian
    • Telegram Assistant: bot de Telegram que ofrece varias automatizaciones y acceso a IA dentro de chats grupales. Es el proyecto que reescribe con más frecuencia para probar nuevas tecnologías
    • Chess-blunder trainer: webapp que importa partidas de chess.com o lichess.com, las analiza con Stockfish y selecciona jugadas erróneas para entrenarlas; pronto se publicará como código abierto

Monitoreo

  • Beszel

    • Solución de monitoreo liviana con configuración y operación sencillas, además de buenos valores por defecto
    • Se consideró que el stack de Grafana era excesivo y demasiado complejo para ver estadísticas básicas del sistema operativo en dos máquinas
    • También sintió que proyectos similares como Glances requerían demasiado tuning
    • Beszel cubre el 120% de lo necesario y es fácil de instalar
  • Statsping

    • Herramienta minimalista de ping de servicios para monitoreo detallado de recursos específicos
    • Envía pings a endpoints definidos, reporta latencia y disponibilidad, y alerta de varias formas cuando un servicio falla
    • Está alojado en una máquina en la nube para seguir funcionando incluso si el homelab cae, sin overhead adicional de mantenimiento

Lo que todavía falta

  • Respaldos

    • Aunque reconoce la importancia de los respaldos, actualmente no hay nada implementado
    • Más que la pérdida de películas, música o fotos, lo que hace falta es respaldar las bases de datos de cada servicio, pero todavía no se ha decidido una solución adecuada (como restic) ni la configuración de hardware
  • Configuración RAID

    • Los datos multimedia y el sistema coexisten en un solo disco M2 NVMe
    • No hay suficiente espacio físico para un servidor NAS o una máquina de respaldo separada
  • Independencia de la nube

    • La disponibilidad de recursos depende mucho de la infraestructura de Cloudflare Tunnel
    • Si Cloudflare falla, también se interrumpe el acceso a la infraestructura, así que planea invertir en alternativas a futuro
  • IaC y automatización completas

    • Los playbooks de Ansible se ejecutan manualmente, sin pipeline de CI ni aprovisionamiento automático
    • Por ahora no siente que migrar a GitOps vaya a aportar una gran ventaja

Eficiencia de costos y conclusión

  • Gasta alrededor de 7 euros al mes en la máquina virtual de Hetzner, y estima que el consumo eléctrico del home server es muy bajo
  • Agregar un nuevo servicio o modificar una configuración toma unos 20 a 30 minutos, delegando buena parte a Claude Code y haciendo solo una revisión rápida antes del despliegue
  • Estima que el tiempo total invertido en todo el proyecto ha sido de unas 100 a 150 horas a lo largo de varios años
  • Conserva la propiedad de sus datos con mínima dependencia de proveedores, sin riesgo de pérdida por cambios repentinos en términos de servicio, feeds algorítmicos o fusiones y adquisiciones
  • El objetivo no es un sistema perfecto, sino entender la infraestructura y disfrutar el proceso; cada servicio desplegado, cada rol de Ansible escrito y cada secreto cifrado tiene valor de aprendizaje
  • Para empezar con un homelab, lo importante es empezar en pequeño y no sobrepensarlo

19 comentarios

 
dongho42 16 일 전

Usaba Tailscale, pero ahora uso Cloudflare Tunnel y la verdad me encanta. Aunque sus usos son algo distintos entre sí, en mi caso Tailscale chocaba con AdGuard y me resultaba difícil usarlo.

 
minhoryang 15 일 전

¿No basta con configurar el DNS principal de Tailscale como AdGuard?

 
click 14 일 전

No es AdGuard Desktop, pero AdGuard Mobile funciona como una VPN local, así que no se puede usar junto con eso.

 
dongho42 14 일 전

Parece que el conflicto ocurrió en la parte de la VPN, no en la de DNS.

 
kw9101 16 일 전

Hace poco, mientras probaba varias cosas para que sonara MBC Radio en Google Nest, terminé usando Cloudflare Tunnel.
Es un servicio tan bueno que te hace preguntarte por qué es gratis.

 
hulryung 15 일 전

Suena divertido. Cuéntanos un poco.

 
toida 15 일 전

Yo uso el free tier de Oracle Cloud. Con 4 vCPU, 24 GB de RAM y 200 GB, y al estar basado en ARM, salvo por alguna que otra incompatibilidad ocasional, está buenísimo como juguete.

 
click 15 일 전

Mi nuevo proveedor de internet tenía bloqueados los puertos 80 y 443, así que lo estoy usando sorteándolo con Cloudflare Tunnel.
Si no, casi terminaba pagando la penalización por cancelación para cambiarme de proveedor.

 
recast7838 15 일 전

¿Qué proveedor de internet usas que tiene los puertos bloqueados?

 
click 14 일 전

En realidad, no es que yo lo hubiera bloqueado directamente, sino que el router del proveedor tenía bloqueado el reenvío de puertos 80 y 443.
Como usé un router de terceros para hacer port forwarding, terminaron bajándome a escondidas la velocidad del plan contratado de 1 G a 100 Mbps.
Buscando alternativas, al final lo más limpio fue conectarlo a un túnel de Cloudflare.

 
keepworking 14 일 전

Revisa si tu router de terceros tiene una función para cambiar la MAC address, y prueba convertirla a la del router del proveedor; creo que así también se podría saltar esa restricción.

 
click 13 일 전

Después de configurar cf tunnel, dejó de acumularse por completo el log de fail2ban en los puertos 80 y 443, así que hasta los quité y ya no volví a pensar en eso.
Compré el dominio directamente en Cloudflare y también configuré el SSO ahí; si no pasan el SSO, no pueden usar el servicio, así que hice que Cloudflare absorba todos los ataques por mí.
Como ahí solo están los servicios que uso yo solo, esta configuración me ha resultado más que suficiente.
Si Cloudflare llega a caerse, decidí aceptar ese nivel de riesgo.

 
antegral 15 일 전

Normalmente he escuchado que a veces los routers de las operadoras bloquean el port forwarding.

Si le pones un router de terceros, claro que se abriría, pero... como dijiste, cf tunnel ya trae un WAF básico e incluso te enruta a la región ICN, así que realmente no hay mucha razón para no usarlo.

 
bus710 15 일 전

Tengo n8n corriendo en mi homelab y lo conecté con Anthropic, Telegram, almacenamiento y demás para ejecutar tareas pequeñas, y la verdad es cómodo porque los conectores están bien hechos.

 
ndrgrd 15 일 전

Estoy usando un equipo de bajo consumo con Ryzen serie 8000 como servidor casero 24/7.
Normalmente lo uso como NAS y, sumando contenedores y otros servicios, uso alrededor de 70 en total, pero el consumo eléctrico ni siquiera llega a 10 kWh al mes. El costo es de unos 2,000 wones.

 
kimjoin2 16 일 전

Cloudflare Tunnel
Me encanta demasiado.

 
kimjoin2 16 일 전

A veces hay amigos que tardan en responder y de vez en cuando lanzan un 502, pero bueno,
¡es gratis~!

 
j2sus91 16 일 전

Yo también uso un túnel en la nube y la verdad es que está muy bien.
Normalmente, cuando hay un router físico, muchas veces la IP externa la tiene el router.

Usando Cloudflare Tunnel, incluso una IP interna
puede quedar disponible para conexión externa mediante el registro de un dominio~

Y encima es gratis,

 
GN⁺ 16 일 전
Opiniones de Hacker News
  • Esto está realmente genial, pero no se debe usar Cloudflare Tunnel para streaming de medios
    Está prohibido por los términos de servicio o, como mínimo, no es el uso previsto. El servicio podría ser bloqueado
    En su lugar, conviene usar Wireguard o Tailscale
    Artículo relacionado

    • Por eso yo también renté un VPS de 5 dólares al mes y lo conecté con Tailscale
      También sirve para salir de CGNAT, y como opción con GUI recomiendo Nginx Proxy Manager
    • Me pregunto si Tailscale Funnel ya admite dominios personalizados
      Ahora mismo me estoy cambiando a una combinación de rathole + traefik. Me quedé despierto hasta la madrugada haciendo pruebas
    • Cloudflare Tunnel expone públicamente un servicio, mientras que Wireguard/Tailscale son una VPN
      Tailscale (Headscale no) ofrece una función de proxy inverso llamada Funnel, pero no se pueden usar dominios propios
      Como alternativa a CF Tunnel, lo más parecido es Pangolin, y también se puede selfhostear NetBird junto con una función de proxy inverso
    • Si mal no recuerdo, los términos de CF prohibían el caché de medios, no el streaming en sí
  • Esto parece menos una fantasía sobre la ‘independencia’ y más una fantasía de convertirse en administrador de sistemas

    • Me gusta mucho no tener que preocuparme por perder acceso a la música que me gusta por temas de licencias
    • La independencia siempre viene con responsabilidad. No se pueden separar
    • Por ejemplo, en r/homelab hay historias de gente que armó su propio NAS para guardar las fotos de su esposa en vez de usar Google Photos
      Pero, sinceramente, pagarle 5 dólares al mes a Google o Apple parece una opción mucho mejor. Ni siquiera sé si están haciendo backup 3-2-1
  • Estaría bueno que hubiera un grupo de voluntarios en la biblioteca local operando servicios así
    Sería una gran oportunidad para que los chicos aprendan a operar servicios y para que personas con menos conocimientos técnicos aprovechen el open source

    • Pero el problema siempre es el soporte
      Nadie quiere encargarse de atención al cliente. Por eso la mayoría de los servicios funcionan pagando para poder decir “consulten soporte por allá”
  • Yo uso fnox para gestión de secretos
    Siento que soporta muchos más backends que sops, y que la DX (experiencia de desarrollador) también es mejor

    • Yo uso Infisical selfhosteado
    • Se ve interesante. Ahora uso SOPS, pero vale la pena considerarlo como reemplazo
  • Se habla de la ‘fantasía de un hombre independiente y preparado’, pero al final Cloudflare sigue estando en medio, así que no es independencia total

  • Cloudflare Tunnel es una herramienta realmente excelente
    Antes hacía hosting directamente con la IP de mi casa, pero ahora lo administro mucho más fácil con cloudflared
    También me preocupo menos por el firewall o por intrusiones de red
    Mi homelab ahora se administra con scripts bash idempotentes escritos por Claude
    Siento que las dependencias se vuelven complejas por el deseo de la gente de cambiar propiedades, y esa interacción crea bugs
    Por eso, expresar todo con scripts bash simples resulta más estable
    Actualmente uso systemd + contenedores podman, y dejé una página de notas para mi referencia

    • ¿No te preocupa la privacidad, dado que Cloudflare puede ver todos los datos?
      Me pregunto si crees que la comodidad práctica compensa esa desventaja
    • Me gustaría saber cuál es la ventaja de Cloudflare Tunnel frente a usar simplemente Wireguard
  • No entiendo por qué todos suben esto a la internet pública. ¿Por qué no simplemente usar Tailscale?

    • Es cómodo poder instalar la app y simplemente indicar una URL pública. Así no hace falta que estén en la misma tailnet
    • Tailscale es una solución excesiva. Con abrir solo los puertos 80 y 443 y autenticar bien con un proxy inverso, es suficientemente seguro. Yo lo he operado así por años
    • Pero hay casos en los que usuarios externos que no pueden instalar Tailscale, como en una Smart TV, necesitan acceder a Jellyfin
  • Parece que el autor confundió homelab con self-hosting
    Self-hosting es operar servicios que realmente usas, mientras que un homelab es un entorno para experimentar y aprender
    Yo no pongo mis datos o servicios personales en el homelab. Es un lugar donde las cosas pueden romperse

  • He visto en Ucrania una empresa SaaS que realmente procesaba tráfico de producción dentro de un búnker subterráneo

  • Me impactó darme cuenta de que solo las suscripciones de streaming me costaban 1,300 dólares al año
    Así que compré un NAS y discos de 36 TB, armé un stack arr y cancelé todas las suscripciones
    Toda mi familia hizo lo mismo y ahora estamos ahorrando entre 5 y 6 mil dólares al año
    El NAS se va a pagar solo en pocos meses y, a partir de ahí, todo será ganancia
    Gracias a Claude Code, la configuración quedó lista en pocas horas
    Además, ahora puedo tener una curaduría de contenido sin ruido como la de Netflix o Hulu, y se disfruta mucho más

    • Otra gran ventaja es que permite streaming con alto bitrate
      Si ripeas un Blu-ray 4K y lo transmites en casa, la calidad de imagen es muy superior a la de los servicios comerciales
    • Yo uso un enfoque híbrido. Mantengo las suscripciones baratas, pero para la mejor calidad sin anuncios veo todo desde mi propio servidor de medios
      Siento que la relación precio-calidad de los servicios de streaming está por el piso. Incluso los planes caros a veces están limitados a 1080p
    • Me pregunto si eso es legal. ¿La idea es evitar subir contenido?
    • O incluso se puede no darles ni dinero ni tiempo, salir de la adicción al consumo de contenido y buscar otro hobby