Pourquoi assembler cette stack plutôt que d'utiliser chaque outil seul
Ollama, Open WebUI et n8n sont régulièrement cités ensemble sur r/selfhosted comme la combinaison la plus demandée pour un pipeline IA self-hosted complet. La raison est simple : pris séparément, chaque outil résout un tiers du problème. Ollama expose une API locale compatible OpenAI — mais aucune interface pour vos utilisateurs. Open WebUI donne cette interface — mais sans automatisation. n8n orchestre des workflows — mais sans moteur LLM embarqué, il doit appeler une API externe payante. Les trois ensemble forment un pipeline autonome : l'inférence reste sur votre machine, le chat est accessible depuis un navigateur, et vos automatisations consomment directement l'API locale d'Ollama via le nœud HTTP Request natif de n8n, sans plugin tiers et sans coût par token. Toutes les données — prompts, documents, historiques de conversation — restent dans vos volumes Docker, sur votre infrastructure.
Ce que la stack apporte concrètement
- Inférence privée — Mistral 7B, Llama 3, Phi-3 ou tout modèle GGUF tournent localement ; aucun prompt ne quitte votre VPS.
- Interface chat multi-utilisateurs — Open WebUI expose des comptes distincts, des historiques isolés et un endpoint compatible avec l'API OpenAI d'Ollama.
- Automatisation sans plugin — n8n consomme
http://ollama:11434via son nœud HTTP Request natif ; la documentation n8n.io/integrations le confirme sans dépendance supplémentaire. - Coût prévisible — un seul prix VPS mensuel remplace les frais au token d'une API cloud ; 8 Go de RAM suffisent pour Mistral 7B, Open WebUI et n8n en mode queue.
- Maîtrise des versions — chaque outil se met à jour indépendamment ; aucune migration forcée imposée par un éditeur SaaS.
- Portabilité totale — un
docker compose down && docker compose upsuffit pour migrer la stack vers un VPS plus puissant ; les volumes Docker portent tout l'état. - Images Docker officielles vérifiées —
docker.io/ollama/ollama,ghcr.io/open-webui/open-webuietdocker.io/n8nio/n8nsont maintenus par chaque projet respectif. - Maillage interne sécurisé — les trois services communiquent sur un réseau Docker privé ; aucun port LLM n'est exposé publiquement.
Prérequis : RAM, CPU et domaine
La RAM est le facteur limitant. Ollama chargé sur Mistral 7B consomme entre 5 et 6 Go selon la quantification choisie (documenté sur le dépôt officiel Ollama). Open WebUI demande environ 256 Mo supplémentaires. n8n en mode queue ajoute environ 512 Mo. Le total tourne donc autour de 7 Go en charge légère, ce qui signifie qu'un VPS à 8 Go de RAM tient la stack complète sans swap actif — un VPS {{vps.business.name}} à {{vps.business.vcpu}} vCPU et {{vps.business.ram}} est le profil de référence pour cette configuration. Pour des modèles plus larges (13B et au-delà), comptez 16 Go. Côté stockage, prévoyez 20 Go minimum pour les couches Docker et les modèles, davantage si vous téléchargez plusieurs modèles en parallèle. Vous aurez besoin d'un sous-domaine pour chaque service exposé (par exemple chat.votre-domaine.com pour Open WebUI et n8n.votre-domaine.com pour n8n), Docker et Docker Compose installés, et le port 443 ouvert dans votre pare-feu.
Déployer la stack avec Docker Compose
Préparer le VPS
Connectez-vous en SSH et installez Docker si ce n'est pas déjà fait :
curl -fsSL https://get.docker.com | sh. Vérifiez que Docker Compose est disponible avecdocker compose version. Créez un dossier de travail :mkdir -p /opt/ia-stack && cd /opt/ia-stack.Écrire le docker-compose.yml
Déclarez les trois services dans un fichier
docker-compose.ymlunique sur un réseau interne partagé :services: ollama: image: docker.io/ollama/ollama volumes: - ollama_data:/root/.ollama networks: - ia restart: unless-stopped open-webui: image: ghcr.io/open-webui/open-webui:main environment: - OLLAMA_BASE_URL=http://ollama:11434 volumes: - webui_data:/app/backend/data networks: - ia restart: unless-stopped n8n: image: docker.io/n8nio/n8n environment: - N8N_BASIC_AUTH_ACTIVE=true - N8N_BASIC_AUTH_USER=admin - N8N_BASIC_AUTH_PASSWORD=changez-ce-mot-de-passe - WEBHOOK_URL=https://n8n.votre-domaine.com volumes: - n8n_data:/home/node/.n8n networks: - ia restart: unless-stopped networks: ia: driver: bridge volumes: ollama_data: webui_data: n8n_data:Aucun port n'est exposé sur l'hôte : le reverse proxy sera la seule porte d'entrée.
Démarrer les conteneurs
Lancez la stack :
docker compose up -d. Vérifiez que les trois conteneurs sont actifs avecdocker compose ps. Pour consulter les journaux d'un service :docker compose logs -f ollama. À ce stade, aucun service n'est accessible depuis l'extérieur.Télécharger un modèle dans Ollama
Entrez dans le conteneur Ollama pour récupérer un modèle :
docker compose exec ollama ollama pull mistral. La commande télécharge et quantifie le modèle dans le volumeollama_data. Vérifiez la liste des modèles disponibles avecdocker compose exec ollama ollama list. Open WebUI détectera automatiquement les modèles présents dans Ollama au démarrage.Configurer le reverse proxy
Installez Caddy ou Nginx sur l'hôte pour exposer Open WebUI et n8n en HTTPS. Avec Caddy, deux blocs suffisent dans votre Caddyfile :
chat.votre-domaine.com { reverse_proxy open-webui:8080 } n8n.votre-domaine.com { reverse_proxy n8n:5678 }Caddy obtient et renouvelle les certificats Let's Encrypt automatiquement. Ollama n'est pas exposé directement — il reste accessible uniquement depuis les autres conteneurs via le réseau
ia.Créer le compte administrateur Open WebUI
Ouvrez
https://chat.votre-domaine.comdans votre navigateur. Au premier accès, Open WebUI vous invite à créer un compte administrateur (e-mail + mot de passe). Ce compte est local à votre instance — aucune donnée ne transite vers un service externe. Vous pouvez ensuite créer d'autres comptes depuis l'interface d'administration et sélectionner un modèle par défaut parmi ceux listés par Ollama.Brancher n8n sur l'API Ollama
Dans n8n (
https://n8n.votre-domaine.com), créez un workflow et ajoutez un nœud HTTP Request. Configurez-le ainsi : méthodePOST, URLhttp://ollama:11434/api/generate, corps JSON{"model": "mistral", "prompt": "{{ $json.prompt }}", "stream": false}. n8n communique avec Ollama via le réseau Docker interne — aucune clé API, aucun quota externe. Ce nœud est natif à n8n et documenté sur n8n.io/integrations.
RAM juste : charger le modèle à la demande
Par défaut, Ollama garde le modèle en mémoire pendant 5 minutes après la dernière requête, puis le décharge. Ce comportement est configurable via la variable OLLAMA_KEEP_ALIVE. Sur un VPS à 8 Go, fixer OLLAMA_KEEP_ALIVE=0 libère la RAM entre les appels n8n planifiés — utile si Open WebUI et n8n ne tournent pas simultanément à pleine charge. À l'inverse, un OLLAMA_KEEP_ALIVE=-1 maintient le modèle en mémoire en permanence pour des réponses sans délai de chargement.
Sécuriser la stack avant de l'exposer
Une stack IA self-hosted traite des données sensibles : prompts, clés de workflow, historiques de conversation. Avant toute exposition publique, vérifiez trois points. Premièrement, fermez le port 11434 d'Ollama sur l'hôte (ufw deny 11434) — il ne doit être accessible que depuis le réseau Docker interne, jamais depuis l'extérieur. Un port LLM ouvert expose l'API de génération sans authentification. Deuxièmement, changez le mot de passe d'authentification de n8n dans les variables d'environnement ; l'accès HTTP Basic est activé par défaut dans la configuration ci-dessus, mais optez pour un mot de passe long et aléatoire. Troisièmement, activez l'authentification dans Open WebUI : par défaut, toute personne atteignant l'URL peut créer un compte — limitez les inscriptions en désactivant ENABLE_SIGNUP une fois vos comptes créés. Les volumes Docker (ollama_data, webui_data, n8n_data) doivent être inclus dans vos sauvegardes régulières ; ils contiennent l'intégralité de l'état de la stack.
Profils de VPS pour la stack
Faites défiler le tableau
| Profil | RAM | Cas d'usage recommandé |
|---|---|---|
| VPS Start | 4 GB | Test et développement — modèles légers (Phi-3 Mini, Gemma 2B) |
| VPS Power | 8 GB | Usage modéré — Mistral 7B, un ou deux utilisateurs simultanés |
| VPS Business | 16 GB | Stack complète — Mistral 7B ou Llama 3 8B, équipe, workflows n8n planifiés |
Cas d'usage : automatiser un pipeline de résumé avec n8n
Un cas d'usage concret illustre la valeur de la stack assemblée. Imaginez un workflow n8n déclenché par un Webhook : il reçoit l'URL d'un article, récupère le texte via un nœud HTTP, puis l'envoie à Ollama pour résumé. Le nœud HTTP Request pointe sur http://ollama:11434/api/generate avec le modèle mistral et un prompt du type Résume ce texte en 3 points clés : {{$json.text}}. La réponse est parsée et renvoyée dans Slack, par e-mail ou versée dans une base de données — selon les nœuds suivants du workflow. Ce type de pipeline — scraping → LLM → action — ne nécessite aucune clé API externe, tourne en continu sur votre VPS, et consomme zéro coût par token. D'autres pipelines courants : classification de tickets de support entrants, génération de descriptions produit à partir de fiches brutes, ou encore extraction d'entités dans des documents contractuels. Dans tous ces cas, la donnée ne quitte pas votre infrastructure. Pour des pipelines plus complexes impliquant des documents PDF ou des bases vectorielles, vous pouvez ajouter Flowise ou LangFlow sur le même réseau Docker, en branchant Ollama comme fournisseur d'inférence commun.
La documentation officielle
Chaque outil dispose de sa documentation de référence pour la configuration avancée : Ollama sur GitHub, documentation Open WebUI et documentation n8n. Ce guide couvre l'assemblage sur VPS ; les docs éditeurs restent la référence pour les options avancées, les mises à jour majeures et les cas d'usage spécifiques à chaque outil.