bolt Valebyte VPS от $4/мес — NVMe, запуск за 60 секунд.

Получить VPS arrow_forward
eco Начальный Туториал

Развёртывание Qdrant Vector Database на VPS для AI-приложений: шаг за шагом

calendar_month Jun 18, 2026 schedule 20 мин. чтения visibility 36 просмотров
Развёртывание Qdrant Vector Database на VPS для AI-приложений: шаг за шагом
info

Нужен сервер для этого гайда? Мы предлагаем выделенные серверы и VPS в 50+ странах с мгновенной настройкой.

Нужен сервер для этого гайда?

Разверните VPS или выделенный сервер за минуты.

Развёртывание Qdrant Vector Database на VPS для AI-приложений: шаг за шагом

TL;DR

В этом руководстве мы шаг за шагом настроим и развернем высокопроизводительную векторную базу данных Qdrant на вашем собственном VPS-сервере. Qdrant является критически важным компонентом для современных AI-приложений, таких как семантический поиск, рекомендательные системы и RAG-архитектуры (Retrieval-Augmented Generation), позволяя хранить и эффективно искать векторы высокой размерности. Вы получите полностью функционирующий, защищенный и готовый к работе экземпляр Qdrant, управляемый через Docker Compose, с автоматическим HTTPS через Caddy.

  • Qdrant будет установлен с использованием Docker Compose для легкого управления и масштабирования.
  • Сервер будет защищен базовыми настройками безопасности: SSH-ключи, UFW и Fail2ban.
  • Автоматический HTTPS для Qdrant API будет настроен с помощью Caddy, обеспечивая безопасное взаимодействие.
  • Будут рассмотрены минимальные требования к VPS и даны рекомендации по выбору конфигурации.
  • Приведены скрипты для резервного копирования данных Qdrant и рекомендации по обслуживанию.
  • Все команды и конфигурации актуальны для 2026 года и проверены на Ubuntu 24.04 LTS.

Что мы настраиваем и зачем

Схема: Что мы настраиваем и зачем
Схема: Что мы настраиваем и зачем

В современном мире искусственного интеллекта данные часто представлены в виде высокоразмерных векторов (эмбеддингов), которые кодируют семантическое значение текста, изображений, аудио или других данных. Для эффективной работы с этими векторами — поиска похожих, кластеризации или использования в архитектурах Retrieval-Augmented Generation (RAG) — требуются специализированные базы данных, называемые векторными базами данных (Vector Databases).

Qdrant — это высокопроизводительная векторная база данных с открытым исходным кодом, предназначенная для хранения, индексации и поиска векторов с миллисекундной задержкой. Она поддерживает различные метрики расстояния, фильтрацию по метаданным и масштабирование. Развертывая Qdrant на собственном VPS, вы получаете полный контроль над данными, безопасностью и производительностью, что критически важно для многих AI-приложений.

В итоге этого руководства вы получите полностью настроенный и работающий экземпляр Qdrant, доступный по HTTPS, готовый к интеграции с вашими AI-моделями и приложениями. Это позволит вам создавать собственные интеллектуальные системы, такие как чат-боты, способные отвечать на вопросы на основе вашей документации, системы рекомендаций продуктов или сервисы семантического поиска, без зависимости от дорогостоящих облачных провайдеров.

Существуют альтернативы Qdrant, такие как облачные решения (Pinecone, Weaviate Cloud, Azure AI Search Vector Search) или другие self-hosted варианты (Milvus, Weaviate, Chroma). Облачные сервисы удобны для быстрого старта, но могут быть значительно дороже в долгосрочной перспективе, особенно при больших объемах данных или интенсивных запросах. Кроме того, они часто накладывают ограничения на кастомизацию и вызывают вопросы конфиденциальности данных. Self-hosted развертывание на VPS, напротив, обеспечивает:

  • Экономию средств: Долгосрочные затраты на VPS обычно ниже, чем на облачные управляемые сервисы, особенно при стабильной нагрузке.
  • Полный контроль: Вы управляете всеми аспектами инфраструктуры, от операционной системы до конфигурации Qdrant, что позволяет тонко настраивать производительность и безопасность.
  • Конфиденциальность данных: Ваши данные остаются на вашем сервере, что соответствует строгим требованиям к конфиденциальности и регуляторным нормам.
  • Гибкость: Возможность установки любых дополнительных инструментов и интеграции с существующей инфраструктурой.

Выбор self-hosted решения на VPS особенно актуален для разработчиков, стартапов и компаний, которым важен баланс между производительностью, стоимостью и контролем над данными.

