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!) |
Порядок запуска и зависимости¶
- 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 — зафиксировать конкретную версию.
Связанные файлы¶
- rag-sync.md — синхронизация KB → OpenWebUI
- ragserver-workstation.md — общее описание сервера
- openwebui.md — конфигурация Open WebUI
- qdrant.md — детали векторного хранилища
- ollama.md — host-модели Ollama
Известные проблемы¶
- QDRANT_API_KEY и POSTGRES_PASSWORD утекли в чат 05.08.2026 → RAG-02 и RAG-03 в TODO
- Двойная индексация при upload+attach в OpenWebUI (задача 8)
- Медленная генерация эмбеддингов на CPU (задача 7)
- Плавающий тег
:mainдля OpenWebUI (задача 23)