Instalación de Open WebUI para Interfaz de Chat con LLMs

Open WebUI (anteriormente Ollama WebUI) es una interfaz web completa de tipo ChatGPT para interactuar con modelos de lenguaje locales a través de Ollama o vLLM. Ofrece historial de conversaciones, gestión de usuarios, documentos RAG, soporte de imágenes y pipelines personalizados, todo sin depender de servicios externos. Esta guía cubre el despliegue con Docker, la integración con Ollama, la gestión de usuarios y la configuración de acceso seguro con Nginx.

Requisitos Previos

  • Servidor Linux (Ubuntu 20.04+, Debian 11+)
  • Docker y Docker Compose instalados
  • Ollama o vLLM funcionando en el servidor
  • Al menos 4 GB de RAM
  • Nginx (para proxy inverso con SSL)
# Verificar Docker
docker --version
docker compose version

# Verificar Ollama
curl http://localhost:11434/api/version

Instalación con Docker

Instalación básica con Docker run

# Con Ollama en el mismo servidor (red host)
docker run -d \
  --name open-webui \
  --restart always \
  --network=host \
  -v open-webui-data:/app/backend/data \
  -e OLLAMA_BASE_URL=http://127.0.0.1:11434 \
  ghcr.io/open-webui/open-webui:main

# Con Ollama en un servidor diferente
docker run -d \
  --name open-webui \
  --restart always \
  -p 3000:8080 \
  -v open-webui-data:/app/backend/data \
  -e OLLAMA_BASE_URL=http://IP_SERVIDOR_OLLAMA:11434 \
  ghcr.io/open-webui/open-webui:main

# Con soporte GPU para procesamiento local
docker run -d \
  --name open-webui \
  --gpus all \
  --restart always \
  --network=host \
  -v open-webui-data:/app/backend/data \
  ghcr.io/open-webui/open-webui:cuda

Instalación con Docker Compose (recomendado)

mkdir -p /opt/open-webui
cd /opt/open-webui
# /opt/open-webui/docker-compose.yml
services:
  open-webui:
    image: ghcr.io/open-webui/open-webui:main
    container_name: open-webui
    restart: unless-stopped
    ports:
      - "3000:8080"
    volumes:
      - ./data:/app/backend/data
    environment:
      # URL de Ollama (en el servidor host)
      - OLLAMA_BASE_URL=http://host.docker.internal:11434
      # Habilitar registro de nuevos usuarios (true/false)
      - ENABLE_SIGNUP=true
      # Dominio para cookies de sesión
      - WEBUI_URL=https://chat.tudominio.com
      # Nombre de la instancia
      - WEBUI_NAME=Mi Asistente IA
      # Clave secreta para las sesiones
      - SECRET_KEY=cambia-esto-por-una-cadena-aleatoria-larga
    extra_hosts:
      - "host.docker.internal:host-gateway"
    networks:
      - webui-net

networks:
  webui-net:
    driver: bridge
# Iniciar el servicio
docker compose up -d

# Ver los logs
docker compose logs -f

# La interfaz estará disponible en:
# http://IP_SERVIDOR:3000

Instalación sin Docker

# Instalar dependencias del sistema
sudo apt-get update
sudo apt-get install -y python3 python3-pip python3-venv nodejs npm git

# Clonar el repositorio
git clone https://github.com/open-webui/open-webui.git /opt/open-webui
cd /opt/open-webui

# Instalar dependencias del backend Python
python3 -m venv venv
source venv/bin/activate
pip install -r backend/requirements.txt

# Construir el frontend
npm install
npm run build

# Configurar las variables de entorno
cat > /opt/open-webui/.env << 'EOF'
OLLAMA_BASE_URL=http://localhost:11434
WEBUI_SECRET_KEY=cambia-esta-clave-secreta
DATA_DIR=/opt/open-webui/data
EOF

# Iniciar el servidor
cd backend
uvicorn main:app --host 0.0.0.0 --port 8080

Integración con Ollama

Configuración de modelos desde la interfaz

Una vez que Open WebUI está funcionando:

  1. Accede a la interfaz web
  2. Ve a Settings > Models
  3. En "Ollama Models", haz clic en el botón de actualizar
  4. Los modelos instalados en Ollama aparecerán automáticamente

Descargar modelos desde la interfaz

# También puedes gestionar los modelos de Ollama desde Open WebUI
# Settings > Models > Pull a model from Ollama.com
# Introduce el nombre del modelo: llama3.2, mistral, etc.

Integración con APIs externas

Open WebUI también puede conectarse a APIs compatibles con OpenAI:

# Configurar en Settings > Connections > OpenAI API
# API Base URL: http://localhost:8000/v1 (para vLLM)
# API Key: any-string (vLLM no requiere clave real)

Gestión de Usuarios y Roles

Primer usuario (administrador)

El primer usuario que se registre en la instancia obtiene automáticamente el rol de administrador.

Roles disponibles

RolPermisos
AdminAcceso completo, gestión de usuarios y configuración
UserAcceso a chat, historial propio, documentos propios
PendingSin acceso hasta que un admin lo aprueba

Configuración de acceso

# Variables de entorno para controlar el registro
# En docker-compose.yml o en el archivo .env:

# Deshabilitar el registro público (solo invitación)
ENABLE_SIGNUP=false

# Requerir aprobación manual de nuevos usuarios
DEFAULT_USER_ROLE=pending

# Permitir registro solo con dominios de email específicos
# (configurar desde el panel de admin)