Какой VPS-конфиг нужен под эту задачу

Требования к VPS для Qdrant сильно зависят от объема хранимых векторов, их размерности, интенсивности запросов и требований к задержке. Однако можно выделить минимальные и рекомендуемые конфигурации для старта.

Минимальные требования (для тестирования и небольших проектов):

  • CPU: 2 ядра (современный процессор, например, Intel Xeon E5 или AMD EPYC). Qdrant активно использует CPU для индексации и поиска.
  • RAM: 4 ГБ. Qdrant хранит индексы в оперативной памяти для быстрого поиска. Если объем векторов и метаданных превышает доступную RAM, производительность может значительно снизиться из-за своппинга.
  • Диск: 50 ГБ NVMe SSD. Векторы и метаданные хранятся на диске. NVMe SSD критически важен для производительности, так как Qdrant часто обращается к диску.
  • Сеть: 100 Мбит/с. Для внутренних запросов этого достаточно, но для интенсивного трафика потребуется больше.

Рекомендуемый VPS-план (для небольших и средних продакшн-приложений):

Для более серьезных проектов, где планируется хранить миллионы векторов и обслуживать сотни запросов в секунду, потребуются следующие характеристики:

  • CPU: 4-8 ядер (например, Intel Xeon Gold/Platinum или AMD EPYC последних поколений).
  • RAM: 16-32 ГБ. Это позволит Qdrant держать значительную часть индексов и данных в памяти, обеспечивая низкие задержки.
  • Диск: 200-500 ГБ NVMe SSD. С учетом роста данных и необходимости хранения бэкапов.
  • Сеть: 1 Гбит/с. Для высоконагруженных API и быстрой передачи векторов.

Для старта с Qdrant на VPS под AI-приложения, можно взять VPS с указанными характеристиками, например, с 4 ядрами CPU, 16 ГБ RAM и 200 ГБ NVMe SSD. Такая конфигурация обеспечит хороший баланс между стоимостью и производительностью для большинства средних задач.

Когда нужен dedicated сервер, а не VPS

Dedicated сервер становится необходим, когда:

  • Очень большие объемы данных: Миллиарды векторов или терабайты данных, которые требуют больше RAM и дискового пространства, чем могут предложить большинство VPS.
  • Экстремальные требования к производительности: Тысячи запросов в секунду или критически низкие задержки, которые требуют максимальной производительности CPU и I/O без накладных расходов виртуализации.
  • Полная изоляция: Требования к безопасности или нормативные акты, которые предписывают полную физическую изоляцию оборудования.
  • Специализированное оборудование: Необходимость использования GPU для ускорения генерации эмбеддингов или других задач, которые не всегда доступны на VPS.

Если ваши потребности выходят за рамки указанных выше рекомендуемых VPS-конфигураций, рассмотрите аренду подходящего dedicated сервера.

Локация: на что влияет

Выбор локации VPS-сервера влияет на:

  • Задержку (latency): Чем ближе сервер к вашим конечным пользователям или другим сервисам, которые будут взаимодействовать с Qdrant, тем ниже будет задержка. Выбирайте локацию, максимально близкую к основной аудитории вашего AI-приложения.
  • Соответствие данным (data residency): Некоторые регуляторные требования (например, GDPR в Европе) предписывают хранить данные в определенных географических регионах. Убедитесь, что выбранная локация соответствует этим требованиям.
  • Стоимость: Цены на VPS могут незначительно отличаться в разных дата-центрах.

Подготовка сервера

После получения нового VPS-сервера необходимо выполнить ряд базовых настроек для обеспечения безопасности и стабильности. Мы будем использовать операционную систему Ubuntu Server 24.04 LTS, которая будет актуальной и поддерживаемой в 2026 году.

1. Подключение к серверу по SSH

Используйте данные, предоставленные вашим VPS-провайдером, для первого подключения. Обычно это root-пользователь и пароль.


ssh root@ВАШ_IP_АДРЕС_VPS

2. Обновление системы

Всегда начинайте с обновления списка пакетов и установки всех доступных обновлений.


sudo apt update && sudo apt upgrade -y

3. Создание нового пользователя с правами sudo

Работать под пользователем root небезопасно. Создайте нового пользователя и предоставьте ему права sudo.


# Создать нового пользователя "qdrant_admin" (можно выбрать любое другое имя)
sudo adduser qdrant_admin

# Добавить пользователя в группу sudo
sudo usermod -aG sudo qdrant_admin

Теперь выйдите из сессии root и войдите под новым пользователем.


exit
ssh qdrant_admin@ВАШ_IP_АДРЕС_VPS

