Векторная БД Qdrant на VPS: полный старт
Qdrant — быстрая векторная база на Rust, которую любят за простоту и производительность. Поднимем её на VPS, настроим коллекцию, закроем API-ключом и организуем бэкапы.
Содержание
Обсудить статью, задать вопрос или начать новую тему
Есть вопрос по этой статье, идея для обсуждения или просто хотите поделиться опытом? Сообщество MAATRIX ждёт. Для общения, пожалуйста, зарегистрируйтесь в нашем личном кабинете.
Перейти в сообщество →Зачем нужна векторная БД
Обычная БД ищет по точному совпадению, векторная — по смысловой близости. Вы храните эмбеддинги (числовые представления текста, картинок, кода) и ищете ближайшие по косинусному расстоянию. Это фундамент семантического поиска, RAG, рекомендаций и антифрод-систем.
Qdrant выделяется среди аналогов: написан на Rust, ест мало памяти, умеет фильтрацию по метаданным и квантование векторов. Для self-hosted развёртывания на VPS это один из лучших вариантов.
Отдельно стоит отметить фильтрацию по payload. К каждому вектору вы прикрепляете метаданные — категорию, дату, автора, права доступа — и при поиске отсекаете лишнее прямо в базе. Например, ищете похожие документы, но только за последний месяц и только те, что доступны конкретному пользователю. Это превращает Qdrant из простого поиска по векторам в полноценный движок для приложений.
Нужен сервер под эту задачу?
Разверните VPS MAATRIX за пару минут: NVMe, AMD EPYC, root-доступ, локации UK, США и РФ. Оплата картой РФ и по СБП.
Арендовать VPS для QdrantУстановка в Docker
Проще всего запустить официальный образ. Обязательно монтируем volume, иначе данные исчезнут при пересоздании контейнера.
apt update && apt install -y docker.io
mkdir -p /opt/qdrant/storage
docker run -d --name qdrant --restart unless-stopped \
-p 6333:6333 -p 6334:6334 \
-v /opt/qdrant/storage:/qdrant/storage \
qdrant/qdrant
Порт 6333 — REST и веб-дашборд, 6334 — gRPC (быстрее для больших нагрузок). Проверяем:
curl http://localhost:6333/healthz
Нужны сами нейросети для контента?
Генерируйте изображения, видео и озвучку нейросетями на falapi.io — десятки моделей в одном окне. Оплата картой РФ и по СБП.
Закрываем доступ API-ключом
По умолчанию Qdrant открыт всем, кто дотянется до порта. На публичном сервере это дыра. Задаём ключ через переменную окружения и не публикуем порт наружу без нужды.
docker run -d --name qdrant --restart unless-stopped \
-e QDRANT__SERVICE__API_KEY=ВАШ_ДЛИННЫЙ_КЛЮЧ \
-p 127.0.0.1:6333:6333 \
-v /opt/qdrant/storage:/qdrant/storage qdrant/qdrant
Привязка к 127.0.0.1 означает, что порт виден только с самого сервера. Приложение ходит в базу локально, а снаружи ничего не торчит. Если доступ нужен извне — пускайте через nginx с TLS.
Создаём коллекцию
Коллекция задаёт размерность векторов и метрику. Для модели multilingual-e5-base размерность 768, метрика Cosine.
curl -X PUT http://localhost:6333/collections/kb \
-H "api-key: ВАШ_КЛЮЧ" -H "Content-Type: application/json" \
-d '{"vectors": {"size": 768, "distance": "Cosine"}}'
Qdrant по умолчанию строит HNSW-индекс — он даёт быстрый приближённый поиск. Параметры m и ef_construct можно тюнить: больше значения — точнее поиск, но выше RAM и время индексации.
Добавлять данные удобно через upsert — точки с id, вектором и payload. Если id уже существует, точка обновится, если нет — создастся. Это позволяет обновлять базу инкрементально, не пересоздавая коллекцию:
curl -X PUT http://localhost:6333/collections/kb/points \
-H "api-key: ВАШ_КЛЮЧ" -H "Content-Type: application/json" \
-d '{"points": [{"id": 1, "vector": [0.1, 0.2],
"payload": {"src": "faq.md"}}]}'
Поиск с фильтром по payload выглядит так же просто — вы передаёте условие рядом с вектором запроса, и Qdrant отдаёт только подходящие точки, отсортированные по близости.
Ресурсы и производительность
Оценить память просто: число векторов × размерность × 4 байта плюс накладные на HNSW (примерно ×1.5). Миллион 768-мерных векторов — около 4–5 ГБ RAM. Квантование (scalar/binary) режёт это в несколько раз.
Скорость поиска критично зависит от диска и CPU. На AMD EPYC + NVMe у MAATRIX HNSW-обход идёт по памяти, а подгрузка сегментов с NVMe не тормозит — латентность запроса остаётся в единицах миллисекунд.
- До 500k векторов — 2 vCPU / 4 ГБ
- 1–3 млн — 4 vCPU / 8–16 ГБ
- Больше — включайте квантование и шардирование
Бэкапы коллекций
Qdrant умеет снапшоты. Делаем снапшот коллекции и складываем в надёжное место:
curl -X POST http://localhost:6333/collections/kb/snapshots \
-H "api-key: ВАШ_КЛЮЧ"
Файлы лежат в /opt/qdrant/storage/snapshots. Их подхватывают ежедневные бэкапы MAATRIX, поэтому даже при полном сбое диска коллекцию можно восстановить.
Нужен сервер под эту задачу?
Разверните VPS MAATRIX за пару минут: NVMe, AMD EPYC, root-доступ, локации UK, США и РФ. Оплата картой РФ и по СБП.
Арендовать VPS для QdrantОбсудить статью, задать вопрос или начать новую тему
Есть вопрос по этой статье, идея для обсуждения или просто хотите поделиться опытом? Сообщество MAATRIX ждёт. Для общения, пожалуйста, зарегистрируйтесь в нашем личном кабинете.
Перейти в сообщество →Частые вопросы
Qdrant или pgvector?
Qdrant быстрее на больших объёмах и богаче по фильтрам и квантованию. pgvector удобен, если вы и так живёте в PostgreSQL и объёмы небольшие.
Нужен ли Docker?
Не обязательно — есть бинарник, но Docker проще для обновлений и изоляции. На VPS с root-доступом оба варианта работают.
Как масштабировать?
Qdrant поддерживает распределённый режим с шардами и репликами. Начните с одного узла — вертикального масштабирования хватает надолго.
Безопасно ли открывать порт наружу?
Только с API-ключом и TLS. Лучше держать порт на 127.0.0.1 и ходить через nginx-прокси или SSH-туннель.
Нужны сами нейросети для контента?
Генерируйте изображения, видео и озвучку нейросетями на falapi.io — десятки моделей в одном окне. Оплата картой РФ и по СБП.