Хост: контейнеры ИИ (Ollama, Open WebUI, RAG) работают на основном узле VM210 (Ubuntu Server 24.04 · Docker Engine + NVIDIA Container Toolkit — доступ CUDA к RTX 5090 проверен вплоть до контейнеров). Векторный backend PostgreSQL / pgvector размещён на VM215 (без GPU); Qdrant сохранён как резервное решение. VM260 (Windows) служит стендом POC / проверки (например, ComfyUI через Docker Desktop).
📦 Развёрнутые сервисы
СервисОбразПортСтатус
Ollamaollama/ollama · 0.32.6 · VM21011434🟢 В работе
ComfyUI0.36.0 · усиленный локальный образ · VM210 (Linux)8188🔵 Проверено (локальная генерация)
Open WebUIghcr.io/open-webui/open-webui · 0.11.0 · VM2103000🟢 В работе
PostgreSQL + pgvectorразвёрнут на VM215 · 18.4 / 0.8.65432🟢 В работе
Qdrantqdrant/qdrant · 1.18.36333🟡 Резерв (fallback)
n8nn8nio/n8n:latest · VM3005678🟢 В работе
NPM (Nginx Proxy Manager)jc21/nginx-proxy-manager:latest443 · 81⚪ Без источника
Portainerportainer/portainer-ce:latest9443⚪ Без источника
Whisper APIonerahmet/openai-whisper-asr-webservice · VM2109000🔵 Проверено · запланировано
🎯 Применённые компетенции
  • Установка Docker Engine + Docker Compose
  • Написание файлов docker-compose.yml
  • Управление постоянными томами (монтирование ZFS)
  • Управление сетями Docker (bridge, host)
  • Изоляция сервисов ИИ на уровне приложений
  • Переменные окружения через файлы .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:

Сервис n8n выше — упрощённый пример (локальный том, без внешней базы данных) для иллюстрации структуры Compose. Реальное развёртывание на VM300 использует выделенную внешнюю базу PostgreSQL; см. страницу Автоматизация (n8n) для действительной архитектуры.

🖼️ Усиленный контейнер ComfyUI (VM210)

ComfyUI 0.36.0 работает в локально собранном образе: базовый образ Python закреплён по digest, исходники закреплены по commit, зависимости зафиксированы с контрольными суммами (wheel-пакеты скачиваются и устанавливаются офлайн). Проверенное окружение: Python 3.12.14, PyTorch 2.11.0, CUDA 13.0.

  • Запуск без привилегий, корневая файловая система только для чтения
  • Модели монтируются только для чтения; отдельные папки для входных, выходных данных, состояния и кэшей
  • Пользовательские узлы и API отключены (это не общая блокировка исходящего трафика)
  • Интерфейс публикуется только на локальном loopback ВМ; доступ через SSH-туннель, без публикации в Интернете
  • Чекпоинт проверяется по контрольной сумме SHA-256 (из доверенного репозитория) перед использованием

Более ранний Windows-POC (VM260) остаётся отдельным от этого Linux-развёртывания. Совместное использование GPU ComfyUI/Ollama — это ручное переключение, а не автоматический планировщик. Подробности и измерения — на странице ИИ и LLM.

🔎 Проверка контейнера и исправление кэша

Использованная команда (санированная) — проверки состояния контейнера ComfyUI и контейнера Ollama: статус контейнера, последние строки журнала, резидентные модели Ollama, затем HTTP-проверки локального API ComfyUI. Имена контейнеров и хостов заменены примерами.

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 подтверждает ответ сервера; наличие чекпоинта в загрузчике подтверждает его обнаружение, но ещё не успешный инференс. ollama ps показывает резидентные модели, не гарантируя отсутствия выполняющихся запросов. Подробности об освобождении памяти (/free) и телеметрии GPU на странице ИИ и LLM.

Использованная команда (санированная) — один из запусков завершился ошибкой в getpass.getuser(): UID учётной записи хоста отсутствовал в файле passwd контейнера. Следующие переменные позволили сохранить непривилегированное выполнение без пересборки образа:

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

/state/cache здесь обозначает пример точки монтирования, доступной для записи UID контейнера. Переменная USER не создаёт учётную запись и не даёт никаких привилегий.

Связанные страницы

Ссылки и источники

КатегорияРесурсURL
Официальная документацияDocker Documentationdocs.docker.com
Официальная документацияNVIDIA Container Toolkitdocs.nvidia.com — container-toolkit
Используемая версияOllama 0.32.6 · Open WebUI 0.11.0 · PostgreSQL 18.4 · pgvector 0.8.6 · Qdrant 1.18.3 (repli)—
ЛицензияDocker Engine (Moby) — Apache 2.0github.com/moby/moby — LICENSE
Содержимое этой страницыПубликуется под CC BY-SA 4.0creativecommons.org/licenses/by-sa/4.0