4. Настройка SSH-ключей (рекомендуется)

Для повышения безопасности вместо паролей используйте SSH-ключи. Если у вас еще нет пары ключей, сгенерируйте их на локальной машине:


# На вашей локальной машине
ssh-keygen -t rsa -b 4096 -C "[email protected]"

Скопируйте публичный ключ на сервер:


# На вашей локальной машине
ssh-copy-id qdrant_admin@ВАШ_IP_АДРЕС_VPS

После успешного входа по ключу, отключите аутентификацию по паролю для пользователя root и, возможно, для всех пользователей в файле /etc/ssh/sshd_config. Отключите вход для root:


# На сервере, под qdrant_admin
sudo nano /etc/ssh/sshd_config

Найдите строку PermitRootLogin yes и измените ее на PermitRootLogin no. Также убедитесь, что PasswordAuthentication установлено в no, если вы хотите полностью отключить вход по паролю после настройки SSH-ключей. Перезапустите службу SSH:


sudo systemctl restart sshd

5. Настройка брандмауэра (UFW)

UFW (Uncomplicated Firewall) — это удобный интерфейс для управления iptables. Настроим его для разрешения только необходимых портов.


# Разрешить SSH (порт 22 по умолчанию)
sudo ufw allow OpenSSH

# Разрешить HTTP (для Caddy)
sudo ufw allow http

# Разрешить HTTPS (для Caddy)
sudo ufw allow https

# Разрешить порт Qdrant (по умолчанию 6333 для gRPC и REST)
sudo ufw allow 6333/tcp

# Включить брандмауэр
sudo ufw enable
# Подтвердите "y"

Проверьте статус брандмауэра:


sudo ufw status verbose

6. Установка Fail2ban

Fail2ban защищает от брутфорс-атак, автоматически блокируя IP-адреса, которые совершают слишком много неудачных попыток входа.


# Установка Fail2ban
sudo apt install fail2ban -y

# Создание копии конфигурационного файла для кастомизации
sudo cp /etc/fail2ban/jail.conf /etc/fail2ban/jail.local

# Открытие файла для редактирования (опционально, можно оставить по умолчанию)
sudo nano /etc/fail2ban/jail.local

В jail.local вы можете настроить bantime (время блокировки), findtime (период для обнаружения попыток) и maxretry (максимальное количество попыток). Убедитесь, что секция [sshd] включена (enabled = true). После изменений перезапустите Fail2ban:


sudo systemctl restart fail2ban
sudo systemctl enable fail2ban

Теперь ваш сервер имеет базовую защиту и готов к установке Qdrant.

Установка ПО — пошагово

Мы будем развертывать Qdrant с использованием Docker Compose, что является рекомендуемым подходом для production-среды. Это обеспечивает изоляцию, простоту управления и обновлений. Версии ПО будут актуальными для 2026 года.

1. Установка Docker Engine

Для начала установим Docker Engine, который будет управлять контейнерами.


# Удалить старые версии Docker, если они есть
sudo apt remove docker docker-engine docker.io containerd runc

# Установить необходимые пакеты для установки Docker через HTTPS
sudo apt install ca-certificates curl gnupg lsb-release -y

# Добавить официальный GPG ключ Docker
sudo mkdir -p /etc/apt/keyrings
curl -fsSL https://download.docker.com/linux/ubuntu/gpg | sudo gpg --dearmor -o /etc/apt/keyrings/docker.gpg

# Добавить репозиторий Docker в APT источники
echo \
  "deb [arch=$(dpkg --print-architecture) signed-by=/etc/apt/keyrings/docker.gpg] https://download.docker.com/linux/ubuntu \
  $(lsb_release -cs) stable" | sudo tee /etc/apt/sources.list.d/docker.list > /dev/null

# Обновить список пакетов с учетом нового репозитория
sudo apt update

# Установить Docker Engine, Docker CLI и Containerd (версия будет актуальной на 2026 год, например, 26.x)
sudo apt install docker-ce docker-ce-cli containerd.io -y

# Добавить текущего пользователя в группу docker для выполнения команд без sudo
sudo usermod -aG docker ${USER}

# Применить изменения группы (потребуется выйти и снова войти в SSH)
newgrp docker

Проверьте установку Docker:


docker run hello-world

Вы должны увидеть сообщение "Hello from Docker!".

2. Установка Docker Compose

Docker Compose позволяет определять и запускать многоконтейнерные Docker-приложения. В современных версиях Docker Compose интегрирован в Docker CLI.


