Construyendo un Homelab Personal con IA desde Cero
Un computador basico con linux server en casa. Tres herramientas de IA accesibles desde cualquier parte del mundo. Costo mensual de IA: $0.
Construyendo un Homelab Personal con IA desde Cero
Un computador basico con linux server en casa. Tres herramientas de IA accesibles desde cualquier parte del mundo. Costo mensual de IA: $0.
Este artículo documenta cómo construí un stack de IA completo — accesible desde cualquier navegador o desde Telegram en el celular — usando Cloudflare Tunnels, Open WebUI, Hermes Agent y OpenCode, todos conectados a modelos gratuitos vía OpenCode Zen y OpenRouter.
Resultado: acceso remoto seguro, chat con IA desde el navegador, un agente autónomo que monitorea el servidor 24/7 y un IDE de coding con IA. Todo por $10 al año (el costo del dominio).
El problema con los enfoques tradicionales
Para exponer servicios desde casa normalmente necesitas:
- Abrir puertos en el router → tu servidor queda expuesto a internet
- IP estática con tu proveedor → $5–20/mes adicionales
- VPN (WireGuard, Tailscale) → overhead de configuración y mantenimiento
- VPS en la nube → costo mensual y latencia añadida
Cloudflare Tunnels resuelve todo esto con una conexión saliente cifrada. Tu servidor se conecta a Cloudflare, no al revés. Resultado: cero puertos abiertos, cero IP expuesta, acceso desde cualquier parte.

Fase 1 — Cloudflare Tunnel
Requisitos
- Dominio registrado en Cloudflare (~$10/año)
- Cuenta Cloudflare gratuita (plan Free: 50 usuarios, suficiente para uso personal)
# Instalar cloudflared en Ubuntu
curl -L https://github.com/cloudflare/cloudflared/releases/latest/download/cloudflared-linux-amd64.deb \
-o cloudflared.deb
sudo dpkg -i cloudflared.deb
# Autenticar y crear el tunnel
cloudflared tunnel login
cloudflared tunnel create homelab
Configuración (~/.cloudflared/config.yml)
tunnel: <TU-TUNNEL-ID>
credentials-file: /home/<user>/.cloudflared/<TUNNEL-ID>.json
ingress:
- hostname: ai.tudominio.dev
service: http://localhost:3000
- hostname: code.tudominio.dev
service: http://localhost:4096
- hostname: ssh.tudominio.dev
service: ssh://localhost:22
- service: http_status:404
Crear registros DNS
cloudflared tunnel route dns homelab ai.tudominio.dev
cloudflared tunnel route dns homelab code.tudominio.dev
cloudflared tunnel route dns homelab ssh.tudominio.dev
Instalar como servicio systemd
sudo cloudflared --config ~/.cloudflared/config.yml service install
sudo systemctl enable --now cloudflared
¿Qué logra esto? Todos los subdominios ahora apuntan a tu servidor vía el tunnel. Sin puertos abiertos. Sin IP expuesta.
Fase 2 — Cloudflare Access (autenticación)
Sin esto, cualquier persona con el subdominio puede acceder a tus servicios. Access agrega autenticación antes de que cualquier tráfico llegue al servidor.
Configuración en Zero Trust Dashboard
- Zero Trust → Access → Applications → Add → Self-hosted
- Configura subdominio + dominio
- Crea política: Emails → tu@email.com
- Guarda
Ahora cada servicio muestra una pantalla de login con OTP por email antes de continuar.
SSH desde cualquier lugar (Advertencia: por riesgos y seguridad, recomiendo sí o sí configurar Zero Trust para tener doble factor de autenticación).
Agrega esto a ~/.ssh/config en tu terminar en mi caso Mac:
Host ssh.tudominio.dev
HostName ssh.tudominio.dev
User tu-usuario
ProxyCommand cloudflared access ssh --hostname %h
ssh ssh.tudominio.dev
# Welcome to Ubuntu 24.04.4 LTS ✓
Fase 3 — Open WebUI (chat con IA desde el navegador)
Un frontend completo tipo ChatGPT conectado a cualquier proveedor de LLM. Accesible en ai.tudominio.dev.
docker run -d \
-p 3000:8080 \
-e WEBUI_AUTH=true \
-v open-webui:/app/backend/data \
--name open-webui \
--restart always \
ghcr.io/open-webui/open-webui:main
Conectar **OpenRouter** (modelos gratuitos)
En el panel Admin → Settings → Connections:
URL: https://openrouter.ai/api/v1
Key: tu-api-key-de-openrouter
Stack de modelos gratuitos recomendado:
Modelo:
deepseek/deepseek-v4-flash:freeChat diario, análisis, código
openrouter/freeAuto-selección gratuita
Multi-usuario con control de modelos:
Open WebUI permite múltiples usuarios con acceso diferenciado:
- Admin → todos los modelos (free + pago)
- User → solo modelos gratuitos
Configuración: Admin Panel → Models → visibility: Admins only para modelos de pago.

