Hôte : les conteneurs IA (Ollama, Open WebUI, RAG) tournent sur le nœud principal VM210 (Ubuntu Server 24.04 · Docker Engine + NVIDIA Container Toolkit — l'accès CUDA à la RTX 5090 est validé jusque dans les conteneurs). Le backend vectoriel PostgreSQL / pgvector est sur VM215 (sans GPU) ; Qdrant est conservé comme solution de repli. VM260 (Windows) sert de banc de POC / validation (ex. ComfyUI via Docker Desktop).
📦 Services déployés
ServiceImagePortStatut
Ollamaollama/ollama · 0.32.6 · VM21011434🟢 Opérationnel
ComfyUI0.36.0 · image locale durcie · VM210 (Linux)8188🔵 Validé (génération locale)
Open WebUIghcr.io/open-webui/open-webui · 0.11.0 · VM2103000🟢 Opérationnel
PostgreSQL + pgvectordéployé sur VM215 · 18.4 / 0.8.65432🟢 Opérationnel
Qdrantqdrant/qdrant · 1.18.36333🟡 Repli (fallback)
n8nn8nio/n8n:latest · VM3005678🟢 Opérationnel
NPM (Nginx Proxy Manager)jc21/nginx-proxy-manager:latest443 · 81⚪ Non sourcé
Portainerportainer/portainer-ce:latest9443⚪ Non sourcé
Whisper APIonerahmet/openai-whisper-asr-webservice · VM2109000🔵 Validé · planifié
🎯 Compétences mises en œuvre
  • Installation Docker Engine + Docker Compose
  • Rédaction de fichiers docker-compose.yml
  • Gestion des volumes persistants (montage ZFS)
  • Gestion des réseaux Docker (bridge, host)
  • Isolation applicative des services IA
  • Variables d'environnement via fichiers .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:

Le service n8n ci-dessus est un exemple simplifié (volume local, sans base externe) destiné à illustrer la structure Compose. Le déploiement réel sur VM300 s'appuie sur une base PostgreSQL externe dédiée ; voir la page Automatisation (n8n) pour l'architecture effective.

🖼️ Conteneur ComfyUI durci (VM210)

ComfyUI 0.36.0 s'exécute dans une image construite localement : base Python figée par digest, sources figées par commit, dépendances verrouillées avec leurs empreintes (wheels téléchargées puis installées hors ligne). Environnement validé : Python 3.12.14, PyTorch 2.11.0, CUDA 13.0.

  • Exécution sans privilèges, système de fichiers racine en lecture seule
  • Modèles montés en lecture seule ; dossiers dédiés pour entrées, sorties, état et caches
  • Nœuds personnalisés et API désactivés (ce n'est pas un blocage général du réseau sortant)
  • Interface publiée uniquement sur la boucle locale de la VM ; accès par tunnel SSH, sans publication Internet
  • Checkpoint vérifié par empreinte SHA-256 (issue du dépôt de confiance) avant utilisation

Le POC Windows antérieur (VM260) reste distinct de ce déploiement Linux. Le partage GPU ComfyUI/Ollama est une bascule manuelle, pas encore un ordonnanceur automatique. Détails et mesures sur la page IA & LLM.

🔎 Inspection du conteneur et correctif de cache

Commande utilisée (assainie) — vérifications d'état exécutées sur le conteneur ComfyUI et le conteneur Ollama : statut du conteneur, dernières lignes de journal, modèles Ollama résidents, puis contrôles HTTP de l'API locale de ComfyUI. Noms de conteneurs et hôtes remplacés par des exemples.

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 confirme la réponse du serveur ; la présence du checkpoint dans le chargeur confirme sa détection, pas encore la réussite d'une inférence. ollama ps décrit les modèles résidents, sans garantir l'absence de requêtes en cours. Détails sur le déchargement mémoire (/free) et la télémétrie GPU sur la page IA & LLM.

Commande utilisée (assainie) — un démarrage a échoué dans getpass.getuser() : l'UID du compte hôte n'existait pas dans le fichier passwd du conteneur. Les variables suivantes ont permis de conserver l'exécution non privilégiée, sans reconstruire l'image :

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

/state/cache désigne ici un montage d'exemple accessible en écriture à l'UID du conteneur. La variable USER ne crée pas de compte et n'accorde aucun privilège.

Pages liées

Références & Sources

CatégorieRessourceURL
Documentation officielleDocker Documentationdocs.docker.com
Documentation officielleNVIDIA Container Toolkitdocs.nvidia.com — container-toolkit
Versions utiliséesOllama 0.32.6 · Open WebUI 0.11.0 · PostgreSQL 18.4 · pgvector 0.8.6 · Qdrant 1.18.3 (repli)—
LicenceDocker Engine (Moby) — Apache 2.0github.com/moby/moby — LICENSE
Contenu de cette pagePartagé sous CC BY-SA 4.0creativecommons.org/licenses/by-sa/4.0