Despliegue de Qdrant Vector Database en un VPS para aplicaciones de IA: paso a paso
TL;DR
En esta guía, configuraremos y desplegaremos paso a paso una base de datos vectorial Qdrant de alto rendimiento en su propio servidor VPS. Qdrant es un componente crítico para las aplicaciones modernas de IA, como la búsqueda semántica, los sistemas de recomendación y las arquitecturas RAG (Retrieval-Augmented Generation), permitiendo almacenar y buscar eficientemente vectores de alta dimensionalidad. Obtendrá una instancia de Qdrant completamente funcional, segura y lista para operar, gestionada a través de Docker Compose, con HTTPS automático mediante Caddy.
- Qdrant se instalará utilizando Docker Compose para una fácil gestión y escalabilidad.
- El servidor estará protegido con configuraciones de seguridad básicas: claves SSH, UFW y Fail2ban.
- Se configurará HTTPS automático para la API de Qdrant con Caddy, asegurando una interacción segura.
- Se revisarán los requisitos mínimos para el VPS y se darán recomendaciones para la elección de la configuración.
- Se proporcionarán scripts para la copia de seguridad de datos de Qdrant y recomendaciones de mantenimiento.
- Todos los comandos y configuraciones son actuales para 2026 y han sido probados en Ubuntu 24.04 LTS.
Qué configuramos y por qué
En el mundo moderno de la inteligencia artificial, los datos a menudo se representan como vectores de alta dimensionalidad (embeddings), que codifican el significado semántico de texto, imágenes, audio u otros datos. Para trabajar eficientemente con estos vectores —buscar similitudes, realizar agrupaciones o utilizarlos en arquitecturas de Generación Aumentada por Recuperación (RAG)— se requieren bases de datos especializadas, conocidas como bases de datos vectoriales (Vector Databases).
Qdrant es una base de datos vectorial de código abierto y alto rendimiento, diseñada para almacenar, indexar y buscar vectores con latencia de milisegundos. Soporta diversas métricas de distancia, filtrado por metadatos y escalabilidad. Al desplegar Qdrant en su propio VPS, obtiene control total sobre los datos, la seguridad y el rendimiento, lo cual es crítico para muchas aplicaciones de IA.
Al final de esta guía, obtendrá una instancia de Qdrant completamente configurada y operativa, accesible por HTTPS, lista para integrarse con sus modelos y aplicaciones de IA. Esto le permitirá crear sus propios sistemas inteligentes, como chatbots capaces de responder preguntas basándose en su documentación, sistemas de recomendación de productos o servicios de búsqueda semántica, sin depender de costosos proveedores de la nube.
Existen alternativas a Qdrant, como soluciones en la nube (Pinecone, Weaviate Cloud, Azure AI Search Vector Search) u otras opciones autoalojadas (Milvus, Weaviate, Chroma). Los servicios en la nube son convenientes para un inicio rápido, pero pueden ser significativamente más caros a largo plazo, especialmente con grandes volúmenes de datos o consultas intensivas. Además, a menudo imponen limitaciones en la personalización y plantean preocupaciones sobre la privacidad de los datos. El despliegue autoalojado en un VPS, por el contrario, ofrece:
- Ahorro de costos: Los costos a largo plazo de un VPS suelen ser más bajos que los de los servicios gestionados en la nube, especialmente con una carga de trabajo estable.
- Control total: Usted gestiona todos los aspectos de la infraestructura, desde el sistema operativo hasta la configuración de Qdrant, lo que permite un ajuste fino del rendimiento y la seguridad.
- Privacidad de datos: Sus datos permanecen en su servidor, lo que cumple con los estrictos requisitos de privacidad y las normativas reguladoras.
- Flexibilidad: Posibilidad de instalar cualquier herramienta adicional e integrarse con la infraestructura existente.
La elección de una solución autoalojada en un VPS es especialmente relevante para desarrolladores, startups y empresas que valoran el equilibrio entre rendimiento, costo y control de datos.
Qué configuración de VPS se necesita para esta tarea
Los requisitos de VPS para Qdrant dependen en gran medida del volumen de vectores almacenados, su dimensionalidad, la intensidad de las consultas y los requisitos de latencia. Sin embargo, se pueden identificar configuraciones mínimas y recomendadas para empezar.
Requisitos mínimos (para pruebas y proyectos pequeños):
- CPU: 2 núcleos (un procesador moderno, por ejemplo, Intel Xeon E5 o AMD EPYC). Qdrant utiliza activamente la CPU para la indexación y búsqueda.
- RAM: 4 GB. Qdrant almacena los índices en la memoria RAM para una búsqueda rápida. Si el volumen de vectores y metadatos excede la RAM disponible, el rendimiento puede disminuir significativamente debido al swapping.
- Disco: 50 GB NVMe SSD. Los vectores y metadatos se almacenan en el disco. Un NVMe SSD es críticamente importante para el rendimiento, ya que Qdrant accede frecuentemente al disco.
- Red: 100 Mbit/s. Para consultas internas esto es suficiente, pero para tráfico intenso se requerirá más.
Plan de VPS recomendado (para aplicaciones de producción pequeñas y medianas):
Para proyectos más serios, donde se planea almacenar millones de vectores y atender cientos de consultas por segundo, se requerirán las siguientes características:
- CPU: 4-8 núcleos (por ejemplo, Intel Xeon Gold/Platinum o AMD EPYC de últimas generaciones).
- RAM: 16-32 GB. Esto permitirá a Qdrant mantener una parte significativa de los índices y datos en memoria, asegurando bajas latencias.
- Disco: 200-500 GB NVMe SSD. Teniendo en cuenta el crecimiento de los datos y la necesidad de almacenar copias de seguridad.
- Red: 1 Gbit/s. Para APIs de alta carga y transmisión rápida de vectores.
Para empezar con Qdrant en un VPS para aplicaciones de IA, se puede optar por un VPS con las características indicadas, por ejemplo, con 4 núcleos de CPU, 16 GB de RAM y 200 GB NVMe SSD. Esta configuración proporcionará un buen equilibrio entre costo y rendimiento para la mayoría de las tareas medianas.
Cuándo se necesita un servidor dedicado y no un VPS
Un servidor dedicado se vuelve necesario cuando:
- Volúmenes de datos muy grandes: Miles de millones de vectores o terabytes de datos que requieren más RAM y espacio en disco de lo que la mayoría de los VPS pueden ofrecer.
- Requisitos de rendimiento extremos: Miles de consultas por segundo o latencias críticamente bajas que demandan el máximo rendimiento de CPU e I/O sin la sobrecarga de la virtualización.
- Aislamiento total: Requisitos de seguridad o normativas que exigen un aislamiento físico completo del hardware.
- Hardware especializado: Necesidad de utilizar GPU para acelerar la generación de embeddings u otras tareas que no siempre están disponibles en un VPS.
Si sus necesidades superan las configuraciones de VPS recomendadas anteriormente, considere alquilar un servidor dedicado adecuado.
Ubicación: qué factores influyen
La elección de la ubicación del servidor VPS influye en:
- Latencia: Cuanto más cerca esté el servidor de sus usuarios finales u otros servicios que interactuarán con Qdrant, menor será la latencia. Elija una ubicación lo más cercana posible a la audiencia principal de su aplicación de IA.
- Residencia de datos: Algunos requisitos regulatorios (por ejemplo, GDPR en Europa) exigen almacenar los datos en regiones geográficas específicas. Asegúrese de que la ubicación elegida cumpla con estos requisitos.
- Costo: Los precios de los VPS pueden variar ligeramente en diferentes centros de datos.
Preparación del servidor
Después de obtener un nuevo servidor VPS, es necesario realizar una serie de configuraciones básicas para garantizar la seguridad y estabilidad. Utilizaremos el sistema operativo Ubuntu Server 24.04 LTS, que será relevante y compatible en 2026.
1. Conexión al servidor por SSH
Utilice los datos proporcionados por su proveedor de VPS para la primera conexión. Normalmente, esto implica el usuario root y una contraseña.
ssh root@ВАШ_IP_АДРЕС_VPS
2. Actualización del sistema
Siempre comience actualizando la lista de paquetes e instalando todas las actualizaciones disponibles.
sudo apt update && sudo apt upgrade -y
3. Creación de un nuevo usuario con permisos sudo
Trabajar como usuario root no es seguro. Cree un nuevo usuario y otórguele permisos sudo.
# Crear un nuevo usuario "qdrant_admin" (puede elegir cualquier otro nombre)
sudo adduser qdrant_admin
# Añadir el usuario al grupo sudo
sudo usermod -aG sudo qdrant_admin
Ahora, salga de la sesión root e inicie sesión con el nuevo usuario.
exit
ssh qdrant_admin@ВАШ_IP_АДРЕС_VPS
4. Configuración de claves SSH (recomendado)
Para mejorar la seguridad, utilice claves SSH en lugar de contraseñas. Si aún no tiene un par de claves, genérelas en su máquina local:
# En su máquina local
ssh-keygen -t rsa -b 4096 -C "[email protected]"
Copie la clave pública al servidor:
# En su máquina local
ssh-copy-id qdrant_admin@ВАШ_IP_АДРЕС_VPS
Después de iniciar sesión correctamente con la clave, desactive la autenticación por contraseña para el usuario root y, posiblemente, para todos los usuarios en el archivo /etc/ssh/sshd_config. Desactive el inicio de sesión para root:
# En el servidor, como qdrant_admin
sudo nano /etc/ssh/sshd_config
Busque la línea PermitRootLogin yes y cámbiela a PermitRootLogin no. También asegúrese de que PasswordAuthentication esté configurado en no, si desea deshabilitar completamente el inicio de sesión con contraseña después de configurar las claves SSH. Reinicie el servicio SSH:
sudo systemctl restart sshd
5. Configuración del firewall (UFW)
UFW (Uncomplicated Firewall) es una interfaz conveniente para gestionar iptables. Lo configuraremos para permitir solo los puertos necesarios.
# Permitir SSH (puerto 22 por defecto)
sudo ufw allow OpenSSH
# Permitir HTTP (para Caddy)
sudo ufw allow http
# Permitir HTTPS (para Caddy)
sudo ufw allow https
# Permitir puerto Qdrant (por defecto 6333 para gRPC y REST)
sudo ufw allow 6333/tcp
# Habilitar el firewall
sudo ufw enable
# Confirme "y"
Verifique el estado del firewall:
sudo ufw status verbose
6. Instalación de Fail2ban
Fail2ban protege contra ataques de fuerza bruta, bloqueando automáticamente las direcciones IP que realizan demasiados intentos fallidos de inicio de sesión.
# Instalación de Fail2ban
sudo apt install fail2ban -y
# Crear una copia del archivo de configuración para personalización
sudo cp /etc/fail2ban/jail.conf /etc/fail2ban/jail.local
# Abrir el archivo para editar (opcional, se puede dejar por defecto)
sudo nano /etc/fail2ban/jail.local
En jail.local puede configurar bantime (tiempo de bloqueo), findtime (período para detectar intentos) y maxretry (número máximo de intentos). Asegúrese de que la sección [sshd] esté habilitada (enabled = true). Después de los cambios, reinicie Fail2ban:
sudo systemctl restart fail2ban
sudo systemctl enable fail2ban
Ahora su servidor tiene protección básica y está listo para la instalación de Qdrant.
Instalación de Software — paso a paso
Desplegaremos Qdrant utilizando Docker Compose, que es el enfoque recomendado para entornos de producción. Esto garantiza aislamiento, facilidad de gestión y actualizaciones. Las versiones del software serán actuales para el año 2026.
1. Instalación de Docker Engine
Para empezar, instalaremos Docker Engine, que gestionará los contenedores.
# Eliminar versiones antiguas de Docker, si las hay
sudo apt remove docker docker-engine docker.io containerd runc
# Instalar los paquetes necesarios para instalar Docker a través de HTTPS
sudo apt install ca-certificates curl gnupg lsb-release -y
# Añadir la clave GPG oficial de Docker
sudo mkdir -p /etc/apt/keyrings
curl -fsSL https://download.docker.com/linux/ubuntu/gpg | sudo gpg --dearmor -o /etc/apt/keyrings/docker.gpg
# Añadir el repositorio de Docker a las fuentes de APT
echo \
"deb [arch=$(dpkg --print-architecture) signed-by=/etc/apt/keyrings/docker.gpg] https://download.docker.com/linux/ubuntu \
$(lsb_release -cs) stable" | sudo tee /etc/apt/sources.list.d/docker.list > /dev/null
# Actualizar la lista de paquetes con el nuevo repositorio
sudo apt update
# Instalar Docker Engine, Docker CLI y Containerd (la versión será actual para 2026, por ejemplo, 26.x)
sudo apt install docker-ce docker-ce-cli containerd.io -y
# Añadir el usuario actual al grupo docker para ejecutar comandos sin sudo
sudo usermod -aG docker ${USER}
# Aplicar los cambios de grupo (será necesario salir y volver a iniciar sesión en SSH)
newgrp docker
Verifique la instalación de Docker:
docker run hello-world
Debería ver el mensaje "Hello from Docker!".
2. Instalación de Docker Compose
Docker Compose permite definir y ejecutar aplicaciones Docker multicontenedor. En las versiones modernas de Docker, Compose está integrado en el Docker CLI.
# Verificar si Docker Compose está instalado (a partir de Docker 20.10, suele estarlo)
docker compose version
# Si el comando no se encuentra, instálelo por separado:
# sudo apt install docker-compose-plugin -y
3. Creación de un directorio para Qdrant
Crearemos la estructura de directorios para almacenar la configuración y los datos de Qdrant.
# Crear el directorio principal para Qdrant
mkdir -p ~/qdrant
cd ~/qdrant
# Crear el directorio para almacenar los datos de Qdrant
mkdir -p ./data
# Crear el directorio para la configuración de Caddy
mkdir -p ./caddy/Caddyfile
mkdir -p ./caddy/data
mkdir -p ./caddy/config
4. Configuración del archivo Docker Compose
Cree el archivo docker-compose.yml en el directorio ~/qdrant.
nano docker-compose.yml
Pegue el siguiente contenido:
# docker-compose.yml
version: '3.8'
services:
qdrant:
image: qdrant/qdrant:1.14.0 # Versión actual de Qdrant para 2026
container_name: qdrant_db
restart: unless-stopped
volumes:
- ./data:/qdrant/data # Almacenamiento de datos de Qdrant
- ./qdrant_config.yaml:/qdrant/config/production.yaml # Archivo de configuración opcional
ports:
- "6333:6333" # REST API y gRPC
- "6334:6334" # gRPC para clúster interno (si se usa)
environment:
# Ajustes de rendimiento y memoria
QDRANT__STORAGE__PERFORMANCE_CONFIG__MAX_SEARCH_THREADS: 4 # Número de hilos para búsqueda
QDRANT__STORAGE__PERFORMANCE_CONFIG__MAX_OPTIMIZATION_THREADS: 2 # Número de hilos para optimización
QDRANT__SERVICE__GRPC_PORT: 6334 # Puerto gRPC
QDRANT__SERVICE__HTTP_PORT: 6333 # Puerto REST API
caddy:
image: caddy:2.8.0-alpine # Versión actual de Caddy para 2026
container_name: caddy_proxy
restart: unless-stopped
ports:
- "80:80" # HTTP para el desafío de Let's Encrypt
- "443:443" # HTTPS
volumes:
- ./caddy/Caddyfile:/etc/caddy/Caddyfile # Archivo de configuración de Caddy
- ./caddy/data:/data # Certificados Let's Encrypt y datos de Caddy
- ./caddy/config:/config # Configuración de Caddy
depends_on:
- qdrant # Caddy depende de Qdrant
Explicaciones:
qdrant/qdrant:1.14.0: Indica el uso de la imagen de Qdrant versión 1.14.0, que será estable y actual para 2026../data:/qdrant/data: Monta el directorio local./dataen el contenedor de Qdrant para el almacenamiento persistente de datos../qdrant_config.yaml: Opcionalmente, permite montar un archivo de configuración de Qdrant personalizado. Si no es necesario, se puede eliminar.ports: Redirige los puertos 6333 (REST API) y 6334 (gRPC) del contenedor al host.environment: Pasa variables de entorno para configurar Qdrant (por ejemplo, el número de hilos).caddy:2.8.0-alpine: Utiliza la imagen ligera de Caddy versión 2.8.0.caddy/Caddyfile: Monta el archivo de configuración de Caddy.caddy/dataycaddy/config: Montan los directorios para almacenar los certificados de Let's Encrypt y la configuración interna de Caddy.
5. Inicio de Qdrant y Caddy
Después de guardar docker-compose.yml, inicie los servicios:
# Iniciar los contenedores en segundo plano
docker compose up -d
Verifique el estado de los contenedores:
docker compose ps
Debería ver que los contenedores qdrant_db y caddy_proxy están en ejecución.
En este punto, Qdrant está instalado y funcionando, pero solo es accesible a través de HTTP en el puerto 6333. A continuación, configuraremos Caddy para proporcionar HTTPS.