Host: los contenedores de IA (Ollama, Open WebUI, RAG) se ejecutan en el nodo principal VM210 (Ubuntu Server 24.04 · Docker Engine + NVIDIA Container Toolkit — el acceso CUDA a la RTX 5090 está validado incluso dentro de los contenedores). El backend vectorial PostgreSQL / pgvector está en VM215 (sin GPU); Qdrant se conserva como solución de respaldo. VM260 (Windows) sirve como banco de PoC / validación (p. ej. ComfyUI vía Docker Desktop).
📦 Servicios desplegados
ServicioImagenPuertoEstado
Ollamaollama/ollama · 0.32.6 · VM21011434🟢 Operativo
ComfyUI0.36.0 · imagen local reforzada · VM210 (Linux)8188🔵 Validado (generación local)
Open WebUIghcr.io/open-webui/open-webui · 0.11.0 · VM2103000🟢 Operativo
PostgreSQL + pgvectordesplegado en VM215 · 18.4 / 0.8.65432🟢 Operativo
Qdrantqdrant/qdrant · 1.18.36333🟡 Respaldo (fallback)
n8nn8nio/n8n:latest · VM3005678🟢 Operativo
NPM (Nginx Proxy Manager)jc21/nginx-proxy-manager:latest443 · 81⚪ Sin fuente
Portainerportainer/portainer-ce:latest9443⚪ Sin fuente
Whisper APIonerahmet/openai-whisper-asr-webservice · VM2109000🔵 Validado · planificado
🎯 Competencias aplicadas
  • Instalación de Docker Engine + Docker Compose
  • Redacción de archivos docker-compose.yml
  • Gestión de volúmenes persistentes (montaje ZFS)
  • Gestión de redes Docker (bridge, host)
  • Aislamiento a nivel de aplicación de los servicios de IA
  • Variables de entorno mediante archivos .env
📄 docker-compose.yml
yaml
services:
  open-webui:
    image: ghcr.io/open-webui/open-webui:main   # 0.11.0
    container_name: open-webui
    ports:
      - '3000:8080'
    volumes:
      - open-webui-data:/app/backend/data
    environment:
      - OLLAMA_BASE_URL=http://host-gateway:11434
      # Backend vectoriel : pgvector hébergé sur VM215 (sans GPU)
      - VECTOR_DB=pgvector
      - PGVECTOR_DB_URL=postgresql://<role>:<secret>@<hote-vm215>/rag
      - RAG_EMBEDDING_ENGINE=ollama
      - RAG_EMBEDDING_MODEL=bge-m3
    extra_hosts:
      - 'host-gateway:host-gateway'
    restart: unless-stopped

  n8n:
    image: n8nio/n8n:latest
    container_name: n8n
    ports:
      - '5678:5678'
    volumes:
      - n8n-data:/home/node/.n8n
    restart: unless-stopped

  # Solution de repli — conservée tant que le retrait n'est pas clôturé
  qdrant:
    image: qdrant/qdrant:latest                 # 1.18.3
    container_name: qdrant
    ports:
      - '6333:6333'
    volumes:
      - qdrant-data:/qdrant/storage
    restart: unless-stopped

volumes:
  open-webui-data:
  n8n-data:
  qdrant-data:

El servicio n8n anterior es un ejemplo simplificado (volumen local, sin base de datos externa) destinado a ilustrar la estructura de Compose. El despliegue real en VM300 se apoya en una base de datos PostgreSQL externa dedicada; consulte la página Automatización (n8n) para la arquitectura efectiva.

🖼️ Contenedor ComfyUI reforzado (VM210)

ComfyUI 0.36.0 se ejecuta en una imagen construida localmente: base de Python fijada por digest, fuentes fijadas por commit, dependencias bloqueadas con sus hashes (wheels descargadas e instaladas sin conexión). Entorno validado: Python 3.12.14, PyTorch 2.11.0, CUDA 13.0.

  • Ejecución sin privilegios, sistema de archivos raíz de solo lectura
  • Modelos montados en solo lectura; carpetas dedicadas para entradas, salidas, estado y cachés
  • Nodos personalizados y API deshabilitados (no es un bloqueo general de la red saliente)
  • Interfaz publicada únicamente en el loopback local de la VM; acceso mediante túnel SSH, sin publicación en Internet
  • Checkpoint verificado por hash SHA-256 (procedente del repositorio de confianza) antes de su uso

El PoC anterior de Windows (VM260) permanece separado de este despliegue Linux. El uso compartido de GPU entre ComfyUI/Ollama es un cambio manual, todavía no un planificador automático. Detalles y mediciones en la página IA y LLM.

🔎 Inspección del contenedor y corrección de caché

Comando utilizado (depurado) — comprobaciones de estado ejecutadas sobre el contenedor de ComfyUI y el contenedor de Ollama: estado del contenedor, últimas líneas de registro, modelos Ollama residentes y, después, comprobaciones HTTP de la API local de ComfyUI. Nombres de contenedores y hosts sustituidos por ejemplos.

bash
COMFY_CONTAINER='<conteneur-comfyui>'
OLLAMA_CONTAINER='<conteneur-ollama>'
COMFY_URL='http://127.0.0.1:8188'

docker inspect "$COMFY_CONTAINER" --format '{{.State.Status}}'
docker logs --tail 40 "$COMFY_CONTAINER"
docker exec "$OLLAMA_CONTAINER" ollama ps
curl --fail --max-time 10 -sS -o /dev/null \
  -w 'HTTP=%{http_code}\n' "$COMFY_URL/"
curl --fail --max-time 10 -sS "$COMFY_URL/object_info/CheckpointLoaderSimple"
curl --fail --max-time 10 -sS "$COMFY_URL/queue"

HTTP 200 confirma la respuesta del servidor; la presencia del checkpoint en el cargador confirma su detección, todavía no el éxito de una inferencia. ollama ps describe los modelos residentes, sin garantizar la ausencia de solicitudes en curso. Detalles sobre la liberación de memoria (/free) y la telemetría de la GPU en la página IA y LLM.

Comando utilizado (depurado) — un arranque falló en getpass.getuser(): el UID de la cuenta del host no existía en el archivo passwd del contenedor. Las siguientes variables permitieron conservar la ejecución sin privilegios, sin reconstruir la imagen:

yaml
environment:
  USER: comfyui
  TORCHINDUCTOR_CACHE_DIR: /state/cache/torchinductor

/state/cache designa aquí un montaje de ejemplo con permiso de escritura para el UID del contenedor. La variable USER no crea una cuenta ni concede ningún privilegio.

Páginas relacionadas

Referencias y fuentes

CategoríaRecursoURL
Documentación oficialDocker Documentationdocs.docker.com
Documentación oficialNVIDIA Container Toolkitdocs.nvidia.com — container-toolkit
Versión utilizadaOllama 0.32.6 · Open WebUI 0.11.0 · PostgreSQL 18.4 · pgvector 0.8.6 · Qdrant 1.18.3 (repli)—
LicenciaDocker Engine (Moby) — Apache 2.0github.com/moby/moby — LICENSE
Contenido de esta páginaCompartido bajo CC BY-SA 4.0creativecommons.org/licenses/by-sa/4.0