Индекс на дневникаDockup / бележка от практиката
Note / self-host-qdrant

Как да хоствате Qdrant самостоятелно през 2026 г.: хранилище, API ключове и архиви

Практическо ръководство за самостоятелно хостване на Qdrant с Docker, портове, постоянни данни, TLS, сигурност, архивиране и проблемите, които пречат на използването в production. Стъпка по стъпка.

Самостоятелното хостване на Qdrant става интересно при първото повторно deployment-ване, а не при първия docker run. Ако правата за хранилището са грешни или client-ът използва 6334, докато е рутиран само 6333, Docker пак може да отчете напълно здрав процес. Deployment-ът по-долу е организиран около наблюдаемо поведение: създаване на collection с планирания размер на вектора, добавяне на точки с payload, изпълнение на филтрирана заявка за най-близки съседи и възстановяване на snapshot на collection.

Предназначението на Qdrant е ясно: vector database за embeddings и retrieval системи. Това описание ни показва какво трябва да остане публично, какво трябва да остане private и какво трябва да възстанови един backup.

Запознайте се с Qdrant, преди да докосвате Docker

Не позволявайте на Qdrant image-а случайно да определи production архитектурата. Image-ът предоставя процес на 6333; хранилището, routing-ът и външните изисквания все още се нуждаят от внимателно планирани lifecycles. Локалното изискване за runtime е достатъчно RAM и дисково пространство за размерите на векторите, payload-ите и индексите. Документирайте очаквания капацитет, ownership-а и сценария при отказ, вместо да ги оставяте като image default.

Deployment-ът е готов за по-задълбочено тестване, когато може да създаде collection с планирания размер на вектора, да добави точки с payload, да изпълни филтрирана заявка за най-близки съседи и да възстанови snapshot на collection. Следете transaction-а в логовете и наблюдавайте размерите на векторите, изграждането на HNSW, payload индексите, репликите на collection-ите и разликата между memory-mapped данните и наличната RAM. Тези наблюдения показват дали текущата topology изолира правилния компонент.

Насочвайте Qdrant, без да подвеждате за HTTPS

Изберете крайния hostname на Qdrant, преди потребителите да запазят callback-и или client настройки, след което оставете REST публичен само когато client-ите действително го изискват, а gRPC пазете private. Platform route-ът трябва да прекрати TLS веднъж и да сочи към private порт 6333.

Изпълнете acceptance transaction-а отвън. Ако client-ът изобщо не достига до Qdrant, използвайте контролния списък за SSL валидация за проверки на DNS и сертификата. Ако заявката достига до Qdrant, но правата за хранилището са грешни или client-ът използва 6334, докато е рутиран само 6333, спрете да променяте proxy redirect-ите и проверете границата, специфична за приложението.

Превърнете локалната команда в услуга, която може да се инспектира

Използвайте команда, която показва всеки важен избор. Тази базова конфигурация свързва Qdrant към loopback интерфейса на host-а, добавя известните mount-ове за данни и задава първата необходима настройка. Потвърдете локалното изискване преди публикуване: достатъчно RAM и дисково пространство за размерите на векторите, payload-ите и индексите.

docker run -d \
  --name qdrant \
  --restart unless-stopped \
  -p 127.0.0.1:6333:6333 \
  -v qdrant-data:/qdrant/storage \
  -e QDRANT__SERVICE__API_KEY=replace-with-a-long-random-value \
  qdrant/qdrant:latest

Заменете плаващите tag-ове с тествана версия или digest. След стартирането проверете docker logs --tail 200 qdrant и потвърдете, че процесът слуша на 6333. След това изпълнете acceptance действието на Qdrant; отговор от root страницата не може да докаже, че целият сценарий работи: създаване на collection с планирания размер на вектора, добавяне на точки с payload, изпълнение на филтрирана заявка за най-близки съседи и възстановяване на snapshot на collection.

Надграждайте Qdrant без догадки

Тестовете за капацитет трябва да упражняват размерите на векторите, изграждането на HNSW, payload индексите, репликите на collection-ите и разликата между memory-mapped данните и наличната RAM, а не повтаряща се заявка към /. Изпълнете сценария „създаване на collection с планирания размер на вектора, добавяне на точки с payload, изпълнение на филтрирана заявка за най-близки съседи и възстановяване на snapshot на collection“ при реалистична concurrency и запишете latency, error rate и ръста на хранилището.

Планирането на upgrade трябва да отчита следния риск: snapshot-ите на collection-ите, съвместимостта на storage format-а и поведението на client library трябва да бъдат тествани преди преминаване към по-нова server версия. Тествайте новия release с representative input, след което повторете acceptance transaction-а и сравнете резултата. Ако правата за хранилището са грешни или client-ът използва 6334, докато е рутиран само 6333, запишете неуспешния transaction и проверете първата засегната граница, вместо да приемате, че причината е в ingress-а.

Превърнете smoke теста на Qdrant в release проверка

Release candidate-ът на Qdrant заслужава трафик, когато завърши фиксиран сценарий: създаване на collection с планирания размер на вектора, добавяне на точки с payload, изпълнение на филтрирана заявка за най-близки съседи и възстановяване на snapshot на collection. Запишете image digest-а, ефективната конфигурация без secrets, публичния origin и timestamp-ите за този сценарий. Тестовите данни трябва да могат да се изхвърлят, но да са достатъчно реалистични, за да упражняват същия път като потребителите.

