← Back to list

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.

Rafael Noriega · 2026-05-29 20:27 · 7 claps · 5.5 min read
#ai-agent #open-code #hermes #open-router #homelab
Open on Medium ↗
Wiki topics: AGT · AI Agents 🔓 · Open Source

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

  1. Zero Trust → Access → Applications → Add → Self-hosted
  2. Configura subdominio + dominio
  3. Crea política: Emails → tu@email.com
  4. 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

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 respondeejecuta 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:

  1. DeepSeek V4 Flash Free (OpenCode Zen) — gratis
  2. Big Pickle (OpenCode Zen) — gratis
  3. Qwen3.6 Plus Free (OpenCode Zen) — gratis
  4. 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

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 TUI

version web

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