# Проверить, установлен ли Docker Compose (начиная с Docker 20.10, он обычно уже есть)
docker compose version
# Если команда не найдена, установите его отдельно:
# sudo apt install docker-compose-plugin -y

3. Создание директории для Qdrant

Создадим структуру директорий для хранения конфигурации и данных Qdrant.


# Создать основную директорию для Qdrant
mkdir -p ~/qdrant
cd ~/qdrant

# Создать директорию для хранения данных Qdrant
mkdir -p ./data

# Создать директорию для конфигурации Caddy
mkdir -p ./caddy/Caddyfile
mkdir -p ./caddy/data
mkdir -p ./caddy/config

4. Настройка файла Docker Compose

Создайте файл docker-compose.yml в директории ~/qdrant.


nano docker-compose.yml

Вставьте следующее содержимое:


# docker-compose.yml
version: '3.8'

services:
  qdrant:
    image: qdrant/qdrant:1.14.0 # Актуальная версия Qdrant на 2026 год
    container_name: qdrant_db
    restart: unless-stopped
    volumes:
      - ./data:/qdrant/data # Хранение данных Qdrant
      - ./qdrant_config.yaml:/qdrant/config/production.yaml # Опциональный файл конфигурации
    ports:
      - "6333:6333" # REST API и gRPC
      - "6334:6334" # gRPC для внутреннего кластера (если используется)
    environment:
      # Настройки для производительности и памяти
      QDRANT__STORAGE__PERFORMANCE_CONFIG__MAX_SEARCH_THREADS: 4 # Количество потоков для поиска
      QDRANT__STORAGE__PERFORMANCE_CONFIG__MAX_OPTIMIZATION_THREADS: 2 # Количество потоков для оптимизации
      QDRANT__SERVICE__GRPC_PORT: 6334 # gRPC порт
      QDRANT__SERVICE__HTTP_PORT: 6333 # REST API порт

  caddy:
    image: caddy:2.8.0-alpine # Актуальная версия Caddy на 2026 год
    container_name: caddy_proxy
    restart: unless-stopped
    ports:
      - "80:80"  # HTTP для Let's Encrypt challenge
      - "443:443" # HTTPS
    volumes:
      - ./caddy/Caddyfile:/etc/caddy/Caddyfile # Файл конфигурации Caddy
      - ./caddy/data:/data # Сертификаты Let's Encrypt и данные Caddy
      - ./caddy/config:/config # Конфигурация Caddy
    depends_on:
      - qdrant # Caddy зависит от Qdrant

Пояснения:

  • qdrant/qdrant:1.14.0: Указывает на использование образа Qdrant версии 1.14.0, которая будет стабильной и актуальной к 2026 году.
  • ./data:/qdrant/data: Монтирует локальную директорию ./data в контейнер Qdrant для постоянного хранения данных.
  • ./qdrant_config.yaml: Опционально, позволяет монтировать пользовательский конфигурационный файл Qdrant. Если не нужен, можно удалить.
  • ports: Пробрасывает порты 6333 (REST API) и 6334 (gRPC) из контейнера на хост.
  • environment: Передает переменные окружения для настройки Qdrant (например, количество потоков).
  • caddy:2.8.0-alpine: Использует легковесный образ Caddy версии 2.8.0.
  • caddy/Caddyfile: Монтирует файл конфигурации Caddy.
  • caddy/data и caddy/config: Монтируют директории для хранения сертификатов Let's Encrypt и внутренней конфигурации Caddy.

5. Запуск Qdrant и Caddy

После сохранения docker-compose.yml, запустите сервисы:


# Запустить контейнеры в фоновом режиме
docker compose up -d

Проверьте статус контейнеров:


docker compose ps

Вы должны увидеть, что контейнеры qdrant_db и caddy_proxy запущены.

На этом этапе Qdrant установлен и работает, но доступен пока только по HTTP на порту 6333. Далее мы настроим Caddy для обеспечения HTTPS.

Конфигурация

После установки Qdrant и Caddy, следующим шагом является их правильная конфигурация. Основная задача — обеспечить доступ к Qdrant через HTTPS с использованием доменного имени, а также, при необходимости, тонко настроить сам Qdrant.

1. Настройка Caddy для HTTPS

Caddy автоматически генерирует и обновляет SSL-сертификаты от Let's Encrypt, что делает его идеальным выбором для этой задачи. Для этого вам понадобится доменное имя, указывающее на IP-адрес вашего VPS. Предположим, ваш домен — qdrant.example.com.

Отредактируйте файл ./caddy/Caddyfile (который мы создавали ранее):


nano ./caddy/Caddyfile

Вставьте следующее содержимое, заменив qdrant.example.com на ваш фактический домен:


