[{"data":1,"prerenderedAt":225},["ShallowReactive",2],{"seo-verification":3,"blog-alojar-qdrant-en-un-vps-ma-es":6,"promo-bar-likely":224},{"google":4,"bing":5},"EycwPY2XMyTkVzas3n1ygeNJFGAH513qrMjfDljzsMQ","",{"key":7,"data":8},"blog-alojar-qdrant-en-un-vps-ma-es",{"id":9,"slug":10,"slugs":11,"title":15,"excerpt":16,"readTime":17,"views":18,"isPinned":19,"noindex":19,"publishedAt":20,"updatedAt":21,"category":22,"categories":28,"featuredImage":30,"bgImage":31,"posterImage":32,"relatedSolution":33,"intro":36,"sections":37,"ctaTitle":165,"ctaBody":166,"ctaButton":167,"ctaUrl":168,"relatedPosts":169},65,"alojar-qdrant-en-un-vps",{"fr":12,"en":13,"ar":14,"es":10},"heberger-qdrant-vps","hosting-qdrant-on-a-vps","استضافة-qdrant-على-خادم-vps","Alojar Qdrant en un VPS","Aloje Qdrant en su VPS: Docker Compose, clave API, TLS, ajuste HNSW, cuantificación, cliente Python v1, snapshots y monitoreo con Prometheus.",8,1,false,"2026-04-16T00:00:00+00:00","2026-10-20T23:18:05+00:00",{"id":23,"name":24,"slug":25,"color":26,"icon":27},6,"Bases de datos","bases-de-donnees","bg-teal-500\u002F10 text-teal-400","database",[29],{"id":23,"name":24,"slug":25,"color":26,"icon":27},null,"\u002Fblog\u002Fcovers\u002Fbg.svg","\u002Fblog\u002Fcovers\u002Fheberger-qdrant-vps-poster.svg",{"categorySlug":34,"appSlug":35},"bases-de-datos","qdrant","Qdrant es una base de datos vectorial escrita en Rust, diseñada para la búsqueda semántica, los sistemas de recomendación y los pipelines RAG de las aplicaciones de IA. Ligera y rápida, se autoaloja perfectamente en un VPS para mantener sus embeddings bajo su control y evitar la facturación por vector de los servicios gestionados.\n\nEsta guía cubre el camino completo: instalación con Docker Compose, segurización con clave API y reverse proxy TLS, inserción de vectores en Python con el cliente oficial v1, ajuste del índice HNSW y la cuantificación, copia de seguridad con snapshots y monitoreo a través del endpoint `\u002Fmetrics` compatible con Prometheus. Los VPS SSD NVMe de ServOrbit empiezan desde 99 DH\u002Fmes y soportan corpus de menos de un millón de vectores sin ninguna configuración especial.",[38,42,52,68,71,83,98,101,125,129,136,151,154,162],{"type":39,"title":40,"body":41},"h2","Por qué autoalojar Qdrant en un VPS","Qdrant almacena y consulta vectores de embeddings para encontrar los elementos semánticamente más cercanos: es la pieza de búsqueda en el corazón de los chatbots RAG, de los motores de recomendación y de la búsqueda en lenguaje natural. Escrita en Rust, es rápida y frugal en recursos, lo que la hace ideal para alojar en un VPS en lugar de pagar un servicio vectorial gestionado facturado por vector almacenado.\n\nEl autoalojamiento es esencial para las aplicaciones de IA que tratan datos sensibles: sus embeddings, a menudo derivados de documentos internos confidenciales, nunca salen de su infraestructura. También domina la latencia, determinante cuando cada consulta de usuario dispara una búsqueda vectorial, y evita los límites de tasa de las API de terceros en los picos de carga.",{"type":43,"title":44,"items":45},"ul","Requisitos previos y recursos VPS recomendados",[46,47,48,49,50,51],"RAM: mínimo 1 GB para pruebas, 2 GB para unos cientos de miles de vectores, 4–8 GB por encima del millón de vectores en alta dimensión (el índice HNSW vive en memoria).","Almacenamiento: 20–50 GB de SSD NVMe para persistir colecciones y snapshots.","CPU: 1–2 vCPU son suficientes para tráfico moderado; añada núcleos si indexa continuamente.","Docker y Docker Compose instalados en el VPS.","Puertos 6333 (REST) y 6334 (gRPC) accesibles desde su aplicación; 80\u002F443 para el reverse proxy público.","Un registro DNS A (p. ej. `vectors.midominio.com`) si expone la API en HTTPS.",{"type":53,"title":54,"steps":55},"steps","Instalar Qdrant con Docker Compose",[56,59,62,65],{"title":57,"body":58},"Crear el directorio y el compose.yml","En el VPS, cree una carpeta dedicada: `mkdir -p \u002Fopt\u002Fqdrant && cd \u002Fopt\u002Fqdrant`. Cree el siguiente `compose.yml`:\n\n```yaml\nservices:\n  qdrant:\n    image: qdrant\u002Fqdrant:latest\n    restart: unless-stopped\n    ports:\n      - \"127.0.0.1:6333:6333\"\n      - \"127.0.0.1:6334:6334\"\n    volumes:\n      - .\u002Fqdrant_storage:\u002Fqdrant\u002Fstorage\n    environment:\n      - QDRANT__SERVICE__API_KEY=${QDRANT_API_KEY}\n```\n\nEnlazar los puertos a `127.0.0.1` impide cualquier exposición directa en Internet; solo el reverse proxy puede acceder a ellos.",{"title":60,"body":61},"Generar la clave API e iniciar el contenedor","Cree el archivo `.env` con su clave:\n\n```bash\necho \"QDRANT_API_KEY=$(openssl rand -hex 32)\" > .env\n```\n\nInicie Qdrant:\n\n```bash\ndocker compose up -d\n```",{"title":63,"body":64},"Comprobar la salud de la instancia","Espere unos segundos y verifique el endpoint de salud:\n\n```bash\ncurl -s http:\u002F\u002Flocalhost:6333\u002Fhealthz\n# Esperado: {\"title\":\"qdrant - vector search engine\",\"version\":\"...\"}\n```",{"title":66,"body":67},"Crear su primera colección","Cree una colección de prueba con vectores de dimensión 384:\n\n```bash\ncurl -s -X PUT http:\u002F\u002Flocalhost:6333\u002Fcollections\u002Ftest \\\n  -H 'Content-Type: application\u002Fjson' \\\n  -H \"api-key: $(grep QDRANT_API_KEY .env | cut -d= -f2)\" \\\n  -d '{\"vectors\":{\"size\":384,\"distance\":\"Cosine\"}}'\n```",{"type":39,"title":69,"body":70},"Segurizar el acceso: clave API y TLS","Qdrant no activa ninguna autenticación por defecto: una instancia expuesta sin clave API permitiría a cualquiera leer, modificar o borrar todas sus colecciones. La variable de entorno `QDRANT__SERVICE__API_KEY` es la primera línea de defensa; el reverse proxy con TLS es la segunda.\n\nPara Caddy, la configuración mínima es:\n\n```\nvectors.midominio.com {\n    reverse_proxy localhost:6333\n}\n```\n\nCaddy obtiene y renueva automáticamente el certificado Let's Encrypt. Para nginx, añada dentro de su bloque server:\n\n```nginx\nlocation \u002F {\n    proxy_pass http:\u002F\u002F127.0.0.1:6333;\n    proxy_set_header Host $host;\n    proxy_set_header X-Real-IP $remote_addr;\n}\n```\n\nActive TLS con Certbot: `certbot --nginx -d vectors.midominio.com`.",{"type":53,"title":72,"steps":73},"Probar la autenticación y el reverse proxy",[74,77,80],{"title":75,"body":76},"Verificar que el acceso sin clave es rechazado","```bash\ncurl -s https:\u002F\u002Fvectors.midominio.com\u002Fcollections\n# Esperado: {\"status\":{\"error\":\"Unauthorized\",...}}\n```",{"title":78,"body":79},"Llamada autenticada con la clave API","```bash\ncurl -s https:\u002F\u002Fvectors.midominio.com\u002Fcollections \\\n  -H \"api-key: YOUR_KEY\"\n# Esperado: {\"result\":{\"collections\":[]},\"status\":\"ok\",...}\n```",{"title":81,"body":82},"Verificar el certificado TLS","```bash\ncurl -sv https:\u002F\u002Fvectors.midominio.com\u002Fhealthz 2>&1 | grep 'SSL connection\\|issuer'\n# Esperado: líneas confirmando Let's Encrypt y TLS 1.3\n```",{"type":53,"title":84,"steps":85},"Crear una colección e insertar vectores con el cliente Python v1",[86,89,92,95],{"title":87,"body":88},"Instalar el cliente oficial","```bash\npip install qdrant-client>=1.7\n```",{"title":90,"body":91},"Conectar con la clave API","```python\nfrom qdrant_client import QdrantClient\n\nclient = QdrantClient(\n    url=\"https:\u002F\u002Fvectors.midominio.com\",\n    api_key=\"YOUR_KEY\",\n)\n```",{"title":93,"body":94},"Crear una colección con VectorParams","```python\nfrom qdrant_client.models import Distance, VectorParams\n\nclient.recreate_collection(\n    collection_name=\"documentos\",\n    vectors_config=VectorParams(size=384, distance=Distance.COSINE),\n)\n```",{"title":96,"body":97},"Insertar puntos con payload y consultar","```python\nfrom qdrant_client.models import PointStruct\n\nclient.upsert(\n    collection_name=\"documentos\",\n    points=[\n        PointStruct(\n            id=1,\n            vector=[0.1, 0.2, ...],\n            payload={\"titulo\": \"Guía Qdrant\", \"lang\": \"es\"},\n        ),\n    ],\n)\n\nresultados = client.search(\n    collection_name=\"documentos\",\n    query_vector=[0.1, 0.21, ...],\n    limit=5,\n    with_payload=True,\n)\nfor r in resultados:\n    print(r.score, r.payload)\n```",{"type":39,"title":99,"body":100},"Optimizar el rendimiento: ajuste de HNSW","El algoritmo HNSW (Hierarchical Navigable Small World) es el núcleo de la búsqueda rápida en Qdrant. Tres parámetros gobiernan el equilibrio velocidad\u002Fprecisión\u002Fmemoria.",{"type":102,"title":103,"headers":104,"rows":109},"comparison","Parámetros HNSW clave",[105,106,107,108],"Parámetro","Valor por defecto","Rango recomendado","Impacto",[110,115,120],[111,112,113,114],"m","16","16–64","Conexiones por nodo — mayor = mejor recall, más RAM",[116,117,118,119],"ef_construct","100","100–400","Calidad de construcción del índice — mayor = mejor índice, construcción más lenta",[121,122,123,124],"ef","128 (en consulta)","64–512","Calidad de búsqueda — mayor = mejor recall, consulta más lenta",{"type":126,"title":127,"body":128},"tip","Configurar HNSW al crear la colección","Pase los parámetros HNSW directamente en `recreate_collection`:\n\n```python\nfrom qdrant_client.models import HnswConfigDiff\n\nclient.recreate_collection(\n    collection_name=\"documentos\",\n    vectors_config=VectorParams(size=384, distance=Distance.COSINE),\n    hnsw_config=HnswConfigDiff(m=32, ef_construct=200),\n)\n```\n\nPara una búsqueda equilibrada en un corpus de 500 000 vectores, `m=32` y `ef_construct=200` ofrecen un buen recall (>0,97) sin sobrecargar la RAM. Aumente `ef` en la consulta cuando la precisión sea más importante que la latencia.",{"type":43,"title":130,"items":131},"Reducir la huella de memoria: cuantificación escalar y binaria",[132,133,134,135],"**Cuantificación escalar (uint8)**: comprime cada coordenada float32 (4 bytes) a uint8 (1 byte), una reducción de RAM de ~4×. Ligera pérdida de precisión compensada por el sobremuestreo (oversampling).","**Cuantificación binaria**: reducción de hasta 32× binarizando cada dimensión. Ideal para modelos entrenados para cuantificación binaria.","**Parámetro `on_disk`**: almacena los vectores originales en disco y mantiene en RAM solo el índice cuantificado. Indispensable en un VPS con memoria limitada.","**Oversampling**: con `oversampling=2.0` en la consulta, Qdrant recupera el doble de candidatos del índice cuantificado y los reordena con los vectores originales.",{"type":53,"title":137,"steps":138},"Hacer copias de seguridad y restaurar con snapshots de Qdrant",[139,142,145,148],{"title":140,"body":141},"Crear un snapshot de una colección","```bash\ncurl -s -X POST https:\u002F\u002Fvectors.midominio.com\u002Fcollections\u002Fdocumentos\u002Fsnapshots \\\n  -H \"api-key: YOUR_KEY\"\n```",{"title":143,"body":144},"Listar los snapshots disponibles","```bash\ncurl -s https:\u002F\u002Fvectors.midominio.com\u002Fcollections\u002Fdocumentos\u002Fsnapshots \\\n  -H \"api-key: YOUR_KEY\"\n```",{"title":146,"body":147},"Descargar el snapshot","```bash\ncurl -O https:\u002F\u002Fvectors.midominio.com\u002Fcollections\u002Fdocumentos\u002Fsnapshots\u002FNOMBRE_SNAPSHOT \\\n  -H \"api-key: YOUR_KEY\"\n```\n\nCopie el archivo `.snapshot` a un almacenamiento de objetos externo para una copia de seguridad fuera del sitio.",{"title":149,"body":150},"Restaurar desde un snapshot","```bash\ncurl -s -X PUT https:\u002F\u002Fvectors.midominio.com\u002Fcollections\u002Fdocumentos\u002Fsnapshots\u002Fupload \\\n  -H \"api-key: YOUR_KEY\" \\\n  -H 'Content-Type: multipart\u002Fform-data' \\\n  -F snapshot=@documentos-snapshot.snapshot\n```",{"type":126,"title":152,"body":153},"Monitoreo con Prometheus y Grafana","Qdrant expone un endpoint `\u002Fmetrics` en formato Prometheus en el puerto 6333. Añada el objetivo en su `prometheus.yml`:\n\n```yaml\nscrape_configs:\n  - job_name: qdrant\n    static_configs:\n      - targets: ['localhost:6333']\n    metrics_path: \u002Fmetrics\n    bearer_token: YOUR_KEY\n```\n\nEn Grafana, importe el dashboard comunitario de Qdrant (ID 18278) para visualizar la latencia p99 y la tasa de errores en tiempo real.",{"type":43,"title":155,"items":156},"Resolución de problemas habituales",[157,158,159,160,161],"**Connection refused en el puerto 6333**: compruebe que el contenedor está en marcha (`docker compose ps`) y que el puerto no está bloqueado por `ufw`.","**Error OOM \u002F contenedor eliminado**: reduzca `ef_construct` o active la cuantificación escalar para bajar la huella de RAM del índice.","**Lentitud en el arranque o la primera carga**: el índice HNSW se carga desde el disco en el primer acceso; use SSD NVMe y realice una búsqueda de calentamiento tras el inicio.","**Unauthorized 403**: la clave en la cabecera `api-key` no coincide con `QDRANT__SERVICE__API_KEY`; compruebe que no hay espacios ni saltos de línea en la variable de entorno.","**Recall degradado tras activar la cuantificación binaria**: aumente `oversampling` a 3.0 o 4.0 y active `rescore=True` para reordenar los candidatos con los vectores originales.",{"type":39,"title":163,"body":164},"Asociar Qdrant con Ollama para un stack RAG totalmente autónomo","Ejecute Ollama en el mismo VPS para la generación de embeddings (`ollama pull mxbai-embed-large`) y la inferencia (`ollama pull llama3.1:8b`). Su pipeline RAG funciona entonces de extremo a extremo sin ninguna llamada a una API externa: pregunta del usuario → embedding Ollama → búsqueda Qdrant → fragmentos top-k → generación Ollama → respuesta fundamentada.\n\nAñada LiteLLM por delante para exponer un endpoint unificado compatible con OpenAI a su aplicación, y cambie de modelo sin modificar una línea de código. Un VPS con 8 GB de RAM aloja cómodamente Qdrant + Ollama (modelo 7B cuantificado) + LiteLLM para un corpus de unos cientos de miles de vectores.","Lance su base de datos vectorial Qdrant para la IA","El VPS Cloud de ServOrbit ofrece la memoria y los discos SSD necesarios para alojar Qdrant y alimentar sus pipelines RAG y sus motores de búsqueda semántica, con SSL y autenticación bajo su control.","Desplegar en VPS Cloud","\u002Fvps-cloud",[170,188,206],{"id":171,"slug":172,"slugs":173,"title":177,"excerpt":178,"readTime":179,"views":18,"isPinned":19,"noindex":19,"publishedAt":180,"updatedAt":181,"category":182,"categories":183,"featuredImage":30,"bgImage":31,"posterImage":185,"relatedSolution":186},56,"alojar-postgresql-en-un-vps",{"fr":174,"en":175,"ar":176,"es":172},"heberger-postgresql-vps","postgresql-on-a-vps-a-reliable-and-controlled-database","postgresql-على-خادم-vps-قاعدة-بيانات-موثوقة-ومتحكم-بها","PostgreSQL en VPS: base de datos fiable y controlada","Aloje PostgreSQL en VPS: configuración prod, copias pgBackRest, HA streaming, comparativa RDS\u002FSupabase\u002FNeon y resolución de fallos OOM.",9,"2026-04-25T00:00:00+00:00","2026-10-21T15:21:37+00:00",{"id":23,"name":24,"slug":25,"color":26,"icon":27},[184],{"id":23,"name":24,"slug":25,"color":26,"icon":27},"\u002Fblog\u002Fcovers\u002Fheberger-postgresql-vps-poster.svg",{"categorySlug":34,"appSlug":187},"postgresql-stack",{"id":189,"slug":190,"slugs":191,"title":195,"excerpt":196,"readTime":179,"views":197,"isPinned":19,"noindex":19,"publishedAt":198,"updatedAt":199,"category":200,"categories":201,"featuredImage":30,"bgImage":31,"posterImage":203,"relatedSolution":204},57,"alojar-mysql-en-un-vps",{"fr":192,"en":193,"ar":194,"es":190},"heberger-mysql-vps","hosting-mysql-on-a-vps","استضافة-mysql-على-خادم-vps","Alojar MySQL en un VPS: guía completa","Instale MySQL 8.4 LTS en un VPS: requisitos, seguridad, rendimiento InnoDB, acceso remoto seguro, copias de seguridad automatizadas y resolución de errores.",0,"2026-04-24T00:00:00+00:00","2026-11-09T20:55:18+00:00",{"id":23,"name":24,"slug":25,"color":26,"icon":27},[202],{"id":23,"name":24,"slug":25,"color":26,"icon":27},"\u002Fblog\u002Fcovers\u002Fheberger-mysql-vps-poster.svg",{"categorySlug":34,"appSlug":205},"mysql-stack",{"id":207,"slug":208,"slugs":209,"title":213,"excerpt":214,"readTime":215,"views":197,"isPinned":19,"noindex":19,"publishedAt":216,"updatedAt":217,"category":218,"categories":219,"featuredImage":30,"bgImage":31,"posterImage":221,"relatedSolution":222},58,"alojar-redis-en-un-vps",{"fr":210,"en":211,"ar":212,"es":208},"heberger-redis-vps","hosting-redis-on-a-vps","استضافة-redis-على-خادم-vps","Alojar Redis en un VPS: la guía completa","Despliegue Redis en su VPS Cloud: requisitos de RAM\u002FCPU, seguridad (ACL, TLS), persistencia RDB\u002FAOF, resolución de errores y alta disponibilidad.",10,"2026-04-23T00:00:00+00:00","2026-09-08T21:59:59+00:00",{"id":23,"name":24,"slug":25,"color":26,"icon":27},[220],{"id":23,"name":24,"slug":25,"color":26,"icon":27},"\u002Fblog\u002Fcovers\u002Fheberger-redis-vps-poster.svg",{"categorySlug":34,"appSlug":223},"redis-stack",true,1794270538767]