Tutorial

PrivateGPT en VPS: analice documentos confidenciales en local

Inteligencia Artificial7 min de lectura6 pasos

El artículo 50 de la AI Act entró en aplicación el 2 de agosto de 2026: todo sistema de IA generativa que trate datos personales debe declararse o quedar exento. Para abogados, contadores, responsables de recursos humanos y profesionales de la salud, la respuesta inmediata existe: PrivateGPT, instalado en un VPS root, ejecuta un modelo de lenguaje en local, lee sus PDF y responde a sus preguntas — sin que una sola consulta salga de su servidor.

Contenido· Por qué sus documentos profesionales no pueden pasar por la nube1/10
  1. 01Por qué sus documentos profesionales no pueden pasar por la nube
  2. 02Lo que gana con PrivateGPT on-premise
  3. 03PrivateGPT vs Ollama: dos herramientas que no hacen lo mismo
  4. 04PrivateGPT vs Ollama — en qué se diferencian
  5. 05Requisitos previos: elegir el VPS adecuado antes de empezar
  6. 06Lista de comprobación antes de la instalación
  7. 07Desplegar PrivateGPT con Docker Compose
  8. 08Tras la instalación: asegurar y respaldar
  9. 09Resolución de problemas: los errores más frecuentes
  10. 10PrivateGPT en producción: una decisión de infraestructura, no solo un Docker run

Por qué sus documentos profesionales no pueden pasar por la nube

Un abogado que pega un contrato de cesión en ChatGPT, un contador que envía una declaración fiscal a Claude, un responsable de recursos humanos que resume un expediente disciplinario mediante la API de OpenAI: en los tres casos, los datos salen hacia servidores de terceros. El artículo 28 del RGPD es claro: el responsable del tratamiento sigue siendo responsable, aunque sea un encargado del tratamiento — aquí OpenAI o Anthropic — quien recibe los datos.

El artículo 50 de la AI Act, en vigor desde el 2 de agosto de 2026, añade una capa: los sistemas de IA generativa de uso general deben declararse o acogerse a una exención explícita. Usar la API de un proveedor estadounidense para tratar datos personales sin declaración previa expone hoy a un riesgo regulatorio concreto.

La vía legal inmediata es el on-premise. Un VPS root en el que se ejecuta PrivateGPT responde a una pregunta sobre sus documentos sin llamar nunca a api.openai.com ni a api.anthropic.com. Puede comprobarlo en tiempo real con tcpdump o con las reglas de ufw — es una propiedad arquitectónica, no una promesa contractual.

Lo que gana con PrivateGPT on-premise

  • Cero datos salientes: el modelo se ejecuta en local mediante llama-cpp-python, sin ninguna llamada de red hacia un proveedor de IA — verificable con el firewall o con tcpdump.
  • Cumplimiento del artículo 28 del RGPD: sin encargado del tratamiento adicional, sin DPA que negociar, sin transferencias fuera de la UE.
  • Exención del artículo 50 de la AI Act: un LLM autoalojado y sin acceso público no queda sujeto a la obligación de declaración de los sistemas de IA generativa de uso general.
  • Secreto profesional preservado: contratos, declaraciones fiscales, historiales médicos y expedientes de personal permanecen dentro de su perímetro jurídico.
  • RAG sobre sus propios documentos: PrivateGPT indexa sus PDF, DOCX, TXT y CSV y responde citando los pasajes de origen — no es un chatbot genérico.
  • Sin suscripción recurrente: el costo es el del VPS; el modelo Mistral-7B-Instruct es open source.
  • CPU-only viable: no se requiere GPU — un VPS con 8 GB de RAM y un SSD NVMe basta para Mistral-7B Q4_K_M.

PrivateGPT vs Ollama: dos herramientas que no hacen lo mismo

Ollama es un servidor LLM genérico: descarga modelos, expone una API compatible con OpenAI y responde a prompts. Es una excelente herramienta, pero no sabe leer sus archivos — responde a partir de su contexto de conversación, no de sus documentos.

PrivateGPT (repo github.com/zylon-ai/private-gpt) es un motor RAG (Retrieval-Augmented Generation): indexa sus documentos en una base vectorial local (ChromaDB) y luego, en cada pregunta, busca los pasajes pertinentes y los inyecta en el contexto del LLM. La respuesta cita sus fuentes.

PrivateGPT vs Ollama — en qué se diferencian

Desplace la tabla

CriterioPrivateGPTOllama
Caso de uso principalPreguntas y respuestas sobre sus propios documentos (RAG)Serving LLM genérico (API)
Indexación de archivosPDF, DOCX, TXT y CSV nativosNo — contexto manual
Interfaz webSí (puerto 8080)No (solo API)
Base vectorialChromaDB localNinguna
Cita de las fuentesSí — pasaje + nombre del archivoNo
GPU requeridaNo — CPU-only viableNo — CPU-only viable

Requisitos previos: elegir el VPS adecuado antes de empezar

Los requisitos de memoria los impone el modelo, no PrivateGPT en sí.

- Mistral-7B-Instruct Q4_K_M (el modelo por defecto de PrivateGPT): 8 GB de RAM como mínimo. Por debajo, el kernel mata el proceso (OOM) al cargar el modelo.
- Modelo 13B (p. ej. Llama-2-13B Q4_K_M): 16 GB de RAM como mínimo. La calidad de las respuestas resulta claramente más adecuada en textos largos y técnicos.

SSD NVMe recomendado: la indexación de un PDF de 50 páginas genera embeddings vectoriales — en un disco NVMe la operación tarda unos segundos; en un HDD o en un SSD SATA compartido puede bloquearse varios minutos.

Lista de comprobación antes de la instalación

  • VPS con 8 GB de RAM como mínimo (16 GB si apunta a un modelo 13B).
  • Debian 12 o Ubuntu 22.04/24.04 — las imágenes Docker oficiales de PrivateGPT apuntan a estas distribuciones.
  • Docker y Docker Compose instalados (docker compose version debe devolver v2.x).
  • SSD NVMe para el volumen de datos (indexación rápida de los PDF).
  • Acceso SSH root o sudo en el VPS.
  • Puerto 8080 no expuesto públicamente en esta fase — PrivateGPT escucha en local por defecto.

Desplegar PrivateGPT con Docker Compose

  1. Clonar el repositorio y preparar la estructura

    Conéctese a su VPS por SSH y luego:

    git clone https://github.com/zylon-ai/private-gpt.git
    cd private-gpt
    mkdir -p local_data/private_gpt docs

    La carpeta docs/ recibirá los documentos que va a indexar. La carpeta local_data/ contiene la base vectorial ChromaDB y los modelos descargados — nunca la monte en un volumen de red sin cifrar.

  2. Configurar el entorno

    cp .env.example .env

    En .env:

    DOCKER_COMPOSE_PROFILE=ollama
    PRIVATEGPT_SERVER_HOST=127.0.0.1
    PRIVATEGPT_SERVER_PORT=8080

    El perfil ollama arranca PrivateGPT en modo CPU con el backend llama-cpp-python. Es el modo recomendado en un VPS sin GPU.

  3. Arrancar el servicio y descargar el modelo

    docker compose --profile ollama up -d

    En el primer arranque, PrivateGPT descarga Mistral-7B-Instruct-v0.2 en formato GGUF (~4,1 GB). Siga el progreso:

    docker compose logs -f privategpt

    Cuando lea Application startup complete, el servicio está listo.

  4. Ingerir sus documentos

    Copie sus archivos en la carpeta docs/ montada en el contenedor:

    cp /chemin/vers/contrat-cession.pdf docs/
    cp /chemin/vers/liasse-fiscale-2025.docx docs/

    Lance la ingesta mediante la API REST:

    curl -X POST http://127.0.0.1:8080/v1/ingest/file \
      -H 'Content-Type: multipart/form-data' \
      -F 'file=@docs/contrat-cession.pdf'
  5. Acceder a la interfaz mediante un túnel SSH

    PrivateGPT escucha en 127.0.0.1:8080, nunca expuesto directamente a Internet. Para acceder desde su equipo:

    ssh -L 8080:127.0.0.1:8080 [email protected]

    Luego abra http://localhost:8080 en su navegador.

  6. Hacer una pregunta sobre un contrato

    En la interfaz web, asegúrese de que el modo Query documents está seleccionado. Ejemplo:

    > «¿Cuáles son las condiciones suspensivas previstas en el artículo 4?»

    PrivateGPT devuelve la respuesta citando los pasajes de origen. Mediante la API:

    curl -X POST http://127.0.0.1:8080/v1/chat/completions \
      -H 'Content-Type: application/json' \
      -d '{"messages":[{"role":"user","content":"¿Cuáles son las condiciones suspensivas del artículo 4?"}],"use_context":true}'

Tras la instalación: asegurar y respaldar

Acceso del equipo con Nginx + autenticación básica

# /etc/nginx/sites-available/privategpt
server {
    listen 443 ssl;
    server_name privategpt.votre-domaine.com;
    ssl_certificate     /etc/letsencrypt/live/privategpt.votre-domaine.com/fullchain.pem;
    ssl_certificate_key /etc/letsencrypt/live/privategpt.votre-domaine.com/privkey.pem;
    auth_basic "Accès restreint";
    auth_basic_user_file /etc/nginx/.htpasswd;
    location / { proxy_pass http://127.0.0.1:8080; }
}

Respaldar los datos críticos — dos carpetas constituyen el estado completo: local_data/ (base vectorial + modelos) y docs/ (sus documentos de origen).

Comprobar que no hay tráfico saliente:

tcpdump -i any host api.openai.com or host api.anthropic.com

No debe aparecer ningún paquete.

¿Modelo demasiado lento? Pase a una cuantización más pequeña. Si el tiempo de respuesta supera los 90 segundos con Mistral-7B, descargue la versión Q3_K_S (~3,0 GB, ~20 % más rápida en CPU) y actualice la variable LLM_HF_MODEL_FILE en .env. Lo contrario también es cierto: si dispone de 16 GB de RAM, mistral-7b-instruct-v0.2.Q8_0.gguf (~7,7 GB) ofrece respuestas mucho más matizadas en las cláusulas ambiguas.

Resolución de problemas: los errores más frecuentes

OOM al arrancardocker ps muestra Exited (137). El código 137 = SIGKILL enviado por el kernel OOM. Compruebe la RAM disponible con free -h. Si es insuficiente, pase al modelo Q3_K_S o detenga los servicios no esenciales.

Ingesta bloqueada — la llamada /v1/ingest/file devuelve un timeout o un error 500. Compruebe los permisos: chown -R 1000:1000 local_data/. El contenedor se ejecuta con un usuario no root (UID 1000).

Tiempo de respuesta superior a 60 segundos — el modelo pagina en swap. Compruébelo con htop durante una consulta. Solución: aumentar la RAM o elegir un modelo más pequeño.

Resultados sin cita de fuente — compruebe que el modo Query documents está seleccionado (y no LLM Chat) y que los documentos se han ingerido correctamente (GET http://127.0.0.1:8080/v1/ingest/list).

Contenedor en bucle tras una actualización — elimine local_data/chroma_db/ y reindexe sus documentos.

PrivateGPT en producción: una decisión de infraestructura, no solo un Docker run

Instalar PrivateGPT en un VPS lleva menos de una hora. Mantenerlo en condiciones operativas exige los mismos reflejos que cualquier servicio de negocio. Es precisamente lo que aporta un VPS root: la libertad de tratar sus datos según sus propias reglas, con un perímetro de responsabilidad que controla de extremo a extremo.

Elegir un VPS con suficiente RAM para Mistral-7B (8 GB) o para un modelo 13B (16 GB), un SSD NVMe para una indexación rápida y una imagen Debian o Ubuntu limpia: ese es el punto de partida de una infraestructura de IA conforme al RGPD y a la AI Act, sin suscripción de terceros y sin exponer un solo documento a un proveedor externo.

Un VPS para sus documentos confidenciales

Elija un VPS con 8 GB de RAM para Mistral-7B o 16 GB para un modelo 13B, un SSD para una indexación rápida — y despliegue PrivateGPT sin enviar ni un solo dato a la nube.

¿Necesita ayuda?

Consulte nuestro centro de ayuda y nuestra FAQ, o contacte con nuestro equipo: llamada, WhatsApp o correo electrónico. Soporte en francés, inglés y árabe.

Escribir por WhatsAppse abre en una pestaña nueva