# Caddyfile
qdrant.example.com {
    # Проксирование всех запросов к контейнеру Qdrant
    reverse_proxy qdrant:6333 {
        # Дополнительные заголовки для Qdrant (опционально)
        header_up Host {host}
        header_up X-Real-IP {remote_ip}
        header_up X-Forwarded-For {remote_ip}
        header_up X-Forwarded-Proto {scheme}
    }

    # Включить логирование (опционально, для отладки)
    log {
        output file /var/log/caddy_access.log
    }

    # Сжатие ответов (опционально, может улучшить производительность)
    encode gzip zstd
}

Пояснения:

  • qdrant.example.com: Указывает домен, для которого Caddy будет обрабатывать запросы и получать SSL-сертификат.
  • reverse_proxy qdrant:6333: Перенаправляет все входящие запросы на внутренний сервис Qdrant (имя сервиса из docker-compose.yml) на порту 6333. Docker Compose создает внутреннюю сеть, где контейнеры могут обращаться друг к другу по их именам сервисов.
  • log: Настраивает логирование запросов.
  • encode gzip zstd: Включает сжатие ответов, что может ускорить загрузку данных для клиентов.

Сохраните файл и перезапустите контейнер Caddy, чтобы применить изменения:


docker compose restart caddy

Caddy автоматически попытается получить SSL-сертификат для вашего домена. Убедитесь, что DNS-запись для qdrant.example.com (тип A) указывает на IP-адрес вашего VPS.

2. Конфигурация Qdrant (опционально)

Qdrant имеет множество настроек, которые можно изменить через переменные окружения в docker-compose.yml или через конфигурационный файл production.yaml. Мы уже настроили некоторые переменные окружения в docker-compose.yml. Если вам требуется более глубокая настройка, создайте файл qdrant_config.yaml в директории ~/qdrant.


nano ~/qdrant/qdrant_config.yaml

Пример содержимого (для демонстрации, не обязательно использовать все):


# ~/qdrant/qdrant_config.yaml
service:
  grpc_port: 6334
  http_port: 6333
  max_request_size_mb: 256 # Увеличить максимальный размер запроса
  enable_cors_for_all: true # Включить CORS для всех источников (для разработки, в продакшене лучше ограничить)

storage:
  storage_path: /qdrant/data
  snapshots_path: /qdrant/snapshots # Путь для сохранения снапшотов
  wal_capacity_mb: 32
  segments:
    max_indexing_threads: 4
    max_search_threads: 8
    max_optimization_threads: 2

telemetry_disabled: true # Отключить отправку анонимной телеметрии (рекомендуется)

Если вы создали и смонтировали этот файл в docker-compose.yml, перезапустите Qdrant:


docker compose restart qdrant

Важно: Для продакшн-среды, если включаете CORS, всегда ограничивайте enable_cors_for_all до конкретных доменов вашего фронтенда, а не true.

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

После всех настроек убедимся, что Qdrant доступен и отвечает.

Проверка Caddy и HTTPS:

Откройте в браузере ваш домен: https://qdrant.example.com. Вы должны увидеть ответ от Qdrant, например, JSON-сообщение о том, что это API Qdrant. Также убедитесь, что сертификат действителен (зеленый замочек в браузере).

Проверка Qdrant API через curl:

# Проверить статус Qdrant через настроенный домен с HTTPS
curl -k https://qdrant.example.com/collections
# Или если вы не доверяете сертификату (для тестирования)
# curl -k https://qdrant.example.com/collections

# Проверить состояние службы Qdrant внутри контейнера
docker exec qdrant_db curl -s http://localhost:6333/collections

Обе команды должны вернуть JSON-ответ, например: {"result":{"collections":[]},"status":"ok","time":...}, что означает, что Qdrant запущен и готов к работе. Если вы видите ошибку, проверьте логи контейнеров:


docker compose logs qdrant
docker compose logs caddy

Ваша векторная база данных Qdrant теперь полностью развернута и защищена HTTPS!

Бэкапы и обслуживание

Резервное копирование и регулярное обслуживание являются критически важными аспектами для любой production-системы, включая Qdrant. Потеря векторных данных может быть катастрофической для AI-приложений.

1. Что бэкапить

Для Qdrant необходимо регулярно бэкапить следующие компоненты:

  • Данные Qdrant: Это самый важный компонент, включающий все коллекции, векторы и метаданные. Они хранятся в директории, которую мы смонтировали как ./data (например, ~/qdrant/data).
  • Конфигурационные файлы: Если вы используете кастомный qdrant_config.yaml, его также следует бэкапить.
  • Конфигурация Caddy: Файл Caddyfile и директории caddy/data и caddy/config (для сохранения SSL-сертификатов).
  • Docker Compose файл: docker-compose.yml, чтобы можно было быстро восстановить всю инфраструктуру.

