Déployer un chatbot IA pour son équipe sur intranet
Vos équipes utilisent ChatGPT sans votre accord, et chaque prompt sort potentiellement des fichiers internes vers OpenAI. Déployer un chatbot IA d'entreprise sur intranet règle le problème en quelques heures : un serveur Ollama, Open WebUI en multi-utilisateurs, Nginx en façade avec HTTPS, et vous donnez à toute l'équipe une interface ChatGPT-like dont aucun token ne quitte votre réseau. Ce guide couvre la stack complète, du choix matériel jusqu'à la sauvegarde des conversations.
#Pourquoi un chatbot IA d'entreprise sur intranet ?
Trois raisons concrètes poussent à internaliser : la confidentialité (vos prompts contiennent souvent des extraits de code, des données clients, des éléments financiers), le coût (un abonnement ChatGPT Team à 25 €/mois/user grimpe vite à 5 000 €/an pour 20 personnes), et le contrôle (vous choisissez les modèles, les system prompts, les logs de conversations).
Une stack chatbot ia entreprise intranet bien posée tient sur une seule machine pour des équipes jusqu'à 30-50 personnes. Au-delà, on sépare le serveur d'inférence du frontend, mais l'architecture reste la même.
#Architecture de la stack
Quatre composants empilés, chacun avec un rôle précis :
- Ollama
- Daemon d'inférence qui héberge les modèles (Mistral, Llama, Qwen). Écoute par défaut sur http://localhost:11434.
- Open WebUI
- Frontend ChatGPT-like multi-utilisateurs en Docker. Gère les comptes, les conversations, le RAG, les rôles admin/user.
- Nginx
- Reverse proxy en façade. Termine le HTTPS, applique du rate-limiting, sert sur un nom de domaine interne propre.
- Watchtower + cron
- Mise à jour automatique des images Docker et sauvegarde quotidienne du volume Open WebUI (qui contient comptes + conversations).
#Prérequis matériel et OS
Le dimensionnement dépend du modèle visé et de la charge concurrente. Repères pratiques pour une équipe :
- Petite équipe (5-15 users, modèle 7B)
- 16 Go RAM, GPU 8-12 Go VRAM (RTX 3060 12GB, 4060 Ti 16GB). Mistral 7B Q4 ou Llama 3.1 8B Q4.
- Équipe moyenne (15-30 users, modèle 14B)
- 32 Go RAM, GPU 16 Go VRAM (RTX 4070 Ti Super, 5080). Phi-4 14B Q4 ou Qwen 14B Q5.
- Grande équipe (30-50 users, modèle 24-32B)
- 64 Go RAM, GPU 24 Go VRAM (RTX 3090/4090) ou Mac Studio M4 Ultra. Mistral Small 24B Q4.
- Au-delà de 50 users simultanés
- Passez à vLLM ou plusieurs instances Ollama derrière un load balancer. Sortez du cadre de ce guide.
Côté OS : Ubuntu Server 22.04 ou 24.04 LTS reste le choix le plus simple. Docker Engine et drivers NVIDIA (avec nvidia-container-toolkit si GPU) installés au préalable.
#1. Installer Ollama sur le serveur
L'installation Linux passe par le script officiel. Il détecte le GPU NVIDIA et configure le service systemd automatiquement.
Par défaut, le daemon écoute uniquement sur localhost. Pour que Docker (Open WebUI) puisse l'appeler depuis son conteneur, exposez-le sur toutes les interfaces locales du serveur. Éditez l'override systemd :
- OLLAMA_HOST=0.0.0.0:11434
- Écoute sur toutes les interfaces. Le pare-feu de l'OS reste fermé sur 11434 depuis l'extérieur — seul Open WebUI sur la même machine y accédera.
- OLLAMA_KEEP_ALIVE=30m
- Garde le modèle chargé en VRAM 30 min après le dernier prompt. Évite les rechargements coûteux entre deux requêtes utilisateurs.
- OLLAMA_NUM_PARALLEL=4
- Nombre de requêtes parallèles. 4 est un bon point de départ pour un 7B sur 12 Go de VRAM ; descendez à 2 sur GPU plus petit.
#2. Open WebUI en multi-utilisateurs avec Docker
Open WebUI se déploie en une commande Docker. Le volume open-webui:/app/backend/data contient toute la base : comptes, conversations, prompts. C'est lui qu'il faudra sauvegarder.
- -p 127.0.0.1:3000:8080
- Open WebUI n'est joignable que depuis le serveur lui-même. Nginx fera le pont vers le réseau interne. Crucial pour la sécurité.
- ENABLE_SIGNUP=false
- Personne ne peut créer un compte depuis la page de login. Vous créez les utilisateurs depuis l'admin.
- DEFAULT_USER_ROLE=pending
- Tout nouveau compte est en attente de validation admin. Évite qu'un employé invite un externe par accident.
- OLLAMA_BASE_URL
- Pointe vers Ollama qui tourne sur l'hôte. host.docker.internal résout vers le gateway Docker grâce à --add-host.
Le premier compte créé via l'interface http://serveur:3000 (en SSH-forwarding ou directement) devient automatiquement admin. Créez-le immédiatement après le démarrage du conteneur, avant d'exposer le service.
#3. Reverse proxy Nginx avec SSL interne
Pour exposer chat.entreprise.local proprement, Nginx termine le HTTPS et transmet à Open WebUI sur 127.0.0.1:3000. Sur un intranet, vous pouvez utiliser un certificat émis par votre PKI interne, ou un certificat auto-signé déployé sur les postes via GPO.
- client_max_body_size 100M
- Indispensable pour le RAG : permet à vos utilisateurs d'uploader des PDFs ou docs jusqu'à 100 Mo.
- Upgrade / Connection
- Active le WebSocket. Sans ces deux lignes, le streaming token-par-token cesse de fonctionner et l'interface paraît bloquée.
- proxy_read_timeout 600s
- Une requête de génération longue (résumé d'un gros document) peut prendre plusieurs minutes. Le timeout par défaut de Nginx (60s) coupe la réponse en plein milieu.
#4. Authentification, rôles et onboarding
Open WebUI gère nativement trois rôles : admin (configure tout), user (utilise le chat), pending (compte créé mais pas activé). Pour une PME, l'auth locale suffit. Au-delà de 30-40 personnes ou pour un alignement IT strict, branchez OIDC sur votre IdP (Keycloak, Authentik, Microsoft Entra).
- 01Créer les utilisateursPanneau Admin → Users → Add User. Renseignez email, nom, mot de passe initial. L'utilisateur le changera à sa première connexion.
- 02Restreindre les modèles par rôleDans Admin → Models, vous pouvez masquer certains modèles aux utilisateurs standards. Par exemple : garder Llama 70B uniquement pour les admins si vous l'avez chargé.
- 03Imposer un system prompt par défautAdmin → Settings → Interface → Default Prompt Suggestions. Idéal pour cadrer l'usage ('Tu réponds en français, tu refuses les sujets sensibles, etc.').
- 04Désactiver les fonctionnalités externesAdmin → Settings → désactivez Web Search (sinon Open WebUI appelle DuckDuckGo) et Image Generation si vous ne voulez aucune sortie réseau.
#5. Monitoring et sauvegarde des conversations
Trois choses à surveiller : santé du serveur (CPU/GPU/RAM), santé de l'API Ollama, et intégrité de la base Open WebUI. Et une chose à sauvegarder : le volume Docker open-webui.
#Monitoring rapide
Si vous tournez sur Prometheus + Grafana, nvidia_smi_exporter pour le GPU et node_exporter pour le système suffisent à 95 % des cas. Open WebUI lui-même expose /health en GET, à mettre dans votre check uptime.
#Sauvegarde quotidienne du volume Open WebUI
Le volume Docker open-webui contient une base SQLite avec tous les comptes, conversations, prompts personnalisés et documents indexés pour le RAG. Sa perte = perte complète de l'historique de l'équipe.
Le script garde 14 jours d'historique. Pour un PRA digne de ce nom, répliquez /var/backups/open-webui vers un NAS ou un bucket S3 chiffré chaque nuit via rsync ou rclone.
#Dépannage
- Open WebUI ne voit aucun modèle
- Le conteneur n'atteint pas Ollama. Vérifiez docker exec open-webui curl http://host.docker.internal:11434/api/tags. Si timeout, votre Ollama écoute sur 127.0.0.1 — repassez OLLAMA_HOST=0.0.0.0:11434.
- Streaming saccadé ou bloqué
- Manque les headers WebSocket dans Nginx. Vérifiez la présence de proxy_set_header Upgrade et Connection "upgrade" dans la conf vhost.
- 504 Gateway Timeout sur longues requêtes
- proxy_read_timeout trop bas. Passez à 600s minimum. Sur des résumés de gros docs, montez à 1200s.
- GPU saturé, latence qui explose
- Trop de requêtes parallèles. Baissez OLLAMA_NUM_PARALLEL à 2 et augmentez OLLAMA_KEEP_ALIVE pour éviter les rechargements.
- Erreur 'no space left' sur /var/lib/docker
- Les modèles Ollama ne sont pas dans Docker — c'est le volume open-webui qui grossit. Lancez docker system prune, et surveillez le RAG (les documents indexés pèsent vite plusieurs Go).
#Pour aller plus loin
Vous avez une instance qui tourne pour votre équipe. Trois pistes naturelles pour la professionnaliser :
- Documenter la conformité RGPD
- Le guide LLM local et RGPD couvre l'audit, le registre des traitements et les recommandations CNIL — indispensable si votre équipe traite des données personnelles.
- Étendre l'outil avec du RAG
- Le guide RAG avec ChromaDB et Mistral montre comment connecter votre base documentaire interne (wiki, SharePoint exporté, contrats) à Open WebUI.
- Automatiser des workflows
- Le guide automatiser avec n8n et Ollama décrit comment connecter votre chatbot à votre stack métier (mails entrants, tickets, RSS) sans aucune fuite cloud.
Un retour, une erreur, une précision ? Faites-nous signe, ça améliore le guide pour tout le monde.