Deployment guide

Hosting Weaviate on a VPS

Deploy on a VPS Cloud →

Databases8 min read

Hosting Weaviate on a VPS

Weaviate is an open-source vector database that stands out for its built-in vectorization modules and its rich GraphQL API. Designed for semantic search and RAG, it self-hosts on a VPS to offer a complete AI platform under your control. Here is how to deploy it with Docker, configure its modules and secure it. We also compare Weaviate to Qdrant to help you choose.

Why self-host Weaviate on a VPS

Weaviate does not merely store vectors: thanks to its modules (text2vec, reranker, generative), it can vectorize your data automatically on insertion and even orchestrate generative queries, all exposed via GraphQL and REST. It is an end-to-end semantic search platform. Self-hosting it on a VPS gives you the freedom to enable only the modules you need, to connect your own embedding models and to keep your AI data in-house. For teams building a document assistant or a recommendation engine, this avoids dependence on a managed vector service and its volume-based costs. You control latency, retention and the schema of your classes, and you can scale the VPS at the pace of your corpus.

The concrete benefits of self-hosting Weaviate

  • Built-in vectorization via the text2vec modules: your texts are turned into vectors without an external pipeline.
  • An expressive GraphQL API for hybrid queries (vector + filters + BM25) in a single query.
  • Generative and reranking modules to build a complete RAG pipeline directly in the database.
  • A high-performance HNSW index with product quantization (PQ) to keep memory in check.
  • A class- and property-oriented schema, close to a graph, handy for structured data.
  • Sovereignty: your embeddings and your source documents stay hosted on your VPS.

Hardware and software prerequisites

Weaviate is more demanding than Qdrant, especially if you enable local vectorization modules. For an instance with vectorization delegated to an external API, 4 GB of RAM is a comfortable minimum. If you run a text2vec-transformers module locally, plan instead for 8 GB and ideally a GPU, otherwise vectorization will be slow on CPU. Count on 2 to 4 vCPUs and 30 to 60 GB of SSD depending on the volume of vectors and snapshots. You will need Docker Compose to orchestrate Weaviate and its module containers, a domain for HTTPS exposure, and the activation of API key authentication: as with any vector database, never leave an instance open on the Internet.

Weaviate or Qdrant: which to choose for your VPS

CriterionWeaviateQdrant
Language and footprintGo, heavier on RAMRust, very light and efficient
Built-in vectorizationYes, via text2vec and generative modulesNo, embeddings provided by the client
Main APIGraphQL and RESTREST and gRPC
Hybrid searchNative (vector + BM25)Native (vector + payload filters)
Memory compressionProduct Quantization (PQ)Scalar and binary quantization
Deployment easeMulti-container Compose (modules)Single container, instant startup
Ideal forA complete all-in-one RAG pipelineFast and frugal vector search

Deploy Weaviate step by step

01

Prepare the VPS and Docker Compose

Install Docker and Docker Compose. Create a DNS A record for search.mydomain.com. Reserve enough RAM if you plan a local vectorization module.

02

Write the docker-compose.yml with the modules

Declare the weaviate service (cr.weaviate.io/semitechnologies/weaviate) and, if needed, a module container such as text2vec-transformers. Link them via ENABLE_MODULES and TRANSFORMERS_INFERENCE_API. Mount a volume on /var/lib/weaviate for persistence.

03

Configure authentication and modules

Enable API key auth with AUTHENTICATION_APIKEY_ENABLED=true, set AUTHENTICATION_APIKEY_ALLOWED_KEYS and AUTHENTICATION_APIKEY_USERS. Disable anonymous access (AUTHENTICATION_ANONYMOUS_ACCESS_ENABLED=false) and choose the DEFAULT_VECTORIZER_MODULE.

04

Start the stack

Run docker compose up -d and check the status via curl http://localhost:8080/v1/.well-known/ready. Follow the container logs to confirm that the modules are properly loaded.

05

Place the reverse proxy and TLS

Put Caddy or Nginx in front of port 8080 to handle Let's Encrypt and do not expose the port directly. Forward the Authorization header containing the API key through to Weaviate.

06

Create a class and query in GraphQL

Define a class with its properties and its vectorizer, import your objects (automatically vectorized if a module is active), then test a nearText or hybrid query in GraphQL. Schedule backups via the backup module to S3 storage.

If you enable local vectorization with text2vec-transformers without a GPU, CPU inference will quickly become a bottleneck during bulk imports. In that case, prefer to delegate vectorization to an external API (text2vec-openai, text2vec-cohere or a compatible endpoint you host), or enable Product Quantization to reduce the memory of the HNSW index. Monitor RAM consumption via the Prometheus metrics exposed by Weaviate on port 2112.

Deploy your Weaviate RAG platform

The ServOrbit Cloud VPS gives you the resources and the Docker environment to host Weaviate and its modules, and to build a complete, secure and sovereign semantic search pipeline.

Need help?

Browse our help center and FAQ, or write to our team — support in French, English and Arabic.