Pourquoi auto-héberger Weaviate sur un VPS
Weaviate ne se contente pas de stocker des vecteurs : grâce à ses modules (text2vec, reranker, generative), il peut vectoriser vos données automatiquement à l'insertion et même orchestrer des requêtes génératives, le tout exposé via GraphQL et REST. C'est une plateforme de recherche sémantique de bout en bout. L'auto-héberger sur un VPS vous donne la liberté d'activer uniquement les modules dont vous avez besoin, de connecter vos propres modèles d'embeddings et de garder vos données IA en interne. Pour les équipes qui construisent un assistant documentaire ou un moteur de recommandation, cela évite la dépendance à un service vectoriel managé et ses coûts au volume. Vous contrôlez la latence, la rétention et le schéma de vos classes, et vous pouvez faire évoluer le VPS au rythme de votre corpus.
Les bénéfices concrets du self-hosting de Weaviate
- Vectorisation intégrée via les modules
text2vec: vos textes sont transformés en vecteurs sans pipeline externe. - API GraphQL expressive pour des requêtes hybrides (vectorielle + filtres + BM25) en une seule requête.
- Modules génératifs et de reranking pour bâtir un pipeline RAG complet directement dans la base.
- Index HNSW performant avec compression produit (PQ) pour maîtriser la mémoire.
- Schéma orienté classes et propriétés, proche d'un graphe, pratique pour des données structurées.
- Souveraineté : vos embeddings et vos documents source restent hébergés sur votre VPS.
Prérequis matériels et logiciels
Weaviate est plus gourmand que Qdrant, surtout si vous activez des modules de vectorisation locaux. Pour une instance avec vectorisation déléguée à une API externe, 4 Go de RAM constituent un minimum confortable. Si vous faites tourner un module text2vec-transformers en local, prévoyez plutôt 8 Go et idéalement un GPU, sinon la vectorisation sera lente sur CPU. Comptez 2 à 4 vCPU et 30 à 60 Go de SSD selon le volume de vecteurs et de snapshots. Vous aurez besoin de Docker Compose pour orchestrer Weaviate et ses conteneurs de modules, d'un domaine pour l'exposition HTTPS, et de l'activation de l'authentification par clé API : comme pour toute base vectorielle, ne laissez jamais une instance ouverte sur Internet.
Weaviate ou Qdrant : quel choix pour votre VPS
| Critère | Weaviate | Qdrant |
|---|---|---|
| Langage et empreinte | Go, plus gourmand en RAM | Rust, très léger et économe |
| Vectorisation intégrée | Oui, via modules text2vec et generative | Non, embeddings fournis par le client |
| API principale | GraphQL et REST | REST et gRPC |
| Recherche hybride | Native (vectorielle + BM25) | Native (vectorielle + filtres payload) |
| Compression mémoire | Product Quantization (PQ) | Quantification scalaire et binaire |
| Facilité de déploiement | Compose multi-conteneurs (modules) | Conteneur unique, démarrage immédiat |
| Idéal pour | Pipeline RAG complet tout-en-un | Recherche vectorielle rapide et frugale |
Déployer Weaviate étape par étape
Préparer le VPS et Docker Compose
Installez Docker et Docker Compose. Créez un enregistrement DNS A pour search.mondomaine.ma. Réservez assez de RAM si vous prévoyez un module de vectorisation local.
Écrire le docker-compose.yml avec les modules
Déclarez le service weaviate (cr.weaviate.io/semitechnologies/weaviate) et, si besoin, un conteneur de module comme text2vec-transformers. Reliez-les via ENABLE_MODULES et TRANSFORMERS_INFERENCE_API. Montez un volume sur /var/lib/weaviate pour la persistance.
Configurer l'authentification et les modules
Activez l'auth par clé API avec AUTHENTICATION_APIKEY_ENABLED=true, définissez AUTHENTICATION_APIKEY_ALLOWED_KEYS et AUTHENTICATION_APIKEY_USERS. Désactivez l'accès anonyme (AUTHENTICATION_ANONYMOUS_ACCESS_ENABLED=false) et choisissez le DEFAULT_VECTORIZER_MODULE.
Démarrer la stack
Lancez docker compose up -d et vérifiez l'état via curl http://localhost:8080/v1/.well-known/ready. Suivez les logs des conteneurs pour confirmer que les modules sont bien chargés.
Placer le reverse proxy et le TLS
Mettez Caddy ou Nginx devant le port 8080 pour gérer Let's Encrypt et n'exposez pas le port directement. Transmettez l'en-tête Authorization contenant la clé API jusqu'à Weaviate.
Créer une classe et interroger en GraphQL
Définissez une classe avec ses propriétés et son vectorizer, importez vos objets (vectorisés automatiquement si un module est actif), puis testez une requête nearText ou hybride en GraphQL. Planifiez des backups via le module de backup vers un stockage S3.
Si vous activez la vectorisation locale avec text2vec-transformers sans GPU, l'inférence sur CPU deviendra vite un goulot d'étranglement à l'import massif. Préférez alors déléguer la vectorisation à une API externe (text2vec-openai, text2vec-cohere ou un endpoint compatible que vous hébergez), ou activez la Product Quantization pour réduire la mémoire de l'index HNSW. Surveillez la consommation RAM via les métriques Prometheus exposées par Weaviate sur le port 2112.