Despliega tu stack personal de Chat con LLM privado, VectorDB y frontend: TODO en Docker Compose

Despliega tu propio Chat con LLM y Base de Datos Vectorial usando Docker Compose

¿Te gustaría montar en tu servidor un chat moderno, privado y enriquecido con inteligencia artificial totalmente sin depender de servicios externos? Hoy te propongo un proyecto avanzado pero espectacular: un stack de chat con un modelo LLM local, almacenamiento de contexto usando una VectorDB (Qdrant), y un frontend web listo para conversar.

¿Para qué sirve este proyecto?

  • Chat privado con un modelo de lenguaje (por ejemplo, Ollama o OpenChat) funcionando en tu VPS, sin enviar tus datos fuera de casa.
  • Almacenamiento vectorial: guarda preguntas y respuestas, permitiendo que el chat “recuerde” lo que has consultado gracias a una base vectorial.
  • Frontend web: una interfaz bonita y fácil desde la que conversar en tu navegador.
  • Ideal para desarrolladores, hacklabers y techies que desean experimentar con IA, chatbots y recuperación de información en local.
Logo de Qdrant (VectorDB)
Qdrant: la base de datos vectorial para IA generativa, ¡parte clave en nuestro docker-compose!

¿Qué servicios incluye el docker-compose?

  • LLM API con Ollama (modelo open-source como llama2, mistral o phi3)
  • Qdrant como VectorDB para el almacenamiento semántico
  • Chat frontend open-source (Open WebUI) listo para conectar

¡Y con una sola orden lo tendrás todo funcionando y conectado!

Fichero docker-compose.yml completo

version: "3.8"
services:
  ollama:
    image: ollama/ollama:latest
    container_name: ollama
    ports:
      - "11434:11434"
    volumes:
      - ollama_data:/root/.ollama
    restart: unless-stopped
    environment:
      - OLLAMA_MODELS=llama3

  qdrant:
    image: qdrant/qdrant:latest
    container_name: qdrant
    ports:
      - "6333:6333"
    volumes:
      - qdrant_data:/qdrant/storage
    restart: unless-stopped

  open-webui:
    image: ghcr.io/open-webui/open-webui:main
    container_name: open-webui
    ports:
      - "3000:8080"
    environment:
      - OLLAMA_API_URL=http://ollama:11434
      - QDRANT_URL=http://qdrant:6333
    restart: unless-stopped
    depends_on:
      - ollama
      - qdrant

volumes:
  ollama_data:
  qdrant_data:

¿Cómo lo despliego?

  1. Copia el docker-compose.yml anterior a una carpeta en tu servidor/VPS.
  2. Asegúrate de tener Docker y Docker Compose instalados.
  3. Ejecuta en consola:
    docker-compose up -d
  4. Cuando termine, visita en tu navegador:
    http://TU-IP-O-DOMINIO:3000
  5. ¡Ya puedes chatear!

¿Cómo funciona por dentro?

  • El contenedor ollama expone una API de LLM local (elige tu modelo favorito o descarga otro a posteriori).
  • Qdrant almacena los vectores semánticos de las conversaciones: la memoria del chat.
  • Open WebUI sirve el frontend y, por debajo, enruta mensajes entre ambos servicios (LLM y VectorDB).

Opcional: Personalización y modelos

  • Puedes cambiar el modelo por defecto de Ollama editando la línea OLLAMA_MODELS. Por ejemplo: mistral o phi3.
  • Para añadir protección por contraseña instala un proxy inverso delante (nginx, traefik, caddy) o utiliza la autenticación built-in de Open WebUI.
  • ¿Quieres conectar desde fuera? Recuerda abrir los puertos o configurarlo tras una VPN.

Extra: Consejos y troubleshooting

  • ¿El chat no responde? Espera un par de minutos la primera vez: descargar el modelo lleva un poco, especialmente si eliges uno grande.
  • Error de conexión entre servicios: Asegúrate de haber copiado bien las variables de entorno (OLLAMA_API_URL y QDRANT_URL deben apuntar a los nombres de los servicios, no localhost).
  • Para usar otro modelo (ejemplo: llama3), entra por consola al contenedor ollama y ejecuta ollama pull llama3.
  • ¿Quisieras añadir persistencia a largo plazo para las conversaciones? Qdrant ya lo persiste en su volumen, ¡solo haz backups de la carpeta qdrant_data!

¿Te ha gustado este combo de IA personal? Hasta el próximo hack, ¡deja preguntas o sugerencias en los comentarios!

Avatar

Por Mid