IA locale pour PME suisse, guide décisionnel et procédures

Architectures IA locales pour PME suisses : RTX Spark, DGX Spark, RTX PRO 6000, H100. TCO réel, ingénierie RAG, conformité nLPD. Procédures opérationnelles publiées progressivement.

View the Project on GitHub doit4everyone/ia-locale-pme-suisse

Guide de déploiement : stack IA locale sur VM Ubuntu Server

Architecture : VM de la stack (Ubuntu Server 26.04) + serveur de modèles (Ollama ou vLLM)


§0 Objet, périmètre et avertissements

Architecture validée en lab

Ce guide documente le déploiement d’une stack RAG locale pour PME, validée en lab sur processeur, puis sur carte graphique (§10). L’architecture en service à l’issue de ce guide :

Utilisateur → Nginx (HTTPS, https://rag.votre-domaine.ch, §9.8)
                  └→ Open WebUI (authentification LDAP AD, identité signée)
                       └→ RAG API FastAPI (port 8080, réseau interne)
                            ├→ auth.py : résolution groupes AD (LDAP, svc-rag)
                            ├→ Qdrant : index vectoriel + ACL NTFS (autorises[])
                            └→ Serveur de modèles : Ollama ou vLLM, qwen3:14b (§2)

Onyx CE est déployé dans §4 comme étape de validation de l’indexation et du backend Ollama. Il est ensuite remplacé par Open WebUI + RAG API FastAPI qui constituent la stack finale, avec le cloisonnement documentaire réel.

Le serveur de modèles fonctionne avec l’un de deux moteurs, documentés au §2 et comparés au §10.12 : Ollama, simple à installer, pour un à deux utilisateurs simultanés, et vLLM, qui traite plusieurs questions en même temps et convient à une PME dont plusieurs collaborateurs utilisent l’assistant. Les deux ont été validés en lab.

Périmètre : cloisonnement documentaire

Ce guide documente un déploiement avec cloisonnement documentaire réel basé sur les ACL NTFS du file server Windows. Chaque utilisateur connecté via LDAP AD ne voit que les documents auxquels ses groupes AD donnent accès sur le partage source.

Ce guide est adapté aux organisations dont les utilisateurs ont des droits différenciés sur les documents : données RH, financières, clients, direction.

Pour un corpus sans restriction d’accès (base de connaissances commune, documentation technique interne), ne pas modifier le code pour retirer le cloisonnement : le jour où un document sensible arrive sur le partage, il serait visible de tous. Donner plutôt la lecture NTFS à un groupe large dont les utilisateurs sont membres. Attention : « Utilisateurs du domaine », groupe principal des comptes, n’est pas lu par la RAG API (point auth.1 du suivi).

Avertissements

Tous les secrets présents dans ce guide sont en changeme-* : depuis la 2.21.0, la RAG API refuse de démarrer tant qu’il en reste un dans le .env (§16.6). Open WebUI et n8n sont servis en HTTPS par Nginx (§9.8), avec un certificat auto-signé tant que celui de l’autorité interne n’est pas installé. C’est une configuration de lab. Ne pas transposer telle quelle en production sans avoir appliqué §9, §15, §16 et §17.

Le serveur RAG concentre le contenu de plusieurs partages sans les ACL d’origine. Ses sauvegardes deviennent aussi sensibles que les sources. À traiter comme un actif de valeur, pas comme une VM de service ordinaire.

Convention de statut

Chaque section porte en tête une de ces trois lignes :

Contexte de validation

Hôte Intel Core i7-14700 (8 P-cores + 12 E-cores, 64 Go DDR5), VMware Workstation, d’abord sans GPU, puis avec une carte NVIDIA RTX 5060 Ti 16 Go (§10). VM Ubuntu Server 26.04 LTS, 16 Go RAM, 6 vCPU. Les mesures de performance données dans ce guide valent pour cette configuration et ne sont pas transposables à d’autres environnements.


Sommaire

Parties 1 et 2 : file server Windows

Section Contenu Statut
§0 Démarrage rapide Déploiement de bout en bout, avec Ollama ou vLLM, Microsoft 365 en option (étape 17) Publié
§1 Prérequis et création de la VM Sizing, installation Ubuntu 26.04, épinglage CPU, Docker Publié
§2 Le serveur de modèles : Ollama ou vLLM Choisir le moteur selon le nombre d’utilisateurs simultanés, installer Ollama ou vLLM (WSL2), vérifications, pièges, bascule, DGX Spark Publié
§3 Infrastructure : Qdrant, n8n, RAG API, Open WebUI Docker Compose, Qdrant, n8n, RAG API complète, Open WebUI Publié
§4 Interfaces utilisateur : Onyx CE et Open WebUI Validation backend avec Onyx CE, déploiement Open WebUI, LDAP AD, cloisonnement Publié
§5 Connecteurs SMB et cloisonnement documentaire Montage SMB, ACL NTFS, résolution LDAP, filtrage Qdrant par identité Publié
§6 Cline : agent de codage Agent de codage IA, configuration VS Code, Ollama Publié
§7 Pipelines n8n Synchronisation corpus, rappel rotation svc-rag, OCR (documentaire) ; Teams : voir §12 Publié
§8 Fiabilité : hallucinations et contrôle d’ancrage Contrôles déterministes, groundedness check, formation utilisateurs Publié
§9 Sécurité et durcissement UFW, TLS LDAP, frontal HTTPS Nginx et renouvellement du certificat, journalisation nLPD, rotation svc-rag, injection prompt Publié
§10 Validation et performances sur GPU Passage sur GPU, placement des modèles, méthode de mesure, choix des modèles, construction du contexte, reranker, limites du corpus, Ollama contre vLLM Publié

Version à utiliser : la dernière Release, pour toutes les parties. Elle contient les correctifs de sécurité du cloisonnement (§16.5), qui concernent aussi le partage de fichiers des Parties 1 et 2. Référence historique : les scripts tels qu’ils avaient été validés pour les Parties 1 et 2 restent consultables dans la Release v2.12.0, sans ces correctifs.

Partie 3 : Microsoft 365

Section Contenu Statut
§11 Prérequis Microsoft 365 Microsoft Graph, App Registration par certificat, résolution des groupes Entra ID, mise à niveau compatible des scripts Publié
§12 Synthèse des réunions Teams Transcriptions via Graph, groupe d’adhésion, compte rendu par le modèle local envoyé en brouillon à l’organisateur, évaluation mesurée Publié
§13 Connecteur SharePoint Online Indexation des bibliothèques SharePoint, traduction des permissions (groupes SharePoint, Entra, AD synchronisés, partages, liens) jusqu’aux chunks Qdrant, application Sites.Selected, matrice de cloisonnement Publié
§14 Documents protégés par Purview Service de déchiffrement interne, double condition (permissions SharePoint et droits de l’étiquette évalués par Purview à la question), autorisations, mise en garde, matrice de validation Publié
§15 Sécurité des données Clé d’API Qdrant, chiffrement des données au repos (LUKS2, TPM), secrets et clés sur le disque chiffré, migration, composants abandonnés, sauvegardes Publié
§16 Contrôle du cloisonnement et durcissement Test de non-divulgation automatisé, contrôle après chaque synchronisation avec alerte, masque des droits NTFS, durcissement de la RAG API, d’Open WebUI et de n8n, identité signée, versions figées, supervision externe Publié
§17 Gouvernance Responsabilités, rotation des secrets et certificats, politique de corpus, droit à l’effacement, audit périodique, limites de la conformité technique, modèle de matrice RACI Publié

Les numéros de section sont attribués à la publication.

Référence

Document Contenu
suivi-corrections.md Suivi des corrections identifiées par audit de sécurité, avec priorités et état d’avancement
Scripts Python du pipeline RAG indexer.py (indexation SMB incrémentale, deux collections Qdrant), acl_resolver.py (ACL NTFS vers Qdrant), main.py (RAG API FastAPI : retrieval hybride BM25+vectoriel, juge LLM, journalisation nLPD), auth.py (résolution groupes AD via LDAP, extension Entra ID optionnelle via Microsoft Graph), teams.py et teams_graph.py (synthèse Teams), sp_indexer.py (indexation SharePoint, déchiffrement Purview), Set-AccesIndexationRAG.ps1 (lecture du partage par un groupe dédié). Valeurs sensibles remplacées par des placeholders, prêts à adapter.
Scripts SharePoint Inventaires des permissions, accord Sites.Selected site par site, sonde (§13)
Scripts Purview Sonde de déchiffrement, tests du service mip-service (§14)
Workflows n8n n8n-sync-corpus.json (synchronisation horaire du corpus + email quarantaine) n8n-rappel-rotation-svc-rag.json (rappel mensuel rotation mot de passe) et n8n-teams-sync.json (synthèse horaire des réunions Teams, §12). Fichiers JSON importables directement dans n8n.

Ce qui vient ensuite

La Partie 3 est complète, de §11 à §17 : prérequis Microsoft 365, synthèse des réunions Teams, indexation de SharePoint Online avec ses permissions, documents protégés par Purview, sécurité des données, contrôle du cloisonnement, gouvernance. Le déploiement sur une VM neuve, disque chiffré compris, a été rejoué de bout en bout le 19 octobre 2026 (version 2.21.1). Il reste à venir :


← Retour aux procédures


ℹ️ Références, structuration et aide à la rédaction assistées par IA, avec validation humaine finale.