Intelligence Artificielle9 min de lecture

PrivateGPT sur VPS : traitez vos documents confidentiels en local

L'AI Act article 50 est entré en application le 2 août 2026 : tout système d'IA générative traitant des données personnelles doit désormais être déclaré ou exonéré. Pour les avocats, comptables, RH et professionnels de santé, la réponse immédiate existe : PrivateGPT, installé sur un VPS root, fait tourner un modèle de langage localement, lit vos PDF et répond à vos questions — sans qu'une seule requête ne quitte votre serveur.

Pourquoi vos documents professionnels ne peuvent pas passer par le cloud

Un avocat qui colle un contrat de cession dans ChatGPT, un comptable qui soumet une liasse fiscale à Claude, un RH qui résume un dossier disciplinaire via l'API OpenAI : dans les trois cas, les données partent vers des serveurs tiers. Le RGPD article 28 est clair : le responsable du traitement reste responsable, même si c'est un sous-traitant — ici OpenAI ou Anthropic — qui reçoit les données.

L'AI Act article 50, entré en vigueur le 2 août 2026, ajoute une couche : les systèmes d'IA générative à usage général doivent être déclarés ou relever d'une exemption explicite. Utiliser l'API d'un prestataire américain pour traiter des données personnelles sans déclaration préalable expose désormais à un risque réglementaire concret.

La voie légale immédiate, c'est le on-premise. Un VPS root sur lequel tourne PrivateGPT répond à une question sur vos documents sans jamais appeler api.openai.com ni api.anthropic.com. Vous pouvez le vérifier en temps réel avec tcpdump ou les règles ufw — c'est une propriété architecturale, pas une promesse contractuelle.

Ce que vous gagnez avec PrivateGPT on-premise

  • Zéro donnée sortante : le modèle tourne en local via llama-cpp-python, aucun appel réseau vers un fournisseur IA — vérifiable par pare-feu ou tcpdump.
  • Conformité RGPD article 28 : pas de sous-traitant supplémentaire, pas de DPA à négocier, pas de transfert hors UE.
  • Exonération AI Act article 50 : un LLM auto-hébergé sans accès public ne relève pas de l'obligation de déclaration des systèmes d'IA générative à usage général.
  • Secret professionnel préservé : contrats, liasses fiscales, dossiers médicaux et dossiers RH restent dans votre périmètre juridique.
  • RAG sur vos propres documents : PrivateGPT indexe vos PDF, DOCX, TXT et CSV et répond en citant les passages sources — ce n'est pas un chatbot générique.
  • Pas d'abonnement récurrent : le coût est celui du VPS ; le modèle Mistral-7B-Instruct est open-source.
  • CPU-only viable : pas de GPU requis — un VPS avec 8 Go de RAM et un NVMe SSD suffit pour Mistral-7B Q4_K_M.

PrivateGPT vs Ollama : deux outils qui ne font pas la même chose

Ollama est un serveur LLM générique : il télécharge des modèles, expose une API compatible OpenAI et répond à des prompts. C'est un excellent outil, mais il ne sait pas lire vos fichiers — il répond à partir de son contexte de conversation, pas de vos documents.

PrivateGPT (repo github.com/zylon-ai/private-gpt) est un moteur RAG (Retrieval-Augmented Generation) : il indexe vos documents dans une base vectorielle locale (ChromaDB), puis, à chaque question, recherche les passages pertinents et les injecte dans le contexte du LLM. La réponse cite ses sources.

PrivateGPT vs Ollama — ce qui diffère

CritèrePrivateGPTOllama
Cas d'usage principalQ&R sur vos propres documents (RAG)Serving LLM générique (API)
Indexation de fichiersPDF, DOCX, TXT, CSV natifsNon — contexte manuel
Interface webOui (port 8080)Non (API uniquement)
Base vectorielleChromaDB localeAucune
Citation des sourcesOui — passage + nom du fichierNon
GPU requisNon — CPU-only viableNon — CPU-only viable

Prérequis : choisir le bon VPS avant de démarrer

Les exigences mémoire sont imposées par le modèle, pas par PrivateGPT lui-même.

- Mistral-7B-Instruct Q4_K_M (le modèle par défaut de PrivateGPT) : 8 Go de RAM minimum. En dessous, le processus est tué par le kernel (OOM) au chargement du modèle.
- Modèle 13B (ex. Llama-2-13B Q4_K_M) : 16 Go de RAM minimum. La qualité des réponses est sensiblement plus adaptée sur des textes longs et techniques.

NVMe SSD recommandé : l'indexation d'un PDF de 50 pages génère des embeddings vectoriels — sur un disque NVMe, l'opération prend quelques secondes ; sur un HDD ou un SSD SATA partagé, elle peut bloquer plusieurs minutes.

Liste de contrôle avant l'installation

  • VPS avec 8 Go de RAM minimum (16 Go si vous visez un modèle 13B).
  • Debian 12 ou Ubuntu 22.04/24.04 — les images Docker officielles de PrivateGPT ciblent ces distributions.
  • Docker et Docker Compose installés (docker compose version doit retourner v2.x).
  • NVMe SSD pour le volume de données (indexation rapide des PDF).
  • Accès SSH root ou sudo sur le VPS.
  • Port 8080 non exposé publiquement à ce stade — PrivateGPT écoute en local par défaut.

Déployer PrivateGPT avec Docker Compose

01

Cloner le dépôt et préparer la structure

Connectez-vous à votre VPS en SSH, puis :

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

Le dossier docs/ recevra vos documents à indexer. Le dossier local_data/ contient la base vectorielle ChromaDB et les modèles téléchargés — ne le montez jamais sur un volume réseau non chiffré.

02

Configurer l'environnement

cp .env.example .env

Dans .env :

DOCKER_COMPOSE_PROFILE=ollama
PRIVATEGPT_SERVER_HOST=127.0.0.1
PRIVATEGPT_SERVER_PORT=8080

Le profil ollama démarre PrivateGPT en mode CPU avec le backend llama-cpp-python. C'est le mode recommandé sur un VPS sans GPU.

03

Lancer le service et télécharger le modèle

docker compose --profile ollama up -d

Au premier démarrage, PrivateGPT télécharge Mistral-7B-Instruct-v0.2 au format GGUF (~4,1 Go). Suivez la progression :

docker compose logs -f privategpt

Lorsque vous lisez Application startup complete, le service est prêt.

04

Ingérer vos documents

Copiez vos fichiers dans le dossier docs/ monté dans le conteneur :

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

Déclenchez l'ingestion via l'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'
05

Accéder à l'interface via un tunnel SSH

PrivateGPT écoute sur 127.0.0.1:8080, jamais exposé directement sur Internet. Pour y accéder depuis votre poste :

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

Ouvrez ensuite http://localhost:8080 dans votre navigateur.

06

Poser une question sur un contrat

Dans l'interface web, assurez-vous que le mode Query documents est sélectionné. Exemple :

> « Quelles sont les conditions suspensives prévues à l'article 4 ? »

PrivateGPT retourne la réponse avec les passages sources cités. Via l'API :

curl -X POST http://127.0.0.1:8080/v1/chat/completions \
  -H 'Content-Type: application/json' \
  -d '{"messages":[{"role":"user","content":"Quelles sont les conditions suspensives de l article 4 ?"}],"use_context":true}'

Post-installation : sécuriser et sauvegarder

Accès équipe avec Nginx + authentification basique

# /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; }
}

Sauvegarder les données critiques — deux dossiers constituent l'état complet : local_data/ (base vectorielle + modèles) et docs/ (vos documents sources).

Vérifier l'absence de trafic sortant :

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

Aucun paquet ne doit apparaître.

Modèle trop lent ? Passez à un quantifié plus petit. Si le temps de réponse dépasse 90 secondes sur Mistral-7B, téléchargez la version Q3_K_S (~3,0 Go, ~20 % plus rapide sur CPU) et mettez à jour la variable LLM_HF_MODEL_FILE dans .env. L'inverse est aussi vrai : si vous avez 16 Go de RAM disponibles, mistral-7b-instruct-v0.2.Q8_0.gguf (~7,7 Go) offre des réponses nettement plus nuancées sur les clauses ambiguës.

Dépannage : les erreurs les plus fréquentes

OOM au lancementdocker ps montre Exited (137). Le code 137 = SIGKILL envoyé par le kernel OOM. Vérifiez la RAM disponible avec free -h. Si insuffisante, passez au modèle Q3_K_S ou arrêtez les services non essentiels.

Ingestion bloquée — l'appel /v1/ingest/file retourne un timeout ou une erreur 500. Vérifiez les droits : chown -R 1000:1000 local_data/. Le conteneur tourne en utilisateur non-root (UID 1000).

Temps de réponse supérieur à 60 secondes — le modèle pagine en swap. Vérifiez avec htop pendant une requête. Solution : augmenter la RAM ou choisir un modèle plus petit.

Résultats sans citation de source — vérifiez que le mode Query documents est sélectionné (pas LLM Chat) et que les documents ont bien été ingérés (GET http://127.0.0.1:8080/v1/ingest/list).

Conteneur en boucle après mise à jour — supprimez local_data/chroma_db/ et réindexez vos documents.

PrivateGPT en production : une décision d'infrastructure, pas juste un Docker run

Installer PrivateGPT sur un VPS prend moins d'une heure. Le maintenir en conditions opérationnelles demande les mêmes réflexes qu'un service métier. C'est précisément ce qu'apporte un VPS root : la liberté de traiter vos données selon vos règles, avec un périmètre de responsabilité que vous maîtrisez de bout en bout.

Choisir un VPS avec suffisamment de RAM pour Mistral-7B (8 Go) ou un modèle 13B (16 Go), un NVMe SSD pour l'indexation rapide, et une image Debian ou Ubuntu propre : c'est le point de départ d'une infrastructure IA conforme RGPD et AI Act, sans abonnement tiers et sans exposer un seul document à un prestataire externe.

Un VPS pour vos documents confidentiels

Choisissez un VPS avec 8 Go de RAM pour Mistral-7B ou 16 Go pour un modèle 13B, un NVMe SSD pour l'indexation rapide — et déployez PrivateGPT sans envoyer une donnée vers le cloud.

Besoin d'aide ?

Parcourez notre centre d'aide et notre FAQ, ou contactez notre équipe — rappel, WhatsApp ou e-mail. Support en français, anglais et arabe.