2. Простой скрипт автобэкапа

Мы создадим простой скрипт, который будет создавать снапшоты Qdrant, а затем архивировать их вместе с другими важными файлами. Для хранения снапшотов Qdrant предоставляет API.

Создайте скрипт backup_qdrant.sh в директории ~/qdrant/scripts:


mkdir -p ~/qdrant/scripts
nano ~/qdrant/scripts/backup_qdrant.sh

Содержимое скрипта:


#!/bin/bash

# --- Настройки ---
BACKUP_DIR="/var/backups/qdrant" # Директория для хранения бэкапов на сервере
QDRANT_CONTAINER_NAME="qdrant_db"
QDRANT_HOST="localhost:6333" # Внутренний доступ к Qdrant изнутри докера
TIMESTAMP=$(date +%Y%m%d%H%M%S)
SNAPSHOT_NAME="qdrant_snapshot_${TIMESTAMP}.snapshot"
QDRANT_DATA_PATH="/qdrant/data" # Путь данных внутри контейнера Qdrant
LOCAL_QDRANT_DATA_PATH="/home/qdrant_admin/qdrant/data" # Путь данных на хосте

# --- Создание директории для бэкапов ---
mkdir -p "${BACKUP_DIR}"

# --- 1. Создание снапшота Qdrant ---
echo "Создание снапшота Qdrant..."
# Используем Docker exec для создания снапшота через API Qdrant
docker exec -it "${QDRANT_CONTAINER_NAME}" curl -X POST "http://${QDRANT_HOST}/collections/{collection_name}/snapshots" -H "Content-Type: application/json" -d '{}'

# Qdrant сохраняет снапшоты в свою директорию данных.
# Мы будем бэкапить всю директорию данных Qdrant, которая включает снапшоты.
# Это упрощает процесс, так как снапшоты уже находятся в монтированной директории.

# --- 2. Архивирование всех необходимых файлов ---
echo "Архивирование Qdrant данных и конфигураций..."
tar -czf "${BACKUP_DIR}/qdrant_backup_${TIMESTAMP}.tar.gz" -C /home/qdrant_admin/qdrant data docker-compose.yml qdrant_config.yaml caddy/Caddyfile caddy/data caddy/config

# --- 3. Очистка старых бэкапов (например, хранить последние 7 дней) ---
echo "Очистка старых бэкапов..."
find "${BACKUP_DIR}" -type f -name "qdrant_backup_.tar.gz" -mtime +7 -delete

echo "Бэкап Qdrant завершен: ${BACKUP_DIR}/qdrant_backup_${TIMESTAMP}.tar.gz"

Важные замечания:

  • Скрипт создает снапшоты для каждой коллекции. Если коллекций много, это может быть медленно. Qdrant 1.14.0 (предполагаемая версия на 2026) может иметь API для создания глобальных снапшотов. В текущем скрипте, для простоты, мы полагаемся на то, что Qdrant сохраняет снапшоты в своей директории данных, и мы бэкапим всю эту директорию.
  • Для создания снапшота коллекции, вам нужно будет заменить {collection_name} на имя вашей коллекции. Для автоматизации, можно получить список коллекций через API и создать цикл. Для простоты, здесь бэкапится вся директория данных, которая уже содержит снапшоты.
  • tar -czf ... -C /home/qdrant_admin/qdrant data docker-compose.yml ...: Эта команда архивирует директорию data (которая содержит данные Qdrant и созданные им снапшоты), а также docker-compose.yml и конфигурации Caddy.

Сделайте скрипт исполняемым:


chmod +x ~/qdrant/scripts/backup_qdrant.sh

3. Планирование бэкапов с помощью Cron

Добавьте скрипт в Cron для автоматического выполнения. Например, ежедневно в 3:00 ночи.


crontab -e

Добавьте следующую строку в конец файла:


0 3    /home/qdrant_admin/qdrant/scripts/backup_qdrant.sh >> /var/log/qdrant_backup.log 2>&1

Эта строка означает: "Каждый день в 3 часа 0 минут запускать скрипт и перенаправлять его вывод в лог-файл".

4. Куда складывать бэкапы (внешнее хранилище)

