Розгортання 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.