Gestión de usuarios desde el panel

  1. Accede como administrador
  2. Ve a Admin Panel > Users
  3. Desde aquí puedes:
    • Ver todos los usuarios registrados
    • Cambiar roles (user, admin)
    • Aprobar usuarios pendientes
    • Desactivar cuentas

Configuración de RAG

RAG (Retrieval-Augmented Generation) permite que el modelo consulte documentos propios para responder preguntas.

# Configurar el modelo de embeddings para RAG
# En Settings > Documents:
# - Embedding Model: nomic-embed-text (via Ollama)
# - O usar un modelo de OpenAI si tienes API key

# Descargar el modelo de embeddings en Ollama
ollama pull nomic-embed-text

Añadir documentos

  1. Haz clic en el icono de + en el chat o ve a Workspace > Documents
  2. Sube archivos PDF, TXT, DOCX o introduce URLs
  3. Open WebUI indexará el contenido automáticamente
  4. En el chat, usa #nombre-del-documento para consultar el documento específico

Colecciones de documentos

# Las colecciones agrupan múltiples documentos relacionados
# Settings > Documents > Collections
# Ejemplo: crear una colección "Documentación Técnica" con todos los manuales

Proxy Inverso con Nginx

# Obtener certificado SSL
sudo apt-get install -y certbot python3-certbot-nginx
sudo certbot --nginx -d chat.tudominio.com
# /etc/nginx/sites-available/open-webui
server {
    listen 80;
    server_name chat.tudominio.com;
    return 301 https://$host$request_uri;
}

server {
    listen 443 ssl http2;
    server_name chat.tudominio.com;

    ssl_certificate /etc/letsencrypt/live/chat.tudominio.com/fullchain.pem;
    ssl_certificate_key /etc/letsencrypt/live/chat.tudominio.com/privkey.pem;

    # Subidas para documentos RAG
    client_max_body_size 100M;

    location / {
        proxy_pass http://127.0.0.1:3000;
        proxy_set_header Host $host;
        proxy_set_header X-Real-IP $remote_addr;
        proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
        proxy_set_header X-Forwarded-Proto $scheme;

        # WebSocket para el streaming de respuestas
        proxy_http_version 1.1;
        proxy_set_header Upgrade $http_upgrade;
        proxy_set_header Connection "upgrade";

        # Timeouts largos para respuestas de modelos grandes
        proxy_read_timeout 300;
        proxy_connect_timeout 300;
        proxy_send_timeout 300;
    }
}
sudo ln -s /etc/nginx/sites-available/open-webui /etc/nginx/sites-enabled/
sudo nginx -t && sudo systemctl reload nginx

Variables de Entorno y Personalización

# Variables principales de configuración (añadir al docker-compose.yml)

# Identidad y URL
WEBUI_NAME=Mi Asistente Corporativo
WEBUI_URL=https://chat.tudominio.com

# Autenticación
ENABLE_SIGNUP=false              # Deshabilitar registro público
DEFAULT_USER_ROLE=pending        # Los nuevos usuarios deben ser aprobados
ENABLE_LOGIN_FORM=true           # Mostrar el formulario de login

# Ollama
OLLAMA_BASE_URL=http://localhost:11434
OLLAMA_API_BASE_URL=http://localhost:11434/api

# OpenAI (opcional)
OPENAI_API_BASE_URL=https://api.openai.com/v1
OPENAI_API_KEY=tu-api-key

# Almacenamiento
DATA_DIR=/app/backend/data

# Email (para verificación y recuperación de contraseña)
SMTP_SERVER=smtp.tudominio.com
SMTP_PORT=587
[email protected]
SMTP_PASSWORD=tu-clave-smtp

# Límites
MAX_UPLOAD_SIZE=104857600        # 100 MB máximo por archivo

Actualizar Open WebUI

cd /opt/open-webui

# Actualizar la imagen Docker
docker compose pull
docker compose up -d

# Ver la versión instalada
docker exec open-webui cat /app/backend/version.txt

Solución de Problemas

No se puede conectar con Ollama

# Verificar que Ollama está escuchando
curl http://localhost:11434/api/version

# Si Open WebUI está en Docker, verificar la red
docker exec open-webui curl http://host.docker.internal:11434/api/version

# Verificar los logs de Open WebUI
docker logs open-webui --tail 50

El streaming de respuestas se corta

# Aumentar los timeouts en Nginx
proxy_read_timeout 600;
proxy_send_timeout 600;

# Verificar que WebSocket funciona
# En los logs de Nginx buscar "101 Switching Protocols"
sudo tail -f /var/log/nginx/access.log | grep "101"

Los documentos RAG no funcionan

# Verificar que el modelo de embeddings está disponible
ollama list | grep embed

# Descargar si falta
ollama pull nomic-embed-text

# Verificar los logs del servidor
docker logs open-webui | grep -i "embed\|rag\|error"

La interfaz es lenta con modelos grandes

# Verificar que Ollama usa la GPU
nvidia-smi  # Durante la generación debe mostrar uso de VRAM

# Considerar usar un modelo más pequeño
# llama3.2:1b en lugar de llama3.2:3b

Conclusión

Open WebUI transforma cualquier instalación de Ollama o vLLM en una plataforma de chat completa, con gestión de usuarios, historial persistente y capacidades RAG para consultar documentos propios. Con Nginx como proxy y SSL configurado, puedes ofrecer a todo tu equipo una alternativa privada y segura a ChatGPT, completamente bajo tu control y sin costes recurrentes por uso de API.