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

Отримати VPS arrow_forward
eco Початковий Туторіал

Розгортання Q

calendar_month Jun 18, 2026 schedule 20 хв. читання visibility 25 переглядів
Развёртывание 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 це неактуально.

Завжди тестуйте оновлення на тестовому середовищі, перш ніж застосовувати їх на продакшені.

Вирішення проблем + 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.