{"id":168015,"date":"2026-05-28T14:00:00","date_gmt":"2026-05-28T11:00:00","guid":{"rendered":"https:\/\/computingforgeeks.com\/?p=168015"},"modified":"2026-05-27T00:35:26","modified_gmt":"2026-05-26T21:35:26","slug":"install-qdrant-debian","status":"publish","type":"post","link":"https:\/\/computingforgeeks.com\/install-qdrant-debian\/","title":{"rendered":"Install Qdrant on Debian 13 \/ 12"},"content":{"rendered":"\n<p class=\"wp-block-paragraph\">Qdrant is the open source vector database for self hosted semantic search and RAG. This guide installs Qdrant on Debian 13 (Trixie) and Debian 12 (Bookworm) two ways: Docker Compose for the fast path most teams take, and the native .deb package with a systemd unit when you prefer your services managed by <code>systemctl<\/code> rather than a container engine. If you are new to dense retrieval as a category, our <a href=\"https:\/\/computingforgeeks.com\/vector-search-vs-traditional-search-why-ai-driven-search-is-the-future\/\">vector search vs traditional search<\/a> explainer covers the why.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">We tested every command on a fresh Debian 13.5 cloud image and document two real gotchas along the way. The Qdrant .deb installs the binary and config but ships no systemd unit, no system user, and does not create the snapshots directory the binary needs at startup. You have to write all three. Companion code lives at <a href=\"https:\/\/github.com\/c4geeks\/qdrant\/tree\/main\/install-debian\" rel=\"noopener\" target=\"_blank\" rel=\"noreferrer noopener\">c4geeks\/qdrant\/install-debian<\/a>, and the canonical reference for any flag in this article is the <a href=\"https:\/\/qdrant.tech\/documentation\/\" rel=\"noopener\" target=\"_blank\">official Qdrant documentation<\/a>.<\/p>\n\n\n\n<h2 class=\"wp-block-heading\">Before you begin<\/h2>\n\n\n\n<p class=\"wp-block-paragraph\">You will need:<\/p>\n\n\n\n<ul class=\"wp-block-list\">\n<li>Debian 13 (Trixie) or Debian 12 (Bookworm), amd64 or arm64, with at least 2 GB of RAM.<\/li>\n\n\n<li>A non root user with <code>sudo<\/code> rights.<\/li>\n\n\n<li>Network access to <code>github.com<\/code>, <code>download.docker.com<\/code>, and the Debian mirrors.<\/li>\n\n\n<li>Two free TCP ports: <code>6333<\/code> for REST and the Web UI, <code>6334<\/code> for gRPC.<\/li>\n<\/ul>\n\n\n\n<p class=\"wp-block-paragraph\">Pick a few helpers up front so the rest of the steps run cleanly:<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>sudo apt update\nsudo apt install -y ca-certificates curl jq<\/code><\/pre>\n\n\n\n<h2 class=\"wp-block-heading\">Method 1: Install Qdrant with Docker Compose<\/h2>\n\n\n\n<p class=\"wp-block-paragraph\">Docker is the recommended path. The upstream image is identical across distros and the Compose file checks into git alongside the rest of your stack. Debian ships an older Docker version in its repos. Use the official Docker CE repo instead so you get the latest engine.<\/p>\n\n\n\n<h3 class=\"wp-block-heading\">Step 1: Add the Docker CE repo and install<\/h3>\n\n\n\n<p class=\"wp-block-paragraph\">Pull in the official Docker repository and install the engine plus the Compose plugin:<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>sudo install -m 0755 -d \/etc\/apt\/keyrings\nsudo curl -fsSL https:\/\/download.docker.com\/linux\/debian\/gpg \\\n  -o \/etc\/apt\/keyrings\/docker.asc\nsudo chmod a+r \/etc\/apt\/keyrings\/docker.asc\n\n. \/etc\/os-release\necho \"deb [arch=$(dpkg --print-architecture) signed-by=\/etc\/apt\/keyrings\/docker.asc] \\\n  https:\/\/download.docker.com\/linux\/debian ${VERSION_CODENAME} stable\" \\\n  | sudo tee \/etc\/apt\/sources.list.d\/docker.list >\/dev\/null\n\nsudo apt update\nsudo apt install -y docker-ce docker-ce-cli containerd.io \\\n  docker-buildx-plugin docker-compose-plugin\n\ndocker --version\ndocker compose version<\/code><\/pre>\n\n\n\n<p class=\"wp-block-paragraph\">Add yourself to the <code>docker<\/code> group so the daily commands do not need <code>sudo<\/code>. Log out and back in for the group to take effect:<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>sudo usermod -aG docker $USER<\/code><\/pre>\n\n\n\n<p class=\"wp-block-paragraph\">The whole install flow looks like this on a fresh Trixie host:<\/p>\n\n\n\n<figure class=\"wp-block-image size-large\"><img decoding=\"async\" src=\"https:\/\/computingforgeeks.com\/wp-content\/uploads\/2026\/05\/01-docker-install-wm.png\" alt=\"Install Docker CE on Debian 13 terminal\" class=\"wp-image-168008\" title=\"\"><\/figure>\n\n\n\n<h3 class=\"wp-block-heading\">Step 2: Forward container logs to journald<\/h3>\n\n\n\n<p class=\"wp-block-paragraph\">Debian and systemd belong together, and <code>journalctl<\/code> is the easier read path than <code>docker logs<\/code> for long lived services. Tell Docker to use the journald log driver in <code>\/etc\/docker\/daemon.json<\/code> before you start any container so the setting applies from the first run:<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>echo '{\"log-driver\":\"journald\"}' | sudo tee \/etc\/docker\/daemon.json\nsudo systemctl restart docker<\/code><\/pre>\n\n\n\n<p class=\"wp-block-paragraph\">The log driver is a per container setting baked in at create time. Existing containers keep their old driver until you recreate them. We start fresh below, so the next <code>docker run<\/code> will pick it up:<\/p>\n\n\n\n<h3 class=\"wp-block-heading\">Step 3: Start Qdrant with Docker<\/h3>\n\n\n\n<p class=\"wp-block-paragraph\">Detect the latest Qdrant release into a shell variable, create the storage directory, and run the container. The container picks up the journald driver and Qdrant logs flow into the system journal:<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>export QDRANT_VERSION=$(curl -s https:\/\/api.github.com\/repos\/qdrant\/qdrant\/releases\/latest | jq -r .tag_name)\necho $QDRANT_VERSION   # v1.18.1 at the time of writing\n\nsudo mkdir -p \/var\/lib\/qdrant\/storage\n\ndocker run -d \\\n  --name qdrant \\\n  --restart unless-stopped \\\n  -p 6333:6333 -p 6334:6334 \\\n  -v \/var\/lib\/qdrant\/storage:\/qdrant\/storage \\\n  qdrant\/qdrant:${QDRANT_VERSION}  # https:\/\/github.com\/qdrant\/qdrant\/releases<\/code><\/pre>\n\n\n\n<p class=\"wp-block-paragraph\">Verify the driver landed and the container&#8217;s logs show up in journald:<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>docker inspect qdrant --format 'log driver={{.HostConfig.LogConfig.Type}}'\ncurl -sf http:\/\/localhost:6333\/healthz\nsudo journalctl CONTAINER_NAME=qdrant --no-pager -n 5<\/code><\/pre>\n\n\n\n<p class=\"wp-block-paragraph\">The driver shows as <code>journald<\/code>, the health probe passes, and the last few Qdrant log lines come straight out of the system journal:<\/p>\n\n\n\n<figure class=\"wp-block-image size-large\"><img loading=\"lazy\" decoding=\"async\" width=\"920\" height=\"800\" src=\"https:\/\/computingforgeeks.com\/wp-content\/uploads\/2026\/05\/02-journald-wm.png\" alt=\"Qdrant container logs flowing into journald on Debian\" class=\"wp-image-168009\" title=\"\" srcset=\"https:\/\/computingforgeeks.com\/wp-content\/uploads\/2026\/05\/02-journald-wm.png 920w, https:\/\/computingforgeeks.com\/wp-content\/uploads\/2026\/05\/02-journald-wm-300x261.png 300w, https:\/\/computingforgeeks.com\/wp-content\/uploads\/2026\/05\/02-journald-wm-768x668.png 768w\" sizes=\"auto, (max-width: 920px) 100vw, 920px\" \/><\/figure>\n\n\n\n<h3 class=\"wp-block-heading\">Step 4: Promote to Docker Compose<\/h3>\n\n\n\n<p class=\"wp-block-paragraph\">One off <code>docker run<\/code> commands are fine for the first try. For anything you will tweak more than twice, move to Compose. The file below sets an API key, a memory limit, persistent storage, and journald logging in 20 lines:<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>services:\n  qdrant:\n    image: qdrant\/qdrant:${QDRANT_VERSION}  # https:\/\/github.com\/qdrant\/qdrant\/releases\n    container_name: qdrant\n    restart: unless-stopped\n    ports:\n      - \"6333:6333\"\n      - \"6334:6334\"\n    volumes:\n      - .\/qdrant_storage:\/qdrant\/storage\n      - .\/qdrant_snapshots:\/qdrant\/snapshots\n    environment:\n      QDRANT__SERVICE__API_KEY: ${QDRANT_API_KEY}\n      QDRANT__TELEMETRY_DISABLED: \"true\"\n    logging:\n      driver: journald\n    deploy:\n      resources:\n        limits:\n          memory: 4G<\/code><\/pre>\n\n\n\n<p class=\"wp-block-paragraph\">Generate a strong API key, drop both values into <code>.env<\/code>, and bring the stack up:<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>echo \"QDRANT_VERSION=${QDRANT_VERSION}\" > .env\necho \"QDRANT_API_KEY=$(openssl rand -base64 32)\" >> .env\n\ndocker compose up -d\ndocker compose logs -f --tail=20 qdrant<\/code><\/pre>\n\n\n\n<h2 class=\"wp-block-heading\">Method 2: Native .deb with a systemd unit<\/h2>\n\n\n\n<p class=\"wp-block-paragraph\">Qdrant ships an official .deb package on every GitHub release. It works on Debian because Debian and Ubuntu share apt, even though the package targets Ubuntu codenames. The catch is that the package installs the binary, the default config, and the Web UI assets but nothing else. You write the systemd unit, create the system user, and provision the storage and snapshots directories yourself.<\/p>\n\n\n\n<h3 class=\"wp-block-heading\">Step 1: Install the .deb<\/h3>\n\n\n\n<p class=\"wp-block-paragraph\">If you ran the Docker section above, stop the container first so the native binary can bind to port 6333:<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>docker stop qdrant 2>\/dev\/null\n\ncd \/tmp\ncurl -fL -o \"qdrant_${QDRANT_VERSION#v}-1_amd64.deb\" \\\n  \"https:\/\/github.com\/qdrant\/qdrant\/releases\/download\/${QDRANT_VERSION}\/qdrant_${QDRANT_VERSION#v}-1_amd64.deb\"  # https:\/\/github.com\/qdrant\/qdrant\/releases\n\nsudo apt install -y \".\/qdrant_${QDRANT_VERSION#v}-1_amd64.deb\"\n\nqdrant --version\nsystemctl status qdrant 2>&amp;1 | head -3<\/code><\/pre>\n\n\n\n<p class=\"wp-block-paragraph\">The version reports correctly, and <code>systemctl status<\/code> tells you what we already promised: there is no unit. The .deb installs the binary at <code>\/usr\/bin\/qdrant<\/code>, the default config at <code>\/etc\/qdrant\/config.yaml<\/code>, and the Web UI under <code>\/var\/lib\/qdrant\/static<\/code>:<\/p>\n\n\n\n<figure class=\"wp-block-image size-large\"><img loading=\"lazy\" decoding=\"async\" width=\"920\" height=\"800\" src=\"https:\/\/computingforgeeks.com\/wp-content\/uploads\/2026\/05\/03-deb-install-wm.png\" alt=\"Install Qdrant via deb package on Debian\" class=\"wp-image-168010\" title=\"\" srcset=\"https:\/\/computingforgeeks.com\/wp-content\/uploads\/2026\/05\/03-deb-install-wm.png 920w, https:\/\/computingforgeeks.com\/wp-content\/uploads\/2026\/05\/03-deb-install-wm-300x261.png 300w, https:\/\/computingforgeeks.com\/wp-content\/uploads\/2026\/05\/03-deb-install-wm-768x668.png 768w\" sizes=\"auto, (max-width: 920px) 100vw, 920px\" \/><\/figure>\n\n\n\n<h3 class=\"wp-block-heading\">Step 2: Create the user, storage, and systemd unit<\/h3>\n\n\n\n<p class=\"wp-block-paragraph\">Make a dedicated system user, create both the storage and snapshots directories the binary expects, and chown the whole tree. The default config in <code>\/etc\/qdrant\/config.yaml<\/code> uses absolute paths <code>\/var\/lib\/qdrant\/storage<\/code> and <code>\/var\/lib\/qdrant\/snapshots<\/code>:<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>sudo useradd -r -s \/usr\/sbin\/nologin qdrant\nsudo mkdir -p \/var\/lib\/qdrant\/storage \/var\/lib\/qdrant\/snapshots\nsudo chown -R qdrant:qdrant \/var\/lib\/qdrant<\/code><\/pre>\n\n\n\n<p class=\"wp-block-paragraph\">Write the unit file. Use <code>--config-path<\/code> so the binary picks up the packaged config rather than searching its working directory:<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>sudo tee \/etc\/systemd\/system\/qdrant.service &gt;\/dev\/null &lt;&lt;'EOF'\n[Unit]\nDescription=Qdrant Vector Database\nAfter=network.target\n\n[Service]\nType=simple\nUser=qdrant\nGroup=qdrant\nWorkingDirectory=\/var\/lib\/qdrant\nExecStart=\/usr\/bin\/qdrant --config-path \/etc\/qdrant\/config.yaml\nRestart=on-failure\nRestartSec=5\nLimitNOFILE=65536\n\n[Install]\nWantedBy=multi-user.target\nEOF\n\nsudo systemctl daemon-reload\nsudo systemctl enable --now qdrant\nsudo systemctl is-active qdrant\ncurl -sf http:\/\/localhost:6333\/healthz<\/code><\/pre>\n\n\n\n<p class=\"wp-block-paragraph\">The unit reports <code>active<\/code> and the health probe passes:<\/p>\n\n\n\n<figure class=\"wp-block-image size-large\"><img loading=\"lazy\" decoding=\"async\" width=\"920\" height=\"800\" src=\"https:\/\/computingforgeeks.com\/wp-content\/uploads\/2026\/05\/04-systemd-wm.png\" alt=\"Custom systemd unit for native Qdrant on Debian\" class=\"wp-image-168011\" title=\"\" srcset=\"https:\/\/computingforgeeks.com\/wp-content\/uploads\/2026\/05\/04-systemd-wm.png 920w, https:\/\/computingforgeeks.com\/wp-content\/uploads\/2026\/05\/04-systemd-wm-300x261.png 300w, https:\/\/computingforgeeks.com\/wp-content\/uploads\/2026\/05\/04-systemd-wm-768x668.png 768w\" sizes=\"auto, (max-width: 920px) 100vw, 920px\" \/><\/figure>\n\n\n\n<p class=\"wp-block-paragraph\">If you skip the snapshots directory and start the service, the daemon will panic on the first startup with <code>Failed to create snapshots temp directory<\/code>. We hit that exact error during testing because the .deb does not create it for you. Always create both directories before <code>systemctl start<\/code>.<\/p>\n\n\n\n<h2 class=\"wp-block-heading\">Sanity check: a first collection and search<\/h2>\n\n\n\n<p class=\"wp-block-paragraph\">Regardless of which path you took, the REST API on port 6333 behaves the same. Create a small <code>demo<\/code> collection, upsert three points with payload, then search for the nearest neighbour:<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>curl -s -X PUT http:\/\/localhost:6333\/collections\/demo \\\n  -H \"Content-Type: application\/json\" \\\n  -d '{\"vectors\":{\"size\":4,\"distance\":\"Cosine\"}}' | jq .\n\ncurl -s -X PUT http:\/\/localhost:6333\/collections\/demo\/points \\\n  -H \"Content-Type: application\/json\" \\\n  -d '{\n    \"points\": [\n      {\"id\":1, \"vector\":[0.1,0.2,0.3,0.4], \"payload\":{\"city\":\"Nairobi\"}},\n      {\"id\":2, \"vector\":[0.2,0.3,0.4,0.5], \"payload\":{\"city\":\"Berlin\"}},\n      {\"id\":3, \"vector\":[0.9,0.8,0.7,0.6], \"payload\":{\"city\":\"Tokyo\"}}\n    ]\n  }' | jq .\n\ncurl -s -X POST http:\/\/localhost:6333\/collections\/demo\/points\/search \\\n  -H \"Content-Type: application\/json\" \\\n  -d '{\"vector\":[0.15,0.25,0.35,0.45],\"limit\":3,\"with_payload\":true}' \\\n  | jq .<\/code><\/pre>\n\n\n\n<p class=\"wp-block-paragraph\">Berlin ranks first because its vector sits closest to the query in cosine distance, Nairobi follows, Tokyo trails. If you see the same ordering, ingest, index, and query all work end to end:<\/p>\n\n\n\n<figure class=\"wp-block-image size-large\"><img loading=\"lazy\" decoding=\"async\" width=\"920\" height=\"800\" src=\"https:\/\/computingforgeeks.com\/wp-content\/uploads\/2026\/05\/05-search-wm.png\" alt=\"First Qdrant vector search on Debian returning Berlin Nairobi Tokyo\" class=\"wp-image-168012\" title=\"\" srcset=\"https:\/\/computingforgeeks.com\/wp-content\/uploads\/2026\/05\/05-search-wm.png 920w, https:\/\/computingforgeeks.com\/wp-content\/uploads\/2026\/05\/05-search-wm-300x261.png 300w, https:\/\/computingforgeeks.com\/wp-content\/uploads\/2026\/05\/05-search-wm-768x668.png 768w\" sizes=\"auto, (max-width: 920px) 100vw, 920px\" \/><\/figure>\n\n\n\n<h2 class=\"wp-block-heading\">Open the Web UI<\/h2>\n\n\n\n<p class=\"wp-block-paragraph\">Qdrant ships a browser based UI at <code>\/dashboard<\/code>. Hit <code>http:\/\/&lt;server-ip&gt;:6333\/dashboard<\/code> and the Collections panel lists the <code>demo<\/code> collection you just created:<\/p>\n\n\n\n<figure class=\"wp-block-image size-large\"><img loading=\"lazy\" decoding=\"async\" width=\"1366\" height=\"768\" src=\"https:\/\/computingforgeeks.com\/wp-content\/uploads\/2026\/05\/06-web-ui-wm.png\" alt=\"Qdrant Web UI Collections panel on Debian 13\" class=\"wp-image-168013\" title=\"\" srcset=\"https:\/\/computingforgeeks.com\/wp-content\/uploads\/2026\/05\/06-web-ui-wm.png 1366w, https:\/\/computingforgeeks.com\/wp-content\/uploads\/2026\/05\/06-web-ui-wm-300x169.png 300w, https:\/\/computingforgeeks.com\/wp-content\/uploads\/2026\/05\/06-web-ui-wm-1024x576.png 1024w, https:\/\/computingforgeeks.com\/wp-content\/uploads\/2026\/05\/06-web-ui-wm-768x432.png 768w\" sizes=\"auto, (max-width: 1366px) 100vw, 1366px\" \/><\/figure>\n\n\n\n<h2 class=\"wp-block-heading\">Open the firewall<\/h2>\n\n\n\n<p class=\"wp-block-paragraph\">Debian cloud images do not ship a firewall by default. If you run nftables, allow the two Qdrant ports from a trusted CIDR only. Never expose Qdrant on the public internet without an API key plus TLS first:<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>sudo apt install -y nftables\nsudo systemctl enable --now nftables\n\nTRUSTED_CIDR=\"10.0.0.0\/8\"   # adjust to your office or VPN range\n\nsudo nft add table inet filter\nsudo nft 'add chain inet filter input { type filter hook input priority 0 ; policy accept ; }'\nsudo nft add rule inet filter input ip saddr $TRUSTED_CIDR tcp dport { 6333, 6334 } accept\nsudo nft list ruleset<\/code><\/pre>\n\n\n\n<p class=\"wp-block-paragraph\">For full hardening, see the <strong>secure Qdrant with API key, TLS, and Nginx<\/strong> walkthrough in this series.<\/p>\n\n\n\n<h2 class=\"wp-block-heading\">Upgrade Qdrant<\/h2>\n\n\n\n<p class=\"wp-block-paragraph\">The storage volume survives the upgrade in either install method, so collections and snapshots persist:<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code># Docker\nexport QDRANT_VERSION=$(curl -s https:\/\/api.github.com\/repos\/qdrant\/qdrant\/releases\/latest | jq -r .tag_name)\ndocker pull qdrant\/qdrant:${QDRANT_VERSION}  # https:\/\/github.com\/qdrant\/qdrant\/releases\ndocker stop qdrant &amp;&amp; docker rm qdrant\ndocker run -d --name qdrant --restart unless-stopped \\\n  -p 6333:6333 -p 6334:6334 \\\n  -v \/var\/lib\/qdrant\/storage:\/qdrant\/storage \\\n  qdrant\/qdrant:${QDRANT_VERSION}\n\n# Native .deb\ncd \/tmp\ncurl -fL -o \"qdrant_${QDRANT_VERSION#v}-1_amd64.deb\" \\\n  \"https:\/\/github.com\/qdrant\/qdrant\/releases\/download\/${QDRANT_VERSION}\/qdrant_${QDRANT_VERSION#v}-1_amd64.deb\"\nsudo apt install -y \".\/qdrant_${QDRANT_VERSION#v}-1_amd64.deb\"\nsudo systemctl restart qdrant<\/code><\/pre>\n\n\n\n<h2 class=\"wp-block-heading\">Troubleshooting<\/h2>\n\n\n\n<h3 class=\"wp-block-heading\">Panic: Failed to create snapshots temp directory<\/h3>\n\n\n\n<p class=\"wp-block-paragraph\">You started the native service before creating <code>\/var\/lib\/qdrant\/snapshots<\/code>. Create it, <code>chown<\/code> to <code>qdrant:qdrant<\/code>, and restart the service.<\/p>\n\n\n\n<h3 class=\"wp-block-heading\">Panic on load_collection with PermissionDenied on a WAL file<\/h3>\n\n\n\n<p class=\"wp-block-paragraph\">The native <code>qdrant<\/code> user cannot read files left behind by a previous Docker run (which created them as root). Either start with a clean <code>\/var\/lib\/qdrant\/storage<\/code>, or <code>sudo chown -R qdrant:qdrant \/var\/lib\/qdrant<\/code> before <code>systemctl start<\/code>.<\/p>\n\n\n\n<h3 class=\"wp-block-heading\">Container logs not visible in journalctl<\/h3>\n\n\n\n<p class=\"wp-block-paragraph\">The journald driver is per container at create time. Recreate the container with <code>docker rm -f qdrant<\/code> then <code>docker run<\/code> after writing <code>\/etc\/docker\/daemon.json<\/code>.<\/p>\n\n\n\n<h2 class=\"wp-block-heading\">Where to next<\/h2>\n\n\n\n<p class=\"wp-block-paragraph\">You have Qdrant running on Debian under either Docker or systemd, a sanity collection on disk, and the Web UI loaded. The next stops in this series are <strong>secure Qdrant with API key, TLS, and Nginx<\/strong> for any host reachable outside your network, the <strong>Qdrant Web UI tour<\/strong> for a walk through every dashboard panel, and the <strong>Qdrant snapshots, backup, and restore with S3<\/strong> guide once the data matters. If you want a Postgres native vector store instead of running a second database, our <a href=\"https:\/\/computingforgeeks.com\/install-pgvector-postgresql-linux\/\">install pgvector on PostgreSQL<\/a> walkthrough is the alternative, and the <a href=\"https:\/\/computingforgeeks.com\/self-hosted-rag-ollama-pgvector\/\">self hosted RAG with Ollama<\/a> pipeline drops Qdrant in as the vector store with a one line config change.<\/p>\n","protected":false},"excerpt":{"rendered":"<p>Install Qdrant on Debian 13 Trixie or Debian 12 Bookworm via Docker Compose with journald logging or the native deb plus a systemd unit you write yourself.<\/p>\n","protected":false},"author":3,"featured_media":168014,"comment_status":"open","ping_status":"","sticky":false,"template":"","format":"standard","meta":{"footnotes":""},"categories":[39034,461,26,35913,50],"tags":[],"cfg_series":[39865],"class_list":["post-168015","post","type-post","status-publish","format-standard","has-post-thumbnail","hentry","category-ai","category-databases","category-debian","category-devops","category-linux-tutorials","cfg_series-qdrant-mastery"],"_links":{"self":[{"href":"https:\/\/computingforgeeks.com\/wp-json\/wp\/v2\/posts\/168015","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/computingforgeeks.com\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/computingforgeeks.com\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/computingforgeeks.com\/wp-json\/wp\/v2\/users\/3"}],"replies":[{"embeddable":true,"href":"https:\/\/computingforgeeks.com\/wp-json\/wp\/v2\/comments?post=168015"}],"version-history":[{"count":1,"href":"https:\/\/computingforgeeks.com\/wp-json\/wp\/v2\/posts\/168015\/revisions"}],"predecessor-version":[{"id":168131,"href":"https:\/\/computingforgeeks.com\/wp-json\/wp\/v2\/posts\/168015\/revisions\/168131"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/computingforgeeks.com\/wp-json\/wp\/v2\/media\/168014"}],"wp:attachment":[{"href":"https:\/\/computingforgeeks.com\/wp-json\/wp\/v2\/media?parent=168015"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/computingforgeeks.com\/wp-json\/wp\/v2\/categories?post=168015"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/computingforgeeks.com\/wp-json\/wp\/v2\/tags?post=168015"},{"taxonomy":"cfg_series","embeddable":true,"href":"https:\/\/computingforgeeks.com\/wp-json\/wp\/v2\/cfg_series?post=168015"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}