Un hub d’IA auto‑hébergée se construit avec Docker, Ollama, n8n, Portainer et Nginx Proxy Manager pour garder les données localement, réduire les coûts et conserver le contrôle. Guide pratique, basé sur la documentation Docker, Ollama et n8n, et commandes Linux essentielles.
Pourquoi créer un hub d’IA local ?
Créer un hub d’IA local protège la confidentialité, réduit la dépendance aux API cloud et permet des personnalisations profondes adaptées à votre business.
Confidentialité et conformité : Les données restent sur site, ce qui réduit les risques de fuite et facilite la maîtrise des flux sensibles. Le Règlement Général sur la Protection des Données (RGPD) impose la minimisation et la sécurité des données (Articles 5 et 32), et un hébergement local simplifie les obligations de preuve et les audits internes.
Coûts et latence : L’hébergement local évite les coûts récurrents d’appels API pour des volumes élevés et supprime les frais de transfert sortant. La latence pour des traitements internes chute généralement de dizaines à centaines de millisecondes, améliorant l’expérience utilisateur pour des applications temps réel ou quasi-temps réel.
Personnalisation et contrôle des modèles : L’accès direct aux modèles hébergés permet le fine-tuning sur vos jeux de données, l’implantation de règles métiers et la définition stricte des politiques d’accès. La gouvernance devient opérationnelle : gestion des versions de modèles, traçabilité des inférences et segmentation des droits d’usage.
Cas d’usage concrets : Automatisation interne : pipelines d’ETL, génération de rapports, automatisation des workflows. Recherche documentaire : indexation et recherche vectorielle sur documents privés. Agents conversatifs privés : assistants internes pour RH, support technique ou conformité sans exposition externe des conversations.
- Solution cloud — Avantages : Déploiement rapide, scalabilité on-demand, maintenance réduite par le fournisseur.
- Solution cloud — Inconvénients : Coûts variables, dépendance fournisseur, exposition des données à des tiers.
- Hub local — Avantages : Maîtrise des données, coût prévisible à long terme pour gros volumes, possibilités de personnalisation poussée.
- Hub local — Inconvénients : Investissement initial en infra et compétences, nécessité de maintenance et de sécurité interne.
- Question 1 : Traitez-vous des données sensibles ou soumises à des contraintes réglementaires strictes ?
- Question 2 : Vos volumes d’appels IA justifient-ils un investissement infra pour réduire les coûts à long terme ?
- Question 3 : Avez-vous besoin d’un contrôle fin des modèles (fine-tuning, traçabilité, politiques d’accès) pour vos cas métiers ?
Quels composants essentiels et quel rôle pour chacun ?
Les composants clés sont Docker (conteneurs), Portainer (gestion), Ollama (moteur LLM local), n8n (automatisations) et Nginx Proxy Manager (reverse proxy/SSL).
Docker (conteneurs) Rôle: Fournir l’environnement standardisé pour isoler services et dépendances. Exigences minimales: 1 CPU, 1–2 Go de RAM, 10 Go disque pour démarrer; augmenter selon le nombre de conteneurs. Ports par défaut: aucun obligatoire (les conteneurs exposent leurs propres ports). Volumes persistants: monter /var/lib/docker sur un disque dédié. Bonnes pratiques: Utiliser des versions stables, activer les mises à jour de sécurité, et créer des réseaux Docker dédiés pour isolation.
Portainer Rôle: Interface de gestion des conteneurs Docker. Exigences minimales: 0.5–1 CPU, 512 Mo RAM, 1–2 Go disque pour données. Ports par défaut: 9000. Volumes persistants recommandés: /data/portainer pour états et configs. Bonnes pratiques: Restreindre l’accès via reverse proxy et authentification, activer 2FA.
n8n Rôle: Orchestration et automatisation de workflows. Exigences minimales: 1 CPU, 1–2 Go RAM, 5–10 Go disque selon workflows. Ports par défaut: 5678 (ou via reverse-proxy). Volumes persistants recommandés: /data/n8n pour workflows et base de données embarquée. Bonnes pratiques: Utiliser une base externe (Postgres), limiter accès public et chiffrer les secrets.
Nginx Proxy Manager Rôle: Reverse proxy, gestion SSL/Let’s Encrypt et tableaux d’hôtes. Exigences minimales: 0.5–1 CPU, 512 Mo–1 Go RAM, 2–5 Go disque. Ports par défaut: 80, 443, interface admin 81. Volumes persistants recommandés: /data/nginx-proxy-manager (configs, certificates). Bonnes pratiques: Forcer HTTPS, automatiser renouvellement TLS, séparer réseau des applications.
Ollama Rôle: Moteur LLM local pour héberger et servir modèles. Exigences minimales: fortement dépendantes du modèle; prévoir au minimum 4 CPU, 8–16 Go RAM et 20–100 Go disque pour petits modèles; modèles grands exigent plus. Ports par défaut: consulter documentation officielle (API locale souvent sur 11434). Volumes persistants recommandés: monter dossier de modèles sur un volume dédié. Bonnes pratiques: Vérifier la doc officielle pour chemins exacts, isoler le service, limiter accès réseau.
Exemples docker-compose (minima de ports et volumes) :
services:
portainer:
image: portainer/portainer-ce
ports: ["9000:9000"]
volumes: ["/data/portainer:/data"]
services:
n8n:
image: n8nio/n8n
ports: ["5678:5678"]
volumes: ["/data/n8n:/home/node/.n8n"]
services:
nginx-proxy-manager:
image: jc21/nginx-proxy-manager
ports: ["80:80","443:443","81:81"]
volumes: ["/data/nginx-proxy-manager:/data","/data/nginx-proxy-manager/letsencrypt:/etc/letsencrypt"]
services:
ollama:
image: ollama/ollama:latest
ports: ["11434:11434"]
volumes: ["/data/ollama:/var/lib/ollama"]
Les colonnes du tableau: Service, Port(s), Volumes, Rôle, Conseil de sécurité.
| Docker | Aucun | /var/lib/docker | Plateforme de conteneurs | Utiliser réseau Docker dédié et mises à jour |
| Portainer | 9000 | /data/portainer | Gestion UI des conteneurs | Reverse-proxy + 2FA |
| n8n | 5678 | /data/n8n | Orchestration workflows | Base externe, chiffrer secrets |
| Nginx Proxy Manager | 80, 443, 81 | /data/nginx-proxy-manager | Reverse proxy et SSL | Forcer HTTPS, isoler le réseau |
| Ollama | Voir doc (ex. 11434) | /data/ollama (modèles) | Moteur LLM local | Isoler service, limiter accès, vérifier ressources |
Comment préparer le serveur avant l’installation ?
Préparer le serveur implique choisir une distribution LTS (ex. Ubuntu Server LTS), configurer SSH sécurisé, créer un utilisateur non-root, mettre à jour le système, et définir règles firewall de base.
Mettre à jour le système pour partir d’une base propre.
sudo apt update && sudo apt upgrade -y
Créer un utilisateur non-root pour déployer et lui donner les droits sudo.
sudo adduser deployer
sudo usermod -aG sudo deployer
Préparer l’accès SSH par clé et sécuriser le dossier .ssh de l’utilisateur.
sudo mkdir -p /home/deployer/.ssh
sudo chmod 700 /home/deployer/.ssh
sudo chown deployer:deployer /home/deployer/.ssh
Placer votre clé publique dans /home/deployer/.ssh/authorized_keys (coller la clé publique depuis votre poste).
Configurer SSH pour interdire le root login et forcer l’authentification par clés.
sudo sed -i 's/^#\?PermitRootLogin.*/PermitRootLogin no/' /etc/ssh/sshd_config
sudo sed -i 's/^#\?PasswordAuthentication.*/PasswordAuthentication no/' /etc/ssh/sshd_config
sudo systemctl restart sshd
Activer et configurer un firewall basique avec UFW.
sudo ufw allow OpenSSH
sudo ufw allow 80/tcp
sudo ufw allow 443/tcp
sudo ufw allow 9000/tcp
sudo ufw enable
Je recommande des ressources matérielles selon la taille des modèles LLM que vous comptez héberger.
| Small (≤7B) | 4–8 Cœurs CPU, 16–32 Go RAM, 50–200 Go SSD |
| Medium (13B–30B) | 8–16 Cœurs CPU, 64–128 Go RAM, 200–500 Go NVMe, GPU recommandé (RTX 3090/4090, A10) |
| Large (>30B) | 16+ Cœurs CPU, 256+ Go RAM ou Multi-GPU (A100/H100), 1 To+ NVMe |
Utiliser un SSD NVMe réduit les temps de chargement des modèles et des conteneurs Docker, améliore l’I/O durant l’inférence et évite les goulets d’étranglement disque quand plusieurs conteneurs lisent simultanément des checkpoints.
Sauvegarder systématiquement /etc/ssh/sshd_config, /etc/ufw, et les fichiers de configuration Docker; stocker les clés privées hors serveur ou dans un coffre-fort hardware.
Comment installer Docker et Docker Compose correctement ?
Installez Docker CE et le plugin docker-compose depuis le dépôt officiel pour garantir stabilité et mises à jour.
Les commandes suivantes, à coller telles quelles, installent Docker CE et le plugin docker-compose sur Ubuntu LTS.
Étape 1 — Installation des prérequis et ajout de la clé GPG.
Mettre à jour les index de paquets.
sudo apt update
Installer les paquets nécessaires pour ajouter des dépôts sécurisés.
sudo apt install ca-certificates curl gnupg lsb-release -y
Importer la clé GPG officielle de Docker dans un keyring sécurisé.
curl -fsSL https://download.docker.com/linux/ubuntu/gpg | sudo gpg --dearmour -o /usr/share/keyrings/docker-archive-keyring.gpg
Étape 2 — Ajouter le dépôt officiel et installer Docker et le plugin docker-compose.
Déclarer le dépôt Docker pour votre architecture et votre codename Ubuntu.
echo "deb [arch=$(dpkg --print-architecture) signed-by=/usr/share/keyrings/docker-archive-keyring.gpg] https://download.docker.com/linux/ubuntu $(lsb_release -cs) stable" | sudo tee /etc/apt/sources.list.d/docker.list > /dev/null
Rafraîchir les index puis installer Docker CE, l’interface CLI, containerd et le plugin docker-compose.
sudo apt update
sudo apt install docker-ce docker-ce-cli containerd.io docker-compose-plugin -y
Étape 3 — Vérification et permissions.
Vérifier la version de Docker pour s’assurer que l’installation a réussi.
sudo docker version
Activer et démarrer le service Docker immédiatement.
sudo systemctl enable --now docker
Ajouter votre utilisateur au groupe docker pour pouvoir lancer docker sans sudo (reconnexion requise).
sudo usermod -aG docker $USER
Notez que l’utilisateur doit se déconnecter et se reconnecter, ou ouvrir une nouvelle session shell, pour que l’ajout au groupe prenne effet.
Conseils de dépannage.
Si Docker ne démarre pas, examiner le statut et les logs système pour comprendre la cause.
- Vérifier le statut systemd et les erreurs récentes.
sudo systemctl status docker --no-pager
- Consulter les logs du daemon Docker via journalctl (utile pour erreurs d’init ou de socket).
sudo journalctl -u docker --no-pager -n 200
- Vérifier l’existence et les permissions du socket UNIX utilisé par Docker.
ls -l /var/run/docker.sock
Je recommande d’activer les mises à jour automatiques pour le système et Docker en installant unattended-upgrades.
sudo apt install unattended-upgrades -y
sudo systemctl enable --now unattended-upgrades
Si un problème persiste, fournir les extraits de journal et la sortie des commandes ci-dessus permet d’aller plus vite dans le diagnostic.
Comment déployer Portainer, Ollama, n8n et Nginx Proxy Manager avec docker-compose ?
Déployez l’ensemble via docker-compose en définissant volumes persistants, réseaux dédiés et variables d’environnement, puis protégez l’accès via Nginx Proxy Manager et HTTPS.
Voici un exemple complet de docker-compose.yml prêt à l’emploi. Remplacez les chemins et mots de passe par vos valeurs.
version: "3.8"
services:
portainer:
image: portainer/portainer-ce:latest
restart: always
ports:
- "9000:9000"
volumes:
- /var/run/docker.sock:/var/run/docker.sock
- ./portainer/data:/data
networks:
- ai_hub_net
n8n:
image: n8nio/n8n:latest
restart: always
ports:
- "5678:5678"
environment:
- N8N_BASIC_AUTH_ACTIVE=true
- N8N_BASIC_AUTH_USER=admin
- N8N_BASIC_AUTH_PASSWORD=changeme
- N8N_PORT=5678
volumes:
- ./n8n:/home/node/.n8n
networks:
- ai_hub_net
nginx-proxy-manager:
image: jc21/nginx-proxy-manager:latest
restart: always
ports:
- "80:80"
- "81:81"
- "443:443"
volumes:
- ./nginx-proxy-manager/data:/data
- ./nginx-proxy-manager/letsencrypt:/etc/letsencrypt
networks:
- ai_hub_net
ollama:
image: ollama/ollama:latest
restart: unless-stopped
ports:
- "11434:11434"
volumes:
- ./ollama/models:/models
networks:
- ai_hub_net
networks:
ai_hub_net:
driver: bridge
Commandes pour préparer et lancer :
- Créez les dossiers locaux : mkdir -p ~/portainer ~/n8n ~/nginx-proxy-manager ~/ollama
- Lancez les services : docker compose up -d
- Pour mettre à jour les images : docker compose pull && docker compose up -d
Configuration initiale essentielle :
- Accédez à Portainer sur http://YOUR_SERVER_IP:9000 pour créer l’administrateur et lier le socket Docker.
- Installez/chargez un modèle Ollama via la CLI officielle (voir documentation Ollama pour commandes de push/pull de modèles).
- Créez des hosts dans Nginx Proxy Manager et activez Let’s Encrypt pour n8n et Portainer. Attention aux risques : n’exposez pas Portainer sans protection forte ; limitez l’accès par IP, utilisez 2FA quand possible et firewall.
| Service | Volumes locaux | Ports externes | Note sécurité |
| Portainer | ~/portainer/data (./portainer/data) | 9000 | Auth admin obligatoire, restreindre accès réseau |
| n8n | ~/n8n (./n8n) – SQLite par défaut | 5678 | Activer auth, utiliser Postgres en production |
| Nginx Proxy Manager | ~/nginx-proxy-manager/data et /letsencrypt | 80, 81, 443 | HTTPS via Let’s Encrypt, protéger l’interface 81 |
| Ollama | ~/ollama/models (./ollama/models) | 11434 | Limiter accès API, mettre derrière proxy avec auth |
Prêt à passer à l’installation de votre hub d’IA local ?
Vous avez maintenant la feuille de route : préparer un serveur LTS sécurisé, installer Docker et docker-compose, puis déployer Portainer, Ollama, n8n et Nginx Proxy Manager via docker-compose. Ce montage vous rend autonome sur les modèles et les données, réduit vos coûts d’API et facilite l’automatisation interne. Bénéfice concret : plus de contrôle, confidentialité et flexibilité pour vos projets IA.
FAQ
L’IA auto-hébergée signifie exécuter des modèles et services IA sur votre infrastructure. On la choisit pour garder la maîtrise des données, réduire les coûts d’API et personnaliser les modèles selon des besoins métiers.
Pour débuter, un serveur avec 4 à 8 cœurs CPU, 16–32 Go de RAM et disque SSD suffit pour des petits modèles. Les modèles LLM plus grands exigent GPU et plus de RAM/stockage ; dimensionnez selon la taille des modèles prévus.
Ollama supporte l’exécution de modèles disponibles localement selon leurs licences. Vérifiez toujours les conditions d’utilisation et licences des modèles avant de les héberger sur site.
Sécurisez SSH par clés, activez le firewall, utilisez Nginx Proxy Manager pour HTTPS, limitez l’accès aux dashboards (Portainer, n8n) et appliquez les mises à jour Docker et images régulièrement.
L’auto-hébergement réduit les coûts d’API récurrents mais implique coûts d’infrastructure (matériel, électricité, maintenance) et expertise opérationnelle. Évaluez le TCO selon usage, volume de requêtes et besoin en GPU.
A propos de l’auteur
Franck Scandolera — expert & formateur en Tracking avancé server-side, Analytics Engineering, Automatisation No/Low Code (n8n) et intégration de l’IA en entreprise. Responsable de l’agence webAnalyste et fondateur de ‘Formations Analytics’. Références clients : Logis Hôtel, Yelloh Village, BazarChic, Fédération Française de Football, Texdecor. Disponible pour accompagner le déploiement de hubs d’IA et l’automatisation : contactez-moi.
⭐ Analytics engineer, Data Analyst et Automatisation IA indépendant ⭐
- Ref clients : Logis Hôtel, Yelloh Village, BazarChic, Fédération Football Français, Texdecor…
Mon terrain de jeu :
- Data Analyst & Analytics engineering : tracking avancé (GTM server, e-commerce, CAPI, RGPD), entrepôt de données (BigQuery, Snowflake, PostgreSQL, ClickHouse), modèles (Airflow, dbt, Dataform), dashboards décisionnels (Looker, Power BI, Metabase, SQL, Python).
- Automatisation IA des taches Data, Marketing, RH, compta etc : conception de workflows intelligents robustes (n8n, App Script, scraping) connectés aux API de vos outils et LLM (OpenAI, Mistral, Claude…).
- Engineering IA pour créer des applications et agent IA sur mesure : intégration de LLM (OpenAI, Mistral…), RAG, assistants métier, génération de documents complexes, APIs, backends Node.js/Python.






