Ejecutar tu propio chatbot de IA significa que tus consultas nunca salen de tu servidor, no pagas nada por token y eliges exactamente qué modelo se ejecuta. El stack que cubriremos aquí —Ollama para inferencia de modelos, Open WebUI para la interfaz del navegador y Docker Compose para conectarlos— es la combinación más práctica disponible en 2025 para cualquiera que se sienta cómodo con una terminal.
Esta guía está dirigida a Ubuntu 24.04 o Debian 12, pero el archivo Docker Compose funciona en Windows 11 (WSL2) y macOS con cambios menores en las rutas. Raspberry Pi 5 (8 GB) también funciona, aunque estarás limitado a modelos más pequeños.
---
Lo que necesitarás
| Requisito | Mínimo | Recomendado |
|---|---|---|
| RAM | 8 GB | 32 GB+ |
| VRAM de GPU | Ninguno (solo CPU) | 16 GB+ (RTX 3090/4090) |
| Espacio en disco | 20 GB libres | 100 GB+ (los modelos son grandes) |
| SO | Ubuntu 22.04 / Debian 12 | Ubuntu 24.04 |
| Docker | 24.x | 27.x |
| Driver NVIDIA | — | ≥535 (para paso de GPU) |
Solo CPU funciona, pero espera respuestas medidas en minutos para modelos más grandes. Una GPU con 16 GB de VRAM ejecuta Gemma 3 12B o Phi-4 cómodamente con generación de tokens en fracciones de segundo.
---
Paso 1 — Instalar Docker y Docker Compose
curl -fsSL https://get.docker.com | sh
sudo usermod -aG docker $USER
newgrp docker
docker --version # confirma 24.x o posteriorSi tienes una GPU NVIDIA, instala el kit de herramientas del contenedor para que Docker pueda pasarla a Ollama:
curl -fsSL https://nvidia.github.io/libnvidia-container/gpgkey | \
sudo gpg --dearmor -o /usr/share/keyrings/nvidia-container-toolkit-keyring.gpg
curl -s -L https://nvidia.github.io/libnvidia-container/stable/deb/nvidia-container-toolkit.list | \
sudo tee /etc/apt/sources.list.d/nvidia-container-toolkit.list
sudo apt update && sudo apt install -y nvidia-container-toolkit
sudo nvidia-ctk runtime configure --runtime=docker
sudo systemctl restart docker---
Paso 2 — Crear el archivo Docker Compose
Crea un directorio de proyecto e inserta el siguiente compose.yml. Esta es la versión completa lista para producción, no una muestra simplificada.
mkdir ~/ai-chatbot && cd ~/ai-chatbot
nano compose.ymlservices:
ollama:
image: ollama/ollama:latest
container_name: ollama
restart: unless-stopped
volumes:
- ollama_data:/root/.ollama
ports:
- "11434:11434"
# Elimina el bloque deploy completamente si no tienes GPU NVIDIA
deploy:
resources:
reservations:
devices:
- driver: nvidia
count: all
capabilities: [gpu]
open-webui:
image: ghcr.io/open-webui/open-webui:main
container_name: open-webui
restart: unless-stopped
depends_on:
- ollama
ports:
- "3000:8080"
environment:
- OLLAMA_BASE_URL=http://ollama:11434
- WEBUI_SECRET_KEY=change_this_to_a_random_string
- WEBUI_AUTH=true
volumes:
- openwebui_data:/app/backend/data
volumes:
ollama_data:
openwebui_data:Crítico: cambia WEBUI_SECRET_KEY antes de poner en producción. Una cadena aleatoria de 32 caracteres está bien (openssl rand -hex 16). Los dos volúmenes nombrados previenen pérdida de datos al reiniciar contenedores.
---
Paso 3 — Iniciar el stack
docker compose up -d
docker compose logs -f # observa errores; Ctrl+C para salirLa primera ejecución descarga ambas imágenes (~2 GB combinadas antes de cualquier modelo). En una conexión decente esto toma 2–5 minutos.
---
Paso 4 — Descargar tu primer modelo
Abre un shell en el contenedor de Ollama y descarga un modelo. Comienza con algo que se ajuste a tu hardware:
# Desde el host, ejecuta en el contenedor en ejecución
docker exec -it ollama ollama pull llama3.2:3bHoja de trucos de selección de modelos:
| Modelo | Tamaño en disco | VRAM mínima | Mejor para |
|---|---|---|---|
| Llama 3.2 3B | ~2 GB | CPU/4 GB | Pruebas rápidas, servidores con poca RAM |
| Phi-4 14B | ~9 GB | 10 GB | Chat general, código |
| Gemma 3 12B | ~8 GB | 10 GB | Calidad/velocidad equilibrada |
| DeepSeek-R1 32B | ~20 GB | 24 GB | Razonamiento, revisión de código |
| Llama 3.3 70B | ~40 GB | 40 GB | Mejor calidad, solo equipos de gama alta |
| nomic-embed-text | ~270 MB | CPU | Embeddings para RAG |
También puedes descargar modelos directamente desde Open WebUI: Configuración → Panel de administrador → Modelos → Descargar un modelo desde Ollama.com.
---
Paso 5 — Abre la interfaz web y crea tu cuenta de administrador
Navega a http://tu-ip-servidor:3000 en un navegador. Verás una pantalla de registro — la primera cuenta registrada se convierte automáticamente en administrador. Complétala e inicia sesión.
Selecciona tu modelo descargado en el menú desplegable de modelos en la parte superior de la ventana de chat e inicia una conversación. Eso es todo — estás ejecutando un chatbot de IA privado.
---
Paso 6 — Abre el firewall (si se necesita acceso remoto)
Si el servidor es remoto o quieres acceso en la LAN:
sudo ufw allow 3000/tcp
sudo ufw reloadNo expongas el puerto 11434 (la API de Ollama) a internet público sin autenticación. Open WebUI maneja autenticación de usuarios; la API de Ollama sin procesar no.
---
Lista de verificación
curl http://localhost:11434→ devuelveOllama is runningdocker ps→ tantoollamacomoopen-webuimuestranUp- Navegador en
:3000→ aparece pantalla de inicio de sesión - El chat devuelve una respuesta en tiempo razonable (segundos en GPU, minutos en CPU para modelos más grandes)
---
Solución de problemas
Open WebUI no puede alcanzar Ollama ("Conexión rechazada") Ambos contenedores deben estar en la misma red Docker. El compose.yml anterior lo maneja automáticamente. Si ejecutas Ollama como un binario del host en lugar de un contenedor, reemplaza OLLAMA_BASE_URL=http://ollama:11434 con OLLAMA_BASE_URL=http://host.docker.internal:11434 y añade --add-host=host.docker.internal:host-gateway al servicio Open WebUI.
GPU no detectada dentro del contenedor Ejecuta docker exec -it ollama nvidia-smi. Si falla, confirma que tu driver es ≥535 y que nvidia-ctk runtime configure --runtime=docker se completó sin errores, luego reinicia Docker.
Respuestas lentas en GPU Verifica el uso de VRAM con nvidia-smi. Si el modelo no cabe en VRAM, Ollama descarga capas a RAM y el rendimiento cae drásticamente. Cambia a un modelo más pequeño o establece OLLAMA_NUM_PARALLEL=2 en el bloque de entorno del servicio Ollama para reducir la presión de memoria.
Contenedores en bucle de reinicio en máquinas con poca RAM El contenedor Open WebUI necesita ~500 MB de RAM en reposo. En máquinas con 4 GB o menos, reduce la carga paralela de modelos: añade OLLAMA_MAX_LOADED_MODELS=1 al entorno de Ollama.
---
Próximos pasos
Una vez que tu chatbot base está ejecutándose, tres mejoras entregan el mayor valor:
- Añade RAG — Open WebUI tiene ingesta de documentos integrada (nueve opciones de BD vectorial). Carga PDFs o pega URLs en Workspace → Knowledge para dar al modelo contexto de tus propios archivos.
- Pon Nginx al frente — Añade terminación TLS con un certificado Let's Encrypt gratuito para acceder a la interfaz por HTTPS desde cualquier lugar sin exponer un puerto HTTP sin procesar.
- Habilita acceso multiusuario — El panel de administrador de Open WebUI admite roles de usuario y restricciones de modelos por usuario, haciéndolo utilizable como herramienta de equipo sin que todos compartan un inicio de sesión.
Todo el stack se ejecuta aislado si es necesario — sin llamadas salientes a proveedores de modelos, sin telemetría en la que no hayas optado. Ese es el caso práctico del auto-alojamiento: no solo costo, sino control.
Borrador asistido por IA, revisado y editado por humanos para precisión; todas las especificaciones y comandos verificados contra la documentación oficial de Ollama y Open WebUI y fuentes comunitarias.