Analytics cookies only (Google Analytics, PostHog). No ad networks, no cross-site tracking. See our privacy policy.
Self-host Qdrant
updated Oct 2026deployed by usprices checked · Jul 2026Install verified on Ubuntu 26.04 · Oct 2026 · how we test
We earn commissions when you shop through the links below. Full disclosure →
A vector database and vector search engine for the embeddings behind semantic search, recommendations and retrieval-augmented generation: a REST API, a gRPC API, a built-in web dashboard, JSON payload filtering, quantization and per-collection snapshots. Written in Rust and Apache-2.0 licensed, it runs as a single container with no separate datastore.
Runs on a VPS from $6/mo (Kamatera 2GB, 2 GB RAM) · prices checked Sep 2026
Our recommendation
Pick Qdrant when you need a vector database for your own embeddings behind semantic search, recommendations or retrieval-augmented generation: a REST API on 6333, a gRPC API on 6334, a web dashboard at `/dashboard`, JSON payload filtering with payload indexes, quantization and per-collection snapshots. It is written in Rust and Apache-2.0 licensed, and the `qdrant/qdrant` image is a single container with no other datastore; you bring the vectors, from whichever embedding model you run or rent. Our snippet turns the Quickstart's `docker run` into a compose file, mounts `./qdrant_storage` and adds the admin API key from the Security guide. Upstream gives no fixed RAM minimum because sizing depends on vector count, dimensions, datatype and payload indexes, so our 1 GB floor is an estimate for a small collection. Weaviate, the catalog's other vector database, can call embedding providers for you through its modules and has no web UI; Qdrant expects pre-computed vectors and ships the dashboard.
What you need
Any VPS with at least 1024 MB of RAM
A domain you control — most self-hosted setups need HTTPS in front of them
Paid link — we earn a commission if you shop through it.
Install
Run these commands on your server:
# Qdrant — vector database with a REST API, gRPC API and web dashboard — based on the Docker run command in Qdrant's Quickstart plus the API-key setting from its Security guide, pinned to v1.19.2echo "QDRANT_API_KEY=$(openssl rand -hex 16)" > .envcat > docker-compose.yml <<'EOF'services: qdrant: image: qdrant/qdrant:v1.19.2 restart: unless-stopped ports: - 6333:6333 - 6334:6334 volumes: - ./qdrant_storage:/qdrant/storage environment: QDRANT__SERVICE__API_KEY: ${QDRANT_API_KEY}EOFdocker compose up -d# → http://SERVER_IP:6333/dashboard — paste the api-key from .env; the REST API is on 6333, gRPC on 6334
Qdrant's own installation and security docs are blunt about the self-hosted container:
non-negotiableUpstream states that self-hosted open source deployments are not secure by default and not production-ready: they listen on all interfaces with no authentication. Our snippet sets QDRANT__SERVICE__API_KEY, which every request must then send in an api-key header, but the docs say TLS must be used to stop that key leaking over an unencrypted connection, so terminate TLS in front and bind to a private interface before exposing it.
non-negotiableStorage needs block-level access to a POSIX file system: Qdrant will not work on NFS or S3-style object storage, upstream recommends an SSD or NVMe disk if vectors are offloaded to disk, and Docker or WSL mounts on Windows are known to cause data loss. Snapshots, created per collection with POST /collections/{name}/snapshots, are tar archives you must take per node, and collection aliases are not included in them.
non-negotiableThe Quickstart pulls the untagged qdrant/qdrant image; pin a release tag as our snippet does. Upstream recommends Kubernetes or Qdrant Cloud for production and lists the plain container under testing or development, adding that Docker Compose in production leaves performant storage, security, load balancing, backups and monitoring to you: zero-downtime upgrades, full cluster backup and disaster recovery, automatic shard rebalancing and data-loss prevention on downscaling are listed as Cloud features, and the community Helm chart gets community support only.
non-negotiableEach instance wants three ports: 6333 (HTTP API, health and metrics), 6334 (gRPC) and 6335 for distributed deployments. Our compose publishes the first two on every interface, so firewall them to the clients that need them; the dashboard page on 6333 loads for anyone who can reach the port, and only the API calls behind it require the key.