Перейти к содержанию

RAG-платформа: Docker Compose стек

Автоматически составлено агентом 06.08.2026 из rag-sync.md, ragserver-workstation.md, 00_INDEX.md. Требует ревью: проверить актуальность версий образов и переменных.

Быстрая справка

Параметр Значение
Хост ragserver 192.168.1.200 (Ubuntu 22.04.5)
Юзер oswold (не root!)
Каталог /opt/rag-platform/
Compose file /opt/rag-platform/docker-compose.yml
Docker network rag-net (bridge, изолирован)
Точка входа http://192.168.1.200:3000 (Open WebUI)
Внешний доступ через nginx на ragserver → https://rag.alatyr-service.ru

Три контейнера + host Ollama

Контейнер Образ Порт Роль
rag-openwebui ghcr.io/open-webui/open-webui:main 3000 (внутри 8080) Frontend + API + RAG-логика
rag-postgres postgres:16-alpine 5432 (только rag-net) Метаданные OpenWebUI (пользователи, коллекции, файлы)
rag-qdrant qdrant/qdrant:latest 6333 HTTP, 6334 gRPC Векторное хранилище эмбеддингов
Ollama host systemd (не docker!) 192.168.1.200:11434 Сервер моделей: LLM + embeddings

Важно: Ollama НЕ в докере — работает как systemd-service на хосте. Слушает на 192.168.1.200:11434, не на localhost. Контейнеры дотягиваются до неё через bridge network → host gateway.

Named volumes / bind mounts

Всё через bind mounts на хост (легко бэкапить):

  • /opt/rag-platform/data/openwebui//app/backend/data в контейнере rag-openwebui
  • /opt/rag-platform/data/postgres//var/lib/postgresql/data
  • /opt/rag-platform/data/qdrant//qdrant/storage

Бэкап всей платформы = tar /opt/rag-platform/data/ (см. RAG-05 в TODO).

Ключевые переменные окружения

Все секреты хранятся в /opt/rag-platform/.env (не в git!):

Переменная Где используется Секрет?
POSTGRES_PASSWORD rag-postgres ✅ (утёк 05.08.2026, ротировать)
POSTGRES_USER rag-postgres
POSTGRES_DB rag-postgres
DATABASE_URL rag-openwebui ✅ (содержит POSTGRES_PASSWORD)
QDRANT_API_KEY rag-openwebui + rag-qdrant ✅ (утёк 05.08.2026, ротировать)
WEBUI_SECRET_KEY rag-openwebui ✅ (jwt для сессий)
OLLAMA_BASE_URL rag-openwebui http://192.168.1.200:11434
RAG_EMBEDDING_ENGINE rag-openwebui ollama
RAG_EMBEDDING_MODEL rag-openwebui nomic-embed-text:latest
VECTOR_DB rag-openwebui qdrant
QDRANT_URI rag-openwebui http://qdrant:6333 (docker DNS!)

Порядок запуска и зависимости

rag-postgres  ──┐
                ├──> rag-openwebui (depends_on)
rag-qdrant    ──┘
  • Postgres и Qdrant стартуют первыми
  • OpenWebUI ждёт их healthcheck (обычно ~10-30 сек)
  • Ollama на хосте стартует отдельно (systemd) — не блокирует docker

Healthcheck

  • rag-postgres: pg_isready -U $POSTGRES_USER каждые 10 сек
  • rag-qdrant: HTTP GET /healthz каждые 10 сек
  • rag-openwebui: HTTP GET /health каждые 30 сек

Команды на каждый день

# Статус всех контейнеров
sudo docker compose -f /opt/rag-platform/docker-compose.yml ps

# Логи одного сервиса
sudo docker compose -f /opt/rag-platform/docker-compose.yml logs -f rag-openwebui

# Рестарт после смены .env
sudo docker compose -f /opt/rag-platform/docker-compose.yml up -d

# Полный останов
sudo docker compose -f /opt/rag-platform/docker-compose.yml down

# Перезапуск одного контейнера
sudo docker compose -f /opt/rag-platform/docker-compose.yml restart rag-openwebui

Обновление образов

sudo docker compose -f /opt/rag-platform/docker-compose.yml pull
sudo docker compose -f /opt/rag-platform/docker-compose.yml up -d
sudo docker image prune -f  # чистим старые слои

⚠️ Осторожно: OpenWebUI ghcr.io/open-webui/open-webui:main — плавающий тег. Может прилететь ломающее обновление. Смотри задачу 23 в TODO — зафиксировать конкретную версию.

Связанные файлы

Известные проблемы

  • QDRANT_API_KEY и POSTGRES_PASSWORD утекли в чат 05.08.2026 → RAG-02 и RAG-03 в TODO
  • Двойная индексация при upload+attach в OpenWebUI (задача 8)
  • Медленная генерация эмбеддингов на CPU (задача 7)
  • Плавающий тег :main для OpenWebUI (задача 23)