Pourquoi auto-héberger Qdrant sur un VPS
Qdrant stocke et interroge des vecteurs d'embeddings pour trouver les éléments les plus proches sémantiquement : c'est la brique de recherche au cœur des chatbots RAG, des moteurs de recommandation et de la recherche en langage naturel. Écrite en Rust, elle est rapide et économe en ressources, ce qui la rend idéale à héberger sur un VPS plutôt que de payer un service vectoriel managé facturé au vecteur stocké. L'auto-hébergement est crucial pour les applications IA traitant des données sensibles : vos embeddings, souvent dérivés de documents internes confidentiels, ne quittent jamais votre infrastructure. Vous maîtrisez aussi la latence, déterminante quand chaque requête utilisateur déclenche une recherche vectorielle, et vous évitez les limites de débit des API tierces lors des montées en charge.
Les bénéfices concrets du self-hosting de Qdrant
- Recherche de plus proches voisins (ANN) rapide grâce à l'index HNSW, même sur des millions de vecteurs.
- Filtrage par payload combiné à la recherche vectorielle pour des requêtes hybrides précises.
- Quantification scalaire et binaire pour réduire fortement la mémoire occupée par les vecteurs.
- API REST et gRPC, plus des SDK officiels Python, JavaScript et Rust prêts à l'emploi.
- Confidentialité : vos embeddings issus de documents internes restent sur votre VPS.
- Pas de facturation au vecteur ni au volume de requêtes, contrairement aux services managés.
Prérequis matériels et logiciels
Le dimensionnement de Qdrant dépend du nombre de vecteurs et de leur dimension. Pour démarrer avec quelques centaines de milliers de vecteurs, 2 Go de RAM suffisent ; au-delà du million de vecteurs en haute dimension, visez 4 à 8 Go, car l'index HNSW vit en mémoire pour rester rapide. La quantification permet de réduire cette empreinte. Un à deux vCPU conviennent pour un trafic modéré. Prévoyez 20 à 50 Go de SSD pour la persistance des collections et des snapshots. Vous aurez besoin de Docker, d'un domaine si vous exposez l'API au public, et impérativement d'une clé API : Qdrant n'active aucune authentification par défaut, exposer une instance ouverte serait une faille majeure.
Déployer Qdrant étape par étape
Provisionner le VPS et Docker
Installez Docker, configurez le pare-feu pour ne laisser passer que 80 et 443. Créez un enregistrement DNS A pour vectors.mondomaine.ma vers l'IP du VPS si vous comptez exposer l'API en HTTPS.
Lancer Qdrant avec persistance
Utilisez l'image qdrant/qdrant. Montez un volume sur /qdrant/storage pour persister vos collections : volumes: - ./qdrant_storage:/qdrant/storage. Qdrant expose le REST sur 6333 et le gRPC sur 6334.
Activer l'authentification par clé API
Définissez la variable d'environnement QDRANT__SERVICE__API_KEY avec une clé longue et aléatoire (openssl rand -hex 32). Sans cette clé, toute personne atteignant le port pourrait lire et supprimer vos collections.
Mettre en place le reverse proxy et le TLS
Placez Caddy devant le port 6333 : vectors.mondomaine.ma { reverse_proxy localhost:6333 }. Caddy gère le certificat Let's Encrypt. Si vous utilisez gRPC depuis vos clients, configurez aussi le routage du port 6334 avec le bon protocole.
Créer une collection et insérer des vecteurs
Via l'API ou le SDK Python, créez une collection en précisant la dimension de vos embeddings et la distance (Cosine, Dot ou Euclid). Activez la quantification scalaire dès la création si la RAM est limitée, puis upsert vos points avec leur payload.
Configurer les snapshots et la sauvegarde
Déclenchez des snapshots réguliers via l'API (POST /collections/{name}/snapshots) et copiez-les vers un stockage externe. Couplé à la persistance du volume, cela garantit la restauration en cas d'incident.
Quand la mémoire devient le facteur limitant, activez la quantification scalaire (int8) ou binaire : elle peut diviser l'empreinte RAM des vecteurs par 4 à 32, avec un léger sur-échantillonnage (oversampling) au moment de la requête pour préserver la précision. Combinez-la avec le paramètre on_disk pour les vecteurs originaux afin de ne garder que l'index quantifié en mémoire. C'est ce qui permet de servir des millions de vecteurs sur un VPS de quelques gigaoctets de RAM.