similar a chatgpt pero con modelos gratis
Fase 4 — Hermes Agent (IA que ejecuta tareas reales)
La diferencia entre un chat y un agente: Hermes no solo responde — ejecuta comandos reales en tu servidor, crea cron jobs, hace commits a GitHub, te avisa por Telegram.
Instalación
curl -fsSL https://raw.githubusercontent.com/NousResearch/hermes-agent/main/scripts/install.sh | bash
Conectar OpenCode Zen (modelos gratuitos)
En ~/.hermes/.env:
OPENCODE_ZEN_API_KEY=tu-key-de-opencode-zen
En ~/.hermes/config.yaml:
model:
default: deepseek-v4-flash-free
provider: opencode-zen
base_url: https://opencode.ai/zen/v1
fallback_providers:
- provider: opencode-zen
model: big-pickle
- provider: opencode-zen
model: qwen3.6-plus-free
- provider: openrouter
model: google/gemini-2.5-flash
Lógica de fallback:
- DeepSeek V4 Flash Free (OpenCode Zen) — gratis
- Big Pickle (OpenCode Zen) — gratis
- Qwen3.6 Plus Free (OpenCode Zen) — gratis
- Gemini 2.5 Flash (OpenRouter) — último recurso, ~$0.001
Gateway de Telegram
sudo hermes gateway install --system
Desde Telegram, el bot pide aprobación en el primer mensaje:
hermes pairing approve telegram TU-CODIGO
# Approved! User Rafael (ID) on telegram can now use the bot~
Ejemplos de tareas reales vía Telegram
Monitoreo automático del servidor:
Monitorea el uso de RAM, CPU y Disco cada hora y avísame
aquí si alguno supera el 70%

Monitoreo del servidor cada hora por telegram
Fase 5 — OpenCode Web (IDE de coding con IA en el navegador)
Un agente de coding que entiende tu codebase y ejecuta cambios reales. Accesible desde code.tudominio.dev.
Instalación
curl -fsSL https://opencode.ai/install | bash
source ~/.bashrc
opencode --version # 1.15.10
Correr como servicio systemd
# /etc/systemd/system/opencode-web.service
[Unit]
Description=OpenCode Web Server
After=network.target
[Service]
User=tu-usuario
Environment="OPENCODE_SERVER_PASSWORD=tu-password"
ExecStart=/home/tu-usuario/.opencode/bin/opencode web \
--hostname 0.0.0.0 --port 4096
Restart=always
[Install]
WantedBy=multi-user.target
sudo systemctl enable --now opencode-web

version TUI

version web
Conectar OpenCode Zen
En el TUI de OpenCode (/connect):
- Provider: OpenCode Zen
- Modelos gratuitos disponibles: Big Pickle, DeepSeek V4 Flash Free, Nemotron 3 Super Free
Al abrir code.tudominio.dev, OpenCode escanea automáticamente tu servidor y lista todos los proyectos:
/home/usuario/projects/ (11 proyectos)
├── ai-chatkit Chat IA multi-agente (FastAPI + NextJS)
├── poc-iceberg-migrate Migración a Apache Iceberg con PySpark en AWS
├── poc-binance-app Crypto tracker DCA (FastAPI + Next.js)
└── ...
Puedes abrir cualquier proyecto y pedirle que refactorice código, escriba tests, explique la arquitectura — todo en el navegador, sin abrir VSCode ni una terminal.
Seguridad en capas
Capa 1 — Cloudflare Access → Email OTP antes de cualquier tráfico Capa 2 — Cloudflare Tunnel → Sin puertos abiertos, sin IP expuesta Capa 3 — Auth del servicio → Cada servicio tiene sus propias credenciales Capa 4 — API keys separadas → Una key por servicio (revocación individual)
Una key por servicio — principio fundamental. Si una key se compromete, revocas solo esa sin afectar los demás:
# ~/.bashrc — una variable por servicio
export OPENROUTER_KEY_OPENWEBUI="sk-or-v1-..."
export OPENCODE_ZEN_KEY_HERMES="oc-..."
export OPENCODE_ZEN_KEY_OPENCODE="oc-..."
Servicios y URLs
URL Servicio Protegido
ai.tudominio.devOpen WebUICF Access + cuenta
code.tudominio.devOpenCode WebCF Access + password
ssh.tudominio.devSSH terminalCF Access + SSH key
Telegram botHermes AgentPairing code
Costo total
Ítem Costo
Dominio .dev~$10/año
Cloudflare Tunnel Gratis
Cloudflare Access (Free tier) Gratis
Open WebUI Gratis (self-hosted)
Hermes Agent Gratis (self-hosted)
OpenCode Gratis (self-hosted)
OpenCode Zen (modelos free) $0/mes
OpenRouter (modelos free) $0/mes
Total~$10/año
La única situación donde hay costo es si los modelos gratuitos están en rate limit y el fallback cae al modelo pago (Gemini 2.5 Flash). En la práctica, con uso personal: menos de $0.10/mes.
Lecciones aprendidas
Una key por servicio, siempre — aprendí a las malas pero con keys separadas, solo se revoca una.
Los modelos de fallback importan — Hermes tiene fallbacks hardcodeados. Siempre verifica y actualiza fallback_providers en config.yaml.
OpenCode Zen vs OpenRouter para agentes — OpenCode Zen tiene modelos curados y probados para coding. Para Hermes y OpenCode es mejor que OpenRouter por la calidad del tool calling. Para Open WebUI (chat general), OpenRouter da más variedad.
Qué viene después
- Fase 2: Raspberry Pi 4 NAS con OpenMediaVault + Nextcloud (Google Drive → NAS sync)
- Fase 3: Upgrade RAM 16GB → 32GB para correr Gemma4:26B y Qwen3:30B localmente con Ollama
- Fase 4: Mac Mini M4 para inferencia local de modelos 70B+
메타데이터
- post_id
- dcf4f93134ac
- slug
- construyendo-un-homelab-personal-con-ia-desde-cero-dcf4f93134ac
- url
- https://medium.com/@rafarngt/construyendo-un-homelab-personal-con-ia-desde-cero-dcf4f93134ac
- canonical_url
- https://medium.com/@rafarngt/construyendo-un-homelab-personal-con-ia-desde-cero-dcf4f93134ac
- author_url
- https://medium.com/@rafarngt
- status
- ok
- fetched_at
- 2026-06-09 15:37:30