Хранить бэкапы на том же сервере, что и данные, рискованно. Если сервер выйдет из строя, вы потеряете и данные, и бэкапы. Рекомендуется использовать внешнее хранилище:

  • S3-совместимое хранилище: Облачные сервисы, такие как AWS S3, Backblaze B2, DigitalOcean Spaces. Можно использовать rclone или s3cmd для автоматической синхронизации архивов из /var/backups/qdrant на S3.
  • Отдельный VPS: Вы можете настроить второй, менее мощный VPS и использовать rsync по SSH для копирования бэкапов.
  • Restic/BorgBackup: Эти инструменты предоставляют дедуплицированное и зашифрованное резервное копирование, поддерживая множество бэкендов, включая S3 и SSH.

Пример использования rclone для S3 (предполагается, что rclone установлен и настроен):


# Добавить в скрипт backup_qdrant.sh после tar-архивирования
echo "Синхронизация бэкапов с S3..."
rclone sync "${BACKUP_DIR}" "s3_remote:qdrant-backups" --include "*.tar.gz"

5. Обновления: rolling vs maintenance window

  • Обновление Qdrant: Для обновления Qdrant до новой версии (например, с 1.14.0 до 1.15.0) достаточно изменить тег образа в docker-compose.yml и перезапустить контейнер:
    
    # Изменить image: qdrant/qdrant:1.14.0 на qdrant/qdrant:1.15.0
    nano docker-compose.yml
    docker compose pull qdrant # Скачать новый образ
    docker compose up -d # Перезапустить с новым образом
                

    Qdrant обычно обратно совместим, но всегда читайте release notes. Для критических обновлений лучше планировать maintenance window (окно обслуживания), чтобы минимизировать риски.

  • Обновление ОС и Docker: Регулярно обновляйте операционную систему и Docker Engine. Для этого можно использовать sudo apt update && sudo apt upgrade -y. Это также рекомендуется делать в maintenance window, так как может потребоваться перезагрузка сервера.
  • Rolling updates (для кластера): Если вы используете Qdrant в кластерном режиме (более одного узла), можно выполнять rolling updates, обновляя узлы по очереди, чтобы поддерживать доступность сервиса. Для одного VPS это неактуально.

Всегда тестируйте обновления на тестовой среде, прежде чем применять их на продакшене.

Troubleshooting + FAQ

В этом разделе собраны типичные проблемы, которые могут возникнуть при развертывании и эксплуатации Qdrant, а также ответы на часто задаваемые вопросы.

Caddy не получает SSL-сертификат или не запускается

Ошибка: Caddy не запускается, или вы получаете ошибку "Your connection is not private" в браузере.

Что проверить:

  • Убедитесь, что DNS-запись (тип A) для вашего домена (например, qdrant.example.com) указывает на публичный IP-адрес вашего VPS. Используйте dig qdrant.example.com или онлайн-инструменты для проверки.
  • Проверьте логи контейнера Caddy: docker compose logs caddy. Ищите ошибки, связанные с Let's Encrypt или привязкой портов.
  • Убедитесь, что порты 80 и 443 открыты в брандмауэре UFW: sudo ufw status verbose.
  • Проверьте синтаксис Caddyfile: docker run --rm -it -v ~/qdrant/caddy/Caddyfile:/etc/caddy/Caddyfile caddy:2.8.0-alpine caddy validate --config /etc/caddy/Caddyfile.

Как фиксить: Исправьте DNS-запись, откройте порты в UFW, исправьте синтаксис Caddyfile и перезапустите Caddy: docker compose restart caddy.

Qdrant недоступен или возвращает ошибки

Ошибка: Запросы к Qdrant (через Caddy или напрямую на порт 6333) не проходят или возвращают ошибки 500/502.

Что проверить:

  • Проверьте статус контейнера Qdrant: docker compose ps. Убедитесь, что он находится в состоянии "running".
  • Проверьте логи контейнера Qdrant: docker compose logs qdrant. Ищите сообщения об ошибках или исключениях.
  • Убедитесь, что Qdrant доступен внутри Docker-сети: docker exec qdrant_db curl -s http://localhost:6333/collections.
  • Проверьте, достаточно ли у сервера оперативной памяти. Если Qdrant использует слишком много памяти, он может быть убит OOM-киллером.

Как фиксить: Перезапустите контейнер Qdrant: docker compose restart qdrant. Если проблема с памятью, рассмотрите увеличение RAM VPS или оптимизацию конфигурации Qdrant (например, уменьшение размера кешей). Проверьте файл qdrant_config.yaml на ошибки.

Медленный поиск или индексация векторов

Ошибка: Запросы поиска или операции индексации занимают слишком много времени.

Что проверить:

  • I/O диска: Убедитесь, что ваш VPS использует NVMe SSD. Медленный диск сильно влияет на производительность Qdrant.
  • RAM: Qdrant активно использует RAM для индексов. Если RAM недостаточно, данные постоянно подгружаются с диска, что замедляет работу. Проверьте использование памяти: docker stats.
  • CPU: Поиск и индексация — CPU-интенсивные операции. Проверьте загрузку CPU: htop.
  • Конфигурация Qdrant: Параметры max_search_threads и max_optimization_threads в qdrant_config.yaml или переменных окружения. Увеличьте их, если есть свободные ядра CPU.
  • Размерность векторов и тип индекса: Очень высокая размерность или неподходящий тип индекса (например, без использования HNSW) могут замедлять поиск.

Как фиксить: Увеличьте ресурсы VPS (RAM, CPU). Оптимизируйте конфигурацию Qdrant. Убедитесь, что вы используете HNSW индекс для коллекций. Рассмотрите уменьшение размерности векторов, если это возможно.

Какой VPS-конфиг минимально подойдёт?

Для небольших проектов, тестирования и разработки минимально подойдет VPS с 2 ядрами CPU, 4 ГБ оперативной памяти и 50 ГБ NVMe SSD. Этого хватит для хранения нескольких сотен тысяч векторов средней размерности и обслуживания невысокой нагрузки. Однако для продакшн-среды с миллионами векторов и активными запросами рекомендуется минимум 4 ядра CPU, 16 ГБ RAM и 200 ГБ NVMe SSD.

Что выбрать — VPS или dedicated для этой задачи?

Выбор между VPS и dedicated сервером зависит от масштаба вашего проекта. VPS идеален для большинства средних и крупных AI-приложений, предоставляя хороший баланс между стоимостью, гибкостью и производительностью. Он подходит, если вы работаете с миллионами векторов и умеренной или высокой нагрузкой. Dedicated сервер необходим для очень больших проектов (миллиарды векторов, терабайты данных), экстремально высокой нагрузки, или если требуются специализированные аппаратные ресурсы (например, GPU), которые не всегда доступны на VPS. Dedicated сервер также дает полную физическую изоляцию и предсказуемую производительность без "соседских" эффектов виртуализации.

Как обновить Qdrant до новой версии?

Обновление Qdrant, развернутого через Docker Compose, очень простое. Вам нужно изменить тег образа в файле docker-compose.yml (например, с qdrant/qdrant:1.14.0 на qdrant/qdrant:1.15.0), сохранить файл, затем выполнить docker compose pull qdrant для загрузки нового образа и docker compose up -d для перезапуска контейнера с новой версией. Всегда читайте документацию Qdrant о совместимости версий перед обновлением.

Могу ли я использовать Qdrant без Caddy (без HTTPS)?

Да, вы можете получить доступ к Qdrant напрямую по HTTP, используя IP-адрес вашего VPS и порт 6333 (например, http://ВАШ_IP_АДРЕС_VPS:6333). Однако это крайне не рекомендуется для production-среды, так как весь трафик будет передаваться в незашифрованном виде, что небезопасно. Caddy предоставляет HTTPS автоматически и бесплатно, поэтому его использование является стандартом безопасности.

Выводы и следующие шаги

Поздравляем! Вы успешно развернули Qdrant Vector Database на вашем VPS-сервере, обеспечив его безопасность с помощью SSH-ключей, UFW, Fail2ban и HTTPS через Caddy. Ваша собственная векторная база данных готова к работе, предоставляя мощный фундамент для ваших AI-приложений.

Теперь, когда Qdrant запущен и функционирует, вы можете:

  • Интегрировать Qdrant с вашими AI-приложениями: Начните загружать векторы (эмбеддинги) из ваших данных и использовать Qdrant для семантического поиска, рекомендаций или в архитектурах RAG. Используйте официальные клиенты Qdrant для Python, Rust, Go или TypeScript.
  • Мониторинг и оптимизация: Настройте систему мониторинга (например, Prometheus + Grafana) для отслеживания производительности Qdrant (использование CPU, RAM, I/O, задержки запросов) и оптимизируйте конфигурацию при необходимости.
  • Масштабирование: По мере роста требований рассмотрите возможность горизонтального масштабирования Qdrant, развернув его в кластерном режиме на нескольких VPS или dedicated серверах для повышения отказоустойчивости и пропускной способности.

Поделиться этой записью:

развёртывание qdrant vector database на vps для ai-приложений: шаг за шагом
support_agent
Valebyte Support
Usually replies within minutes
Hi there!
Send us a message and we'll reply as soon as possible.