Запуск PostgreSQL, pgvector и Qdrant с использованием Docker Compose


Зачем нужны PostgreSQL, pgvector и Qdrant

PostgreSQL хранит обычные данные: пользователи, документы, метаданные, настройки. К нему подключается приложение для записей и настроек.

pgvector — расширение PostgreSQL. Оно добавляет тип «вектор» и индексы (IVFFlat, HNSW) для поиска ближайших соседей. Плюс: одна база для всего — и таблицы, и векторы; привычные бэкапы и транзакции. Удобно, если объём векторов средний и вы уже используете PostgreSQL.

Qdrant — отдельный сервис только для векторного поиска. Open source, можно развернуть у себя. Подходит для больших коллекций и сценариев, когда хочется вынести векторный поиск в отдельный слой.

Решение Развёртывание Когда выбирать
pgvector Расширение PostgreSQL, одна БД Уже есть PostgreSQL; средний объём векторов; нужны транзакции и бэкапы в одном месте
Qdrant Отдельный сервис Нужен отдельный векторный слой; большие объёмы; фильтры и метаданные к векторам

В этой инструкции поднимаем PostgreSQL и Qdrant в Docker Compose. При желании в той же PostgreSQL можно включить pgvector и хранить векторы там — оба варианта допустимы.


1. Создание папки для контейнеров

Создаём папку и переходим в неё:

mkdir -p ./data/postgres-qdrant && cd $_

2. Конфигурация docker-compose.yml

Создаём файл docker-compose.yml с двумя сервисами: PostgreSQL и Qdrant.

version: '3.8'
services:
  postgres:
    image: postgres:15-alpine
    environment:
      POSTGRES_USER: appuser
      POSTGRES_PASSWORD: your_secure_password
      POSTGRES_DB: appdb
    volumes:
      - pgdata:/var/lib/postgresql/data
    ports:
      - "5432:5432"
    healthcheck:
      test: ["CMD-SHELL", "pg_isready -U appuser"]
      interval: 5s
      timeout: 5s
      retries: 5

  qdrant:
    image: qdrant/qdrant:latest
    volumes:
      - qdrant_storage:/qdrant/storage
    ports:
      - "6333:6333"
    environment:
      QDRANT__SERVICE__GRPC_PORT: 6334

volumes:
  pgdata:
  qdrant_storage:

Не забудьте заменить your_secure_password на свой надёжный пароль.


3. Назначение портов

Сервис Порт Назначение
PostgreSQL 5432 Подключение приложения, миграции, метаданные
Qdrant REST 6333 Веб-интерфейс (dashboard), API коллекций, проверка здоровья
Qdrant gRPC 6334 Быстрый поиск по векторам из приложения

4. Запуск контейнеров

Запускаем сервисы в фоне:

docker compose up -d

Проверяем, что контейнеры работают:

docker compose ps

Оба сервиса должны быть в состоянии running.


5. Проверка работоспособности

PostgreSQL — подключение и простой запрос:

psql -h localhost -U appuser -d appdb -c "SELECT 1"

В ответ должно вернуться 1.

Qdrant — веб-интерфейс или API:

  • Откройте в браузере: http://localhost:6333/dashboard
  • Или из терминала: curl http://localhost:6333/collections

Если сервер отвечает — стек готов к использованию.


6. Опционально: включить pgvector в PostgreSQL

Если решите хранить векторы прямо в PostgreSQL, используйте образ с расширением pgvector. Замените образ в docker-compose.yml:

postgres:
  image: pgvector/pgvector:pg15
  # остальные параметры (environment, volumes, ports, healthcheck) — как выше

После первого запуска подключитесь к БД и выполните:

CREATE EXTENSION IF NOT EXISTS vector;

Дальше можно создавать таблицы с полем типа vector(N), где N — размерность векторов (например, 384 или 1536), и строить индексы для быстрого поиска.


7. Что делать дальше

  • Настройте приложение: укажите URL и учётные данные для PostgreSQL и Qdrant.
  • В Qdrant создайте коллекцию под вашу размерность векторов.
  • Загружайте данные через API Qdrant или, при использовании pgvector, пишите векторы в таблицы PostgreSQL.

Бэкапы: для PostgreSQL используйте pg_dump по расписанию; данные Qdrant лежат в volume qdrant_storage — при необходимости копируйте каталог или настройте резервное копирование контейнера.


И вот с помощью этих шагов у вас запущены PostgreSQL и Qdrant в Docker Compose. Для средних объёмов можно ограничиться одним PostgreSQL с pgvector; для отдельного векторного слоя — Qdrant уже готов к работе.