Изпълнете го след подмяна на runtime-а, след което изградете отново услугата от snapshot-ите на Qdrant и директорията с persistent storage. Recovery-ът е успешен, когато snapshot пресъздаде collection-а със същия брой точки, vector конфигурация и representative резултати от заявките. Сравнете измерванията на ресурсите за размерите на векторите, изграждането на HNSW, payload индексите, репликите на collection-ите и разликата между memory-mapped данните и наличната RAM с предишния release и проучете същественото отклонение преди promotion.

Накрая упражнете този контролиран отказ: изпратете безвреден input близо до resource или format лимита, свързан с тази граница: правата за хранилището са грешни или client-ът използва 6334, докато е рутиран само 6333. Проверете дали Qdrant обяснява отказа, не поврежда съществуващото състояние и възобновява работа, след като валидното условие се върне. Запазете редактиран откъс от логовете и времето за възстановяване. Заедно тези проверки обхващат поведението, durability и operability, а не само uptime-а на процеса.

Докажете, че Qdrant преживява подмяна

При Qdrant безопасността при redeploy започва със snapshot-ите на Qdrant и директорията с persistent storage. Mount-нете /qdrant/storage преди bootstrap, запишете безвредни примерни данни и подменете container-а, за да докажете, че този path действително е persistent. Тествайте path-а, като подмените container-а, докато съществуват безвредни примерни данни; това разкрива mount-ове, насочени с една директория твърде нагоре или надолу.

След това тествайте disaster recovery на празен host. Където е необходимо, използвайте application-consistent database export и проверете дали snapshot пресъздава collection-а със същия брой точки, vector конфигурация и representative резултати от заявките. Ръководството за database backup, който е тестван чрез restore предоставя по-висока цел от простата проверка дали е създаден archive файл.

Credentials, роли и изложени повърхности

При Qdrant ценната повърхност не е непременно landing page-ът. Основната грешка е публикуването на unauthenticated API в интернет. Неутрализирайте я целенасочено: дайте на ingestion услугите scoped API достъп и оставете целия административен API на private route.

Третирайте QDRANT__SERVICE__API_KEY според ролята му в Qdrant: пазете чувствителните стойности извън Git, документирайте ефектите от rotation и никога не заменяйте public example с тях в production. Използвайте unprivileged container user, когато image-ът го поддържа, и не mount-вайте несвързани credentials. Прилагайте rate или size limits на ingress ниво, когато untrusted работа може да консумира размери на векторите, изграждане на HNSW, payload индекси, реплики на collection-ите и разликата между memory-mapped данните и наличната RAM.

Преместете повторяемата инфраструктурна работа в Dockup

Dockup може да поеме заменяемите platform компоненти: да насочи трафика към порт 6333, да издаде domain и certificate, да инжектира secrets, да прикачи persistent storage и да свърже Qdrant с managed или private attached услуги. Това може да се изпълни върху инфраструктурата на Dockup или на сървър, който прикачите.

Acceptance работата за Qdrant остава изрично дефинирана. След one-click deployment-а оставете REST публичен само когато client-ите действително го изискват, а gRPC пазете private, потвърдете локалното изискване — достатъчно RAM и дисково пространство за размерите на векторите, payload-ите и индексите — и изпълнете този сценарий: създаване на collection с планирания размер на вектора, добавяне на точки с payload, изпълнение на филтрирана заявка за най-близки съседи и възстановяване на snapshot на collection. Това разделение е умишлено: Dockup премахва повтаряемата инфраструктурна настройка, без да се преструва, че application ролите, provider credentials или restore policy се избират сами.

Често задавани въпроси

Какво е необходимо на Qdrant за production deployment?

Насочете Qdrant container-а през порт 6333 към един HTTPS origin. Локалното изискване е достатъчно RAM и дисково пространство за размерите на векторите, payload-ите и индексите. Не приемайте Qdrant за готов, докато не можете да създадете collection с планирания размер на вектора, да добавите точки с payload, да изпълните филтрирана заявка за най-близки съседи и да възстановите snapshot на collection.

Кои данни на Qdrant трябва да бъдат включени в backup?

Запазете /qdrant/storage и включете snapshot-ите на Qdrant и директорията с persistent storage в един и същ recovery manifest. Един чист restore на Qdrant е успешен само когато snapshot пресъздаде collection-а със същия брой точки, vector конфигурация и representative резултати от заявките.

Изисква ли Qdrant HTTPS зад reverse proxy?

Използвайте HTTPS за публичния Qdrant origin и оставете порт 6333 във вътрешния route. Приложете настройката на Qdrant правилно: оставете REST публичен само когато client-ите действително го изискват, а gRPC пазете private. При Qdrant HTTPS защитава credentials или потребителско съдържание при пренос и поддържа последователно поведението на client-ите, чувствително към origin.

Как трябва да се тества upgrade на Qdrant?

Възстановете текущото състояние на Qdrant в изолиран deployment, приложете candidate версията и повторете acceptance transaction-а. Обърнете особено внимание, тъй като snapshot-ите на collection-ите, съвместимостта на storage format-а и поведението на client library трябва да бъдат тествани преди преминаване към по-нова server версия. Запазете предишния Qdrant image, докато не изясните границите на data migration-а и rollback-а.