Установка#

Состав дистрибутива#

Примечание

  • x.y.z - версия продукта;

  • vectordb-qdrant-client - клиент Qdrant (клиентское приложение).

После распаковки архива Vector-DB-x.y.z.zip пользователь получает следующую структуру файлов:

Vector-DB-x-y-z/
├── Vector-DB-x-y-z
│   ├── qdrant-client-x-y-z-darwin-amd64.zip
│   ├── qdrant-client-x-y-z-darwin-arm64.zip
│   ├── qdrant-client-x-y-z-win64.zip
│   ├── vectordb-qdrant-x-y-z-1.x86_64.rpm
│   ├── vectordb-qdrant-x-y-z-1.x86_64.tgz
│   ├── vectordb-qdrant-client-x-y-z-1.x86_64.rpm
│   ├── vectordb-qdrant-client-x-y-z-1.x86_64.tgz
│   ├── vectordb-vault-encryptor-x-y-z-1.x86_64.rpm
│   └── vectordb-vault-encryptor-x-y-z-1.x86_64.tgz
├── Vector-DB-x-y-z-build-log.txt
└── Vector-DB-docker-x-y-z

Файлы в архиве можно разделить на следующие группы:

  1. Бинарные файлы для Linux x86_64:

    • vectordb-qdrant-x-y-z-1.x86_64.tgz - TAR-архив с бинарными файлами сервиса;

    • vectordb-qdrant-client-x-y-z-1.x86_64.tgz - TAR-архив с клиентом Qdrant;

    • vectordb-vault-encryptor-x-y-z-1.x86_64.tgz - TAR-архив с утилитой шифрования.

  2. RPM-пакеты для установки на системах Linux:

    • vectordb-qdrant-x-y-z-1.x86_64.rpm - RPM-пакет сервиса;

    • vectordb-qdrant-client-x-y-z-1.x86_64.rpm - RPM-пакет клиента Qdrant;

    • vectordb-vault-encryptor-x-y-z-1.x86_64.rpm - RPM-пакет утилиты шифрования.

  3. Клиентские архивы для других операционных систем:

    • qdrant-client-x-y-z-win64.zip - ZIP-архив с клиентом Qdrant для Windows 64-bit;

    • qdrant-client-x-y-z-darwin-amd64.zip - ZIP-архив с клиентом Qdrant для macOS AMD64;

    • qdrant-client-x-y-z-darwin-arm64.zip - ZIP-архив с клиентом Qdrant для macOS ARM64.

  4. Дополнительные файлы:

    • Vector-DB-x-y-z-build-log.txt - файл с логами сборки;

    • Vector-DB-docker-x-y-z/ - директория с примером Docker-развертывания.

Установка#

Установка Platform V Vector DB (далее - Vector DB) выполняется с помощью архива или RPM-пакета. В данном примере будем ставить из архива. Архив распаковывается в один каталог. Каталог содержит бинарные файлы. Особенностью установки из архива является отсутствие необходимости получения прав корневого администратора (root) и возможность установки на любом дистрибутиве Linux.

Перед установкой обязательно выполните указания раздела «Подготовка окружения».

Порядок установки#

  1. Шаг 1 Распаковка архива и подготовка бинарных файлов;

  2. Шаг 2 Создание конфигурационных файлов;

  3. Шаг 3 Запуск Standalone VectorDB;

  4. Шаг 4 Запуск кластера Vector DB с TLS через Docker Compose;

  5. Шаг 5 Настройка Secman.

Шаг 1 Распаковка архива и подготовка бинарных файлов#

Последовательность действий#

  1. Скачайте дистрибутив Vector DB.

  2. Распакуйте архив:

    export UNPUCKED_PATH=$(pwd)/unpacked
    unzip -o Vector-DB-x-y-z.zip -d ${UNPUCKED_PATH}
    

    Пример вывода команды:

    Archive:  Vector-DB-255.255.255-SNAPSHOT.zip
       creating: ./unpacked/Vector-DB-255.255.255-SNAPSHOT/
      inflating: ./unpacked/Vector-DB-255.255.255-SNAPSHOT/vectordb-vault-encryptor-255.255.255~SNAPSHOT-1.x86_64.tgz  
      inflating: ./unpacked/Vector-DB-255.255.255-SNAPSHOT/vectordb-qdrant-client-255.255.255~SNAPSHOT-1.x86_64.tgz  
      inflating: ./unpacked/Vector-DB-255.255.255-SNAPSHOT/vectordb-qdrant-255.255.255~SNAPSHOT-1.x86_64.tgz  
      extracting: ./unpacked/Vector-DB-255.255.255-SNAPSHOT/qdrant-client-255.255.255-SNAPSHOT-win64.zip  
      extracting: ./unpacked/Vector-DB-255.255.255-SNAPSHOT/qdrant-client-255.255.255-SNAPSHOT-darwin-arm64.zip  
      extracting: ./unpacked/Vector-DB-255.255.255-SNAPSHOT/qdrant-client-255.255.255-SNAPSHOT-darwin-amd64.zip  
      inflating: ./unpacked/Vector-DB-255.255.255-SNAPSHOT/vectordb-vault-encryptor-255.255.255~SNAPSHOT-1.x86_64.rpm  
      inflating: ./unpacked/Vector-DB-255.255.255-SNAPSHOT/vectordb-qdrant-client-255.255.255~SNAPSHOT-1.x86_64.rpm  
      inflating: ./unpacked/Vector-DB-255.255.255-SNAPSHOT/vectordb-qdrant-255.255.255~SNAPSHOT-1.x86_64.rpm  
      inflating: ./unpacked/Vector-DB-255.255.255-SNAPSHOT-build-log.txt  
       creating: ./unpacked/Vector-DB-docker-255.255.255-SNAPSHOT/
      inflating: ./unpacked/Vector-DB-docker-255.255.255-SNAPSHOT/start-demo-cluster.sh  
      inflating: ./unpacked/Vector-DB-docker-255.255.255-SNAPSHOT/generate_certificates.sh  
      inflating: ./unpacked/Vector-DB-docker-255.255.255-SNAPSHOT/entrypoint.sh  
      inflating: ./unpacked/Vector-DB-docker-255.255.255-SNAPSHOT/docker-compose.yaml  
       creating: ./unpacked/Vector-DB-docker-255.255.255-SNAPSHOT/configs/
       creating: ./unpacked/Vector-DB-docker-255.255.255-SNAPSHOT/configs/config/
      inflating: ./unpacked/Vector-DB-docker-255.255.255-SNAPSHOT/configs/config/sec-config.yaml  
      inflating: ./unpacked/Vector-DB-docker-255.255.255-SNAPSHOT/configs/config/config.yml  
      inflating: ./unpacked/Vector-DB-docker-255.255.255-SNAPSHOT/build.sh  
      inflating: ./unpacked/Vector-DB-docker-255.255.255-SNAPSHOT/README.md  
      inflating: ./unpacked/Vector-DB-docker-255.255.255-SNAPSHOT/Dockerfile  
      extracting: ./unpacked/Vector-DB-docker-255.255.255-SNAPSHOT/.gitignore  
    

    Если необходимо вручную поднять Standalone Vector DB TLS, то перейдите к следующему пункту. Если необходимо сразу поднять кластер Vector DB с TLS через Docker Compose, то перейдите к Шаг 4 Запуск кластера Vector DB с TLS через Docker Compose.

  3. Перейдите в директорию с распакованным архивом:

    cd ${UNPUCKED_PATH}/Vector-DB-x-y-z/
    
  4. Распакуйте бинарные файлы:

    tar --touch -vxzf vectordb-qdrant-255.255.255~SNAPSHOT-1.x86_64.tgz -C .
    tar --touch -vxzf vectordb-qdrant-client-255.255.255~SNAPSHOT-1.x86_64.tgz -C .
    tar --touch -vxzf vectordb-vault-encryptor-255.255.255~SNAPSHOT-1.x86_64.tgz -C .
    

    Пример вывода команды:

    ./opt/vectordb/bin/qdrant
    ./usr/bin/qdrant
    ./opt/vectordb/bin/qdrant-client
    ./usr/bin/qdrant-client
    ./opt/vectordb/bin/vault-encryptor
    ./usr/bin/vault-encryptor
    
  5. Проверьте, что бинарные файлы распаковались:

    ls -la ${UNPUCKED_PATH}/Vector-DB-x-y-z/opt/vectordb/bin/
    

    Примерный вывод команды:

    total 155456
    drwxr-x---. 2 admin admin       64 Mar 16 14:03 .
    drwxr-x---. 3 admin admin       17 Mar 16 14:03 ..
    -rwxr-x---. 1 admin admin 94652080 Mar 16 14:03 qdrant
    -rwxr-x---. 1 admin admin 14551275 Mar 16 14:03 qdrant-client
    -rwxr-x---. 1 admin admin  6184659 Mar 16 14:03 vault-encryptor
    

    Должен отобразиться файл qdrant и другие бинарные файлы.

Шаг 2 Создание конфигурационных файлов#

Последовательность действий#

Создайте конфигурационные файлы в текущей директории с использованием механизма heredoc (механизм в Unix-подобных оболочках, который позволяет создавать многострочные строки без использования кавычек):

  1. Создайте файл config.yaml:

    cat > config.yaml << 'EOF'
    service:
     enable_tls: false
     http_port: 6333
     grpc_port: 6334
    
    cluster:
     enabled: false
    
    log_level: DEBUG
    EOF
    
  2. Создайте файл sec-config.yaml:

    • Задайте переменные с учетными данными:

      export QDRANT_LOGIN='bob'
      export QDRANT_PASSWORD='qwe123'
      
    • Захешируйте пароль с помощью утилиты Vault-encryptor:

      export PASSWORD_HASH=$(echo $QDRANT_PASSWORD | ./opt/vectordb/bin/vault-encryptor password-hash)
      
    • Запишите файл с секретами:

      cat > sec-config.yaml << EOF
      token: 
        expiration: "1h"
      
      auth: 
        enable_rbac: true
        auth_flow: 
          - bootstrap
          - local_storage
        subject_regex: "CN=([^,]+)"
        bootstrap: 
          principals: 
            - principal_name: $QDRANT_LOGIN
              password_hash: "$PASSWORD_HASH"
              roles: 
                - bootstrap
          roles: 
            "bootstrap":
              - cluster_manage
              - collection_cluster_manage
              - collection_info
              - collection_manage
              - cluster_info
              - snapshot_upload
              - snapshot_download
              - snapshot_info
              - snapshot_write
              - snapshot_recover
              - points_write
              - points_read
              - read_principal
              - write_principal
              - read_role
              - write_role
      
      ephemeral_api_key: 
        enabled: true
        rotation_interval: "8h"
      EOF
      

Шаг 3 Запуск Standalone Vector DB#

Последовательность действий#

Запустите Qdrant:

nohup ./opt/vectordb/bin/qdrant \
--config-path ./config.yaml \
--sec-config-path ./sec-config.yaml \
> qdrant.log 2>&1 &

Параметры запуска:

  • --config-path – путь к основному конфигурационному файлу (по умолчанию ./config.yaml).

  • --sec-config-path - путь к дополнительному конфигурационному файлу (по умолчанию ./sec-config.yaml).

Пример вывода команды запуска:

[1] 1296361

Просмотр логов Qdrant после запуска:

cat qdrant.log

Пример вывода:

nohup: ignoring input
__     __        _             ____  ____  
\ \   / /__  ___| |_ ___  _ __|  _ \| __ ) 
 \ \ / / _ \/ __| __/ _ \| '__| | | |  _ \ 
  \ V /  __/ (__| || (_) | |  | |_| | |_) |
   \_/ \___|\___|\__\___/|_|  |____/|____/ 
                                              

Version: 255.255.255-SNAPSHOT, qdrant version: 1.16.3, build: 712aa383

2026-03-16T12:38:01.398176Z  WARN sbertech::security::configs: Config file not found: config/config
2026-03-16T12:38:01.398203Z  WARN sbertech::security::configs: Config file not found: config/development
2026-03-16T12:38:01.398245Z  INFO qdrant: Security auth is enabled
2026-03-16T12:38:01.398330Z  INFO storage::content_manager::consensus::persistent: Initializing new raft state at ./storage/raft_state.json
2026-03-16T12:38:01.407218Z DEBUG storage::content_manager::consensus::persistent: State: Persistent { state: RaftState { hard_state: HardState { term: 0, vote: 0, commit: 0, special_fields: SpecialFields { unknown_fields: UnknownFields { fields: None }, cached_size: CachedSize { size: 0 } } }, conf_state: ConfState { voters: [7845040305748983], learners: [], voters_outgoing: [], learners_next: [], auto_leave: false, special_fields: SpecialFields { unknown_fields: UnknownFields { fields: None }, cached_size: CachedSize { size: 0 } } } }, latest_snapshot_meta: SnapshotMetadataSer { term: 0, index: 0 }, apply_progress_queue: EntryApplyProgressQueue(None), first_voter: Some(7845040305748983), peer_address_by_id: RwLock { data: {} }, peer_metadata_by_id: RwLock { data: {} }, arbiter_peer_ids: RwLock { data: {} }, cluster_metadata: {}, this_peer_id: 7845040305748983, path: "./storage/raft_state.json", dirty: false }
2026-03-16T12:38:01.417932Z  INFO storage::audit::logger: Audit is disabled
2026-03-16T12:38:01.418028Z  INFO qdrant: Distributed mode disabled
2026-03-16T12:38:01.418070Z  INFO qdrant: Telemetry reporting disabled
2026-03-16T12:38:01.431041Z  INFO qdrant::actix: TLS disabled for REST API
2026-03-16T12:38:01.431236Z  INFO qdrant::actix: Qdrant HTTP listening on 6333
2026-03-16T12:38:01.431249Z  INFO actix_server::builder: starting 1 workers
2026-03-16T12:38:01.431261Z  INFO actix_server::server: Actix runtime found; starting in Actix runtime
2026-03-16T12:38:01.431268Z  INFO actix_server::server: starting service: "actix-web-service-0.0.0.0:6333", workers: 1, listening on: 0.0.0.0:6333
2026-03-16T12:38:01.444180Z DEBUG qdrant: Waiting for thread web to finish
2026-03-16T12:38:01.476416Z  INFO qdrant::tonic: Qdrant gRPC listening on 6334
2026-03-16T12:38:01.481049Z  INFO qdrant::tonic: TLS disabled for gRPC API
2026-03-16T12:38:01.533834Z  INFO qdrant: Successfully submitted new API key

Проверка результата#

Получите JWT-токен для авторизации:

JWT=$(curl http://localhost:6333/auth -d "{\"username\": \"$QDRANT_LOGIN\", \"password\": \"$QDRANT_PASSWORD\"}" -s 2>/dev/null | jq -r .result.token)

Эта команда выполняет HTTP POST запрос к точке подключения /auth на локальном хосте на порту 6333 с JSON данными для аутентификации пользователя $QDRANT_LOGIN с паролем $QDRANT_PASSWORD. Результат запроса обрабатывается через jq для извлечения поля result.token, который затем сохраняется в переменной JWT.

Внимание

Команда сама по себе не выводит никаких данных на экран. Она просто сохраняет токен в переменную для дальнейшего использования.

Проверьте состояние кластера с использованием полученного токена:

curl http://localhost:6333/cluster -H "authorization: Bearer ${JWT}" | jq

Пример вывода команды проверки кластера:

{
  "result": {
    "status": "disabled"
  },
  "status": "ok",
  "time": 0.000002487
}

Завершение работы (опциональный шаг)#

После завершения работы с демонстрационным примером рекомендуется очистить временные данные и остановить запущенный процесс:

kill $(pgrep -f "qdrant.*config-path.*config.yaml")

Шаг 4 Запуск кластера Vector DB с TLS через Docker Compose#

Данный шаг обеспечивает запуск демонстрационного кластера с использованием Docker Compose.

Кластер состоит из трех узлов:

  • qdrant-node-0 (порт 6333);

  • qdrant-node-1 (порт 6433);

  • qdrant-node-2 (порт 6533).

Все узлы используют TLS для связи.

Последовательность действий#

  1. Перейдите в директорию с примером Docker-развертывания:

    cd ${UNPUCKED_PATH}/Vector-DB-docker-x.y.z
    
  2. Запустите скрипт для автоматического запуска кластера:

    ./start-demo-cluster.sh
    

    Скрипт выполнит следующие шаги:

    • Сборку Docker образа.

    • Генерацию TLS сертификатов (если они не существуют).

    • Запуск кластера Qdrant через Docker Compose.

    • Ожидание доступности API.

    • Получение JWT токена для аутентификации.

    • Проверку состояния кластера.

    Пример вывода команды:

    $ ./start-demo-cluster.sh
    ==> Step 1: Build Docker image
    [+] Building 63.9s (10/10) FINISHED                                                                                                                                                                                                                                                                     docker:default
    ...
    ==> Step 2: Generate TLS certificates (if missing)                                                                                                                                                                                                                                                                     
    Using openssl: /usr/bin/openssl
    == Generate CA key
    == Generate CA certificate
    == Generate private key
    == Generate CSR
    == Sign certificate
    Certificate request self-signature ok
    subject=C = RU, ST = Tatarstan, L = Innopolis, O = VectorDB, OU = Platform, CN = qdrant-node-0
    
    Generated certificates:
    certs/ca.pem
    certs/certificate.pem
    certs/private_key.key
    
    Verify:
    openssl verify -CAfile certs/ca.pem certs/certificate.pem
    ==> Step 3: Start Qdrant cluster
    [+] up 4/4
    ✔ Network vector-db-docker-255255255-snapshot_default Created                                                                                                                                                                                                                                                    0.1s  Container qdrant-node-0                             Created                                                                                                                                                                                                                                                    0.1s  Container qdrant-node-1                             Created                                                                                                                                                                                                                                                    0.0s 
    ==> Step 4: Wait until API becomes available           Created                                                                                                                                                                                                                                                    0.0s 
    API is ready
    ==> Step 5: Obtain JWT token
    JWT token obtained
    ==> Step 6: Wait until cluster networking is healthy
    Cluster still stabilizing (message_send_failures=1)...
    Cluster communication is healthy
    {
    "result": {
       "status": "enabled",
       "peer_id": 4610463616206733,
       "peers": {
          "4610463616206733": {
          "uri": "https://qdrant-node-0:6335/"
          },
          "8566963506758044": {
          "uri": "https://qdrant-node-1:6335/"
          },
          "3828474674756769": {
          "uri": "https://qdrant-node-2:6335/"
          }
       },
       "raft_info": {
          "term": 1,
          "commit": 11,
          "pending_operations": 0,
          "leader": 4610463616206733,
          "role": "Leader",
          "is_voter": true,
          "is_arbiter": false,
          "is_leader_lost": false,
          "is_leader_lost_locked": false
       },
       "consensus_thread_status": {
          "consensus_thread_status": "working",
          "last_update": "2026-03-16T13:28:00.229301463Z"
       },
       "message_send_failures": {}
    },
    "status": "ok",
    "time": 6.78e-06
    }
    
  3. После успешного запуска кластер будет доступен по адресу:

    • HTTPS API: https://localhost:6333

    Для аутентификации используются учетные данные:

    • Логин: bob.

    • Пароль: qwe123.

Проверка результата#

После запуска кластера можно проверить его состояние:

  • Получение JWT-токена:

export QDRANT_LOGIN='bob'
export QDRANT_PASSWORD='qwe123'
JWT=$(curl https://localhost:6333/auth \
      -d "{\"username\": \"$QDRANT_LOGIN\", \"password\": \"$QDRANT_PASSWORD\"}" \
      --cert certs/certificate.pem \
      --key certs/private_key.key \
      --cacert certs/ca.pem \
      -k \
      -s 2>/dev/null | jq -r .result.token)
  • Авторизация и проверка:

curl -H "authorization: Bearer ${JWT}" \
      --cert certs/certificate.pem \
      --key certs/private_key.key \
      --cacert certs/ca.pem \
      -k \
      https://localhost:6333/cluster \
      -s 2>/dev/null | jq

Завершение работы (опциональный шаг)#

После завершения работы с кластером остановите контейнеры:

docker compose down

Также можно удалить временные файлы и директорию распаковки:

cd ${UNPUCKED_PATH}/..
rm -rf ${UNPUCKED_PATH}

Шаг 5 Настройка Secman#

Цель выполнения#

Интеграция с Secman направлена на обеспечение безопасности, автоматизации управления конфиденциальными данными и улучшение надежности при работе с векторной базой данных.

Последовательность действий#

  1. Выполните редактирование файла конфигурации sec-config.yaml согласно Руководству по безопасности.

  2. Выполните запуск продукта с двумя конфигурационными файлами:

    ./target/debug/qdrant --config-path
    ./config/config.yaml --sec-config-path
    ./config/sec-config.yaml
    

Проверка результата#

Если используется Secman в качестве хранилища секретов, то:

  1. После запуска Vector DB аутентифицируется в Secret Management, используя расшифрованную пару role_id и secret_id, и получает токен доступа.

  2. Используя токен доступа, сервер считывает из хранилища необходимые секреты.

  3. Продукт успешно запустится.