Intermédiaire 20 minDéploiement

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.

Par Mohamed Meguedmi·Màj 2026-05-22·Testé sur Windows, macOS, Linux

#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.

i
Ce que vous obtenez à la fin
Une URL HTTPS interne (https://chat.entreprise.local) accessible depuis tous les postes de l'intranet. Chaque collaborateur a son compte, son historique, ses dossiers. Aucune donnée ne sort du réseau. Le tout en moins de 20 minutes de setup une fois le serveur préparé.

#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).
Pourquoi Open WebUI plutôt que LibreChat ou AnythingLLM ?
Open WebUI a la meilleure intégration native avec Ollama (auto-discovery des modèles, gestion de la mémoire VRAM), un mode multi-utilisateurs robuste avec RBAC, et un RAG intégré sans dépendance externe. C'est aujourd'hui le choix par défaut pour un déploiement intranet.

#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.

!
Évitez le "serveur sous le bureau"
Une équipe qui dépend de l'outil ne tolère pas une panne par perte d'alim. Placez la machine dans la salle serveur, sur onduleur, avec accès SSH stable. Si vous n'avez pas d'infra, un Mac mini M4 sur étagère fait un excellent serveur d'inférence silencieux et économe (40 W au repos).

#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.

Installation Ollama
curl -fsSL https://ollama.com/install.sh | sh

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 :

Configuration systemd
sudo systemctl edit ollama
/etc/systemd/system/ollama.service.d/override.conf
[Service]
Environment="OLLAMA_HOST=0.0.0.0:11434"
Environment="OLLAMA_KEEP_ALIVE=30m"
Environment="OLLAMA_NUM_PARALLEL=4"
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.
Recharger et télécharger le modèle
sudo systemctl daemon-reload
sudo systemctl restart ollama
ollama pull mistral:7b-instruct-q4_K_M
Quel modèle choisir pour une équipe FR ?
Mistral 7B Instruct reste le meilleur compromis qualité/vitesse en français pour le grand public interne. Pour des cas plus exigeants (analyse juridique, synthèse de docs longs), passez à Mistral Small 24B Q4 si votre VRAM le permet.

#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.

Lancement Open WebUI
docker run -d \
  --name open-webui \
  --restart always \
  -p 127.0.0.1:3000:8080 \
  -v open-webui:/app/backend/data \
  -e OLLAMA_BASE_URL=http://host.docker.internal:11434 \
  -e WEBUI_AUTH=true \
  -e ENABLE_SIGNUP=false \
  -e DEFAULT_USER_ROLE=pending \
  --add-host=host.docker.internal:host-gateway \
  ghcr.io/open-webui/open-webui:main
-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.

!
Le premier compte = admin
Si vous laissez Open WebUI ouvert sur le réseau avant d'avoir créé votre compte admin, la première personne qui s'inscrit hérite des pleins pouvoirs. Faites toujours le setup initial en local ou en SSH tunnel, jamais directement exposé.

#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.

Installer Nginx
sudo apt install nginx
/etc/nginx/sites-available/chat-intranet
server {
    listen 80;
    server_name chat.entreprise.local;
    return 301 https://$host$request_uri;
}

server {
    listen 443 ssl http2;
    server_name chat.entreprise.local;

    ssl_certificate     /etc/ssl/certs/chat-intranet.crt;
    ssl_certificate_key /etc/ssl/private/chat-intranet.key;
    ssl_protocols TLSv1.2 TLSv1.3;

    client_max_body_size 100M;

    location / {
        proxy_pass http://127.0.0.1:3000;
        proxy_http_version 1.1;
        proxy_set_header Host $host;
        proxy_set_header X-Real-IP $remote_addr;
        proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
        proxy_set_header X-Forwarded-Proto $scheme;

        proxy_set_header Upgrade $http_upgrade;
        proxy_set_header Connection "upgrade";

        proxy_read_timeout 600s;
        proxy_send_timeout 600s;
    }
}
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.
Activer et recharger
sudo ln -s /etc/nginx/sites-available/chat-intranet /etc/nginx/sites-enabled/
sudo nginx -t && sudo systemctl reload nginx

#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).

  1. 01
    Créer les utilisateurs
    Panneau Admin → Users → Add User. Renseignez email, nom, mot de passe initial. L'utilisateur le changera à sa première connexion.
  2. 02
    Restreindre les modèles par rôle
    Dans 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é.
  3. 03
    Imposer un system prompt par défaut
    Admin → Settings → Interface → Default Prompt Suggestions. Idéal pour cadrer l'usage ('Tu réponds en français, tu refuses les sujets sensibles, etc.').
  4. 04
    Désactiver les fonctionnalités externes
    Admin → Settings → désactivez Web Search (sinon Open WebUI appelle DuckDuckGo) et Image Generation si vous ne voulez aucune sortie réseau.
OIDC pour aller plus loin
Open WebUI supporte OAUTH_PROVIDER_NAME, OAUTH_CLIENT_ID, OAUTH_CLIENT_SECRET et OPENID_PROVIDER_URL en variables d'environnement. En 10 minutes, vos utilisateurs se connectent avec leur compte Entra ID ou Google Workspace, sans gérer de mots de passe locaux.

#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

Healthcheck Ollama
curl -s http://localhost:11434/api/tags | jq '.models | length'

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.

/usr/local/bin/backup-openwebui.sh
#!/bin/bash
set -e
BACKUP_DIR=/var/backups/open-webui
TIMESTAMP=$(date +%Y%m%d-%H%M)
mkdir -p "$BACKUP_DIR"

docker run --rm \
  -v open-webui:/data \
  -v "$BACKUP_DIR":/backup \
  alpine tar czf "/backup/openwebui-$TIMESTAMP.tar.gz" -C /data .

find "$BACKUP_DIR" -name 'openwebui-*.tar.gz' -mtime +14 -delete
Cron quotidien à 2h du matin
sudo chmod +x /usr/local/bin/backup-openwebui.sh
echo "0 2 * * * root /usr/local/bin/backup-openwebui.sh" | sudo tee /etc/cron.d/openwebui-backup

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.

!
Conformité et logs de conversations
Les conversations contiennent potentiellement des données personnelles ou stratégiques. Documentez la durée de rétention dans votre registre RGPD, et offrez aux utilisateurs un moyen de purger leurs conversations (Open WebUI le permet nativement). Si possible, chiffrez le volume Docker au niveau du disque (LUKS).

#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.
Ce guide vous a aidé ?

Un retour, une erreur, une précision ? Faites-nous signe, ça améliore le guide pour tout le monde.