Un hub d’IA auto-hébergé centralise LLMs et automatisations locales pour protéger vos données, réduire les coûts d’API et garder le contrôle. Suivez un plan pratique pour installer Docker, Portainer, Ollama, n8n et Nginx Proxy Manager sur un mini‑PC (≥8 Go RAM), en accord avec les bonnes pratiques CNIL.
Pourquoi créer un hub IA local
Je défends l’idée qu’un hub IA local n’est pas un luxe mais une réponse pratique aux contraintes de confidentialité, de coût et d’intégration que rencontrent les entreprises aujourd’hui.
- Confidentialité et souveraineté des données : Rapprocher le traitement des sources réduit les transferts externes et limite les risques de fuite ou d’utilisation non autorisée des données personnelles. La CNIL rappelle que le contrôle local des traitements facilite la conformité au RGPD et diminue les risques liés aux transferts hors UE. La conteneurisation (Docker) fournit une isolation et des politiques de réseau qui renforcent la séparation des environnements de production et des données sensibles, comme l’explique la documentation officielle de Docker.
- Réduction des coûts récurrents d’API : Les appels à des APIs LLM peuvent devenir coûteux à l’échelle (ordres de grandeur : quelques centaines à quelques milliers d’euros par mois pour un usage métier modéré selon fréquence et complexité). Héberger localement un modèle adapté peut nécessiter un investissement matériel initial (mini‑PC ou small server entre ~800 € et 3 000 € selon GPU) amortissable sur 2–3 ans, avec des coûts énergétiques souvent inférieurs à 50 €/mois pour une machine modérée. La comparaison financière penche en faveur du local dès que le volume dépasse quelques dizaines de milliers de requêtes par mois, surtout pour des usages récurrents et prévisibles. Des projets et notes publiques (par exemple les retours d’expérience d’acteurs comme Ollama sur l’exécution locale) montrent que l’exécution on‑premise est viable pour beaucoup d’applications.
- Personnalisation et intégration profonde : Contrôler l’infrastructure permet d’adapter les modèles aux données internes, d’entraîner des prompts spécialisés et de créer des workflows complexes avec des connecteurs vers CRM, bases internes, et outils d’automatisation. Cas concrets : automatisation d’emailing interne avec templates dynamiques, enrichissement automatique des fiches CRM à partir d’emails et appels API internes, génération de synthèses quotidiennes des réunions et des tickets. Ces intégrations réduisent les frictions opérationnelles et augmentent la valeur métier des sorties IA.
Nous aborderons ensuite les composants à choisir pour monter ce hub (matériel, modèles et orchestration).
Quels composants pour l’architecture
Pour une IA auto-hébergée fiable et reproductible, privilégiez Docker/Portainer, Ollama, n8n et Nginx Proxy Manager. Ces choix couvrent conteneurisation, moteur LLM local, automatisation et routage/SSL.
Docker : Fournit l’isolation des services, la réplicabilité via des images et la gestion des dépendances.
Portainer : Interface graphique pour gérer conteneurs, images et stacks Docker et simplifier les déploiements.
Ollama : Moteur LLM local exposant une API REST (port par défaut 11434) pour héberger et interroger des modèles sans cloud.
n8n : Orchestrateur visuel pour créer des workflows déclenchés par webhooks, fichiers ou CRON, idéal pour pipelines de pré/post-traitement.
Nginx Proxy Manager : Reverse proxy simple, gestion automatique de certificats Let’s Encrypt et vhosts pour exposer vos services en HTTPS.
Exigences minimales et recommandations :
- CPU x86-64 recommandé pour compatibilité des images et performances.
- 8+ Go de RAM minimum, 16+ Go recommandé si vous exécutez plusieurs services ou modèles locaux lourds.
- Stockage NVMe ou SATA pour les modèles et containers; prévoir plusieurs dizaines à centaines de Go selon modèles.
- Swap configurable si RAM insuffisante, mais privilégier la mémoire physique pour la latence.
Connexion entre services :
- Créer un réseau Docker utilisateur (ex : ai_net) pour communication interne sécurisée.
- Utiliser des volumes Docker pour /models, /n8n, /portainer_data et /nginx/data afin d’assurer la persistance.
- Ajouter des labels Docker (ex : traefik ou nginx-proxy) pour que Nginx Proxy Manager découvre automatiquement les vhosts.
Schéma logique succinct :
- Nginx Proxy Manager (front) ↔ routage HTTPS vers Portainer, Ollama API et n8n.
- Portainer ↔ gestion des stacks sur le daemon Docker.
- n8n ↔ appelle Ollama via API interne pour générer ou enrichir données.
- Volumes partagés ↔ stockage modèles et bases de données persistantes.
| Composant | Rôle | Port par défaut | Conseil de configuration |
| Docker | Conteneurisation, isolation, images | — (daemon socket) | Créer un réseau utilisateur et volumes dédiés |
| Portainer | UI de gestion des conteneurs et stacks | 9000 / 9443 | Activer HTTPS et backup des données |
| Ollama | Moteur LLM local exposant API REST | 11434 | Stocker modèles sur volume NVMe, limiter accès via réseau interne |
| n8n | Orchestrateur visuel de workflows | 5678 | Utiliser volume pour DB, configurer secrets et webhooks sécurisés |
| Nginx Proxy Manager | Reverse proxy, Let’s Encrypt, vhosts | 80 / 443 (admin 81) | Activer HTTPS automatique et règles de redirection strictes |
Comment préparer le serveur et installer Docker
Préparez une base propre : Ubuntu Server LTS est conseillé. Créez un utilisateur non-root, activez SSH, puis installez Docker et Docker Compose depuis les dépôts officiels en suivant les commandes ci‑dessous.
- Mettre à jour le système et installer OpenSSH.
sudo apt update && sudo apt upgrade -y
sudo apt install -y openssh-server
- Créer un utilisateur non-root et lui donner les droits sudo.
sudo adduser deploy
sudo usermod -aG sudo deploy
- Installer les dépendances pour Docker, ajouter la clé GPG officielle et le repo Docker.
sudo apt install -y ca-certificates curl gnupg lsb-release
curl -fsSL https://download.docker.com/linux/ubuntu/gpg | sudo gpg --dearmor -o /usr/share/keyrings/docker-archive-keyring.gpg
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
sudo apt update
- Installer Docker Engine et le plugin Docker Compose.
sudo apt install -y docker-ce docker-ce-cli containerd.io docker-compose-plugin
- Vérifier l’installation et tester un conteneur.
sudo docker version
sudo docker run --rm hello-world
- Ajouter l’utilisateur au groupe docker pour éviter sudo, puis se reconnecter.
sudo usermod -aG docker deploy
# Déconnexion/Connexion nécessaire pour que le changement prenne effet
- Conseils de sécurité initiaux et gestion des ressources.
# Sécuriser SSH (utiliser clés, désactiver root)
sudo apt install -y ufw
sudo ufw allow OpenSSH
sudo ufw allow 80/tcp
sudo ufw allow 443/tcp
sudo ufw enable
# Swap si RAM limitée (ex. 4G)
sudo fallocate -l 4G /swapfile
sudo chmod 600 /swapfile
sudo mkswap /swapfile
sudo swapon /swapfile
sudo bash -c 'echo "/swapfile none swap sw 0 0" >> /etc/fstab'
# Watchdog pour redémarrage automatique si kernel freeze
sudo apt install -y watchdog
sudo systemctl enable --now watchdog
| Commande clé | But |
| sudo apt update && sudo apt upgrade -y | Mise à jour du système |
| sudo apt install -y openssh-server | Activer SSH |
| curl -fsSL … | sudo gpg –dearmor … | Ajouter la clé GPG Docker |
| sudo apt install -y docker-ce … docker-compose-plugin | Installer Docker + Compose |
| sudo docker run –rm hello-world | Test rapide du moteur Docker |
Pour la suite, déployez Portainer : cet outil graphique facilite la gestion des conteneurs et vous servira d’interface pour déployer vos services (je couvre le déploiement de Portainer étape par étape dans l’étape suivante).
Comment déployer Portainer, Ollama, n8n et Nginx
Je détaille comment déployer Portainer, Ollama, n8n et Nginx Proxy Manager en stack Docker pour une IA auto-hébergée fiable et maintenable.
Déploiements et commandes d’initialisation.
- Portainer: Déployer pour gérer les conteneurs et monter le socket Docker.
version: '3.7'
services:
portainer:
image: portainer/portainer-ce:latest
ports:
- "9000:9000"
volumes:
- /var/run/docker.sock:/var/run/docker.sock
- portainer_data:/data
restart: unless-stopped
volumes:
portainer_data:
Commande d’initialisation: docker-compose up -d. Variables essentielles: aucune, créer un compte admin via l’UI. Ressources: 0.5–1 CPU, 256–512 MB RAM.
- Ollama: Lancer le conteneur LLM avec volumes pour modèles et variables pour limiter ressources.
version: '3.7'
services:
ollama:
image: ollama/ollama:latest
ports:
- "11434:11434"
volumes:
- ollama_models:/var/lib/ollama/models
- ollama_data:/var/lib/ollama/data
environment:
- OLLAMA_MAX_THREADS=4
restart: unless-stopped
volumes:
ollama_models:
ollama_data:
Commande d’initialisation: docker-compose up -d. Variables essentielles: OLLAMA_MAX_THREADS (contrôle CPU). Ressources: 4+ vCPU et 8–16 GB RAM selon modèle.
- n8n: Mode persistant avec base PostgreSQL pour production ou SQLite pour tests.
version: '3.7'
services:
n8n:
image: n8nio/n8n:latest
ports:
- "5678:5678"
environment:
- WEBHOOK_URL=https://n8n.example.com/
- DB_TYPE=postgresdb
- DB_POSTGRESDB_HOST=postgres
- DB_POSTGRESDB_DATABASE=n8n
- DB_POSTGRESDB_USER=n8n
- DB_POSTGRESDB_PASSWORD=changeme
volumes:
- n8n_data:/home/node/.n8n
depends_on:
- postgres
restart: unless-stopped
postgres:
image: postgres:14
environment:
- POSTGRES_USER=n8n
- POSTGRES_PASSWORD=changeme
- POSTGRES_DB=n8n
volumes:
- pgdata:/var/lib/postgresql/data
volumes:
n8n_data:
pgdata:
Commande d’initialisation: docker-compose up -d. Variables essentielles: WEBHOOK_URL pour callback, creds DB. Ressources: 1–2 vCPU, 1–4 GB RAM selon charge.
- Nginx Proxy Manager: TLS et routage pour exposer Portainer et n8n.
version: '3.7'
services:
nginxproxymanager:
image: jc21/nginx-proxy-manager:latest
ports:
- "80:80"
- "443:443"
volumes:
- npm_data:/data
- npm_letsencrypt:/etc/letsencrypt
restart: unless-stopped
volumes:
npm_data:
npm_letsencrypt:
Commande d’initialisation: docker-compose up -d. Variables essentielles: config via UI pour certificats Let’s Encrypt. Ressources: 0.5–1 CPU, 512 MB–1 GB RAM.
Exemple d’appel n8n → Ollama (HTTP POST JSON).
POST http://ollama:11434/generate
Content-Type: application/json
{
"model": "ggml-mymodel",
"prompt": "Résume le texte suivant : ...",
"max_tokens": 256
}
Workflow n8n simple: Trigger Webhook → HTTP Request (vers Ollama comme ci‑dessus) → Write Binary File ou Insert en DB. Utiliser un node « Webhook » pour recevoir, un node « HTTP Request » pour appeler Ollama, puis un node « Write Binary File » ou « Postgres » pour stocker la réponse.
| Stack | Ports | Volumes | Points d’attention |
| Portainer | 9000 | portainer_data, /var/run/docker.sock | Exposer socket = admin total, sécuriser accès. |
| Ollama | 11434 | ollama_models, ollama_data | Modèles gourmands en RAM/CPU, limiter threads. |
| n8n | 5678 | n8n_data, pgdata | WEBHOOK_URL correct, sauvegardes DB. |
| Nginx Proxy Manager | 80/443 | npm_data, npm_letsencrypt | Configurer TLS automatique, redirections vers services internes. |
Comment sécuriser, automatiser et maintenir le hub
Sécurisez l’accès et les données, automatisez les sauvegardes et les workflows, puis planifiez la maintenance et la supervision pour garantir disponibilité et récupération rapide en cas d’incident.
1) Sécurité réseau — Ce qu’il faut déployer et pourquoi.
- Utilisez Nginx Proxy Manager avec certificats Let’s Encrypt pour TLS automatisé et renouvellement transparent.
- Appliquez des règles UFW (Uncomplicated Firewall) pour n’autoriser que les ports nécessaires (80/443, VPN, SSH restreint).
- Installez fail2ban pour limiter les tentatives SSH et bloquer les IP malveillantes.
- Restreignez l’accès à Portainer par 2FA, réseau interne ou VPN; évitez l’exposition directe sur Internet.
2) Gestion des secrets — Principes et mise en œuvre.
- Ne stockez pas de clés ou tokens en clair dans les variables d’environnement.
- Privilégiez Docker secrets ou fichiers protégés (chmod 600) montés en runtime.
- Pour les besoins avancés, utilisez un coffre (ex. HashiCorp Vault) ou chiffrez les fichiers de configuration avec GPG.
3) Sauvegardes et récupération — Scripts et stratégie.
- Effectuez dumps réguliers des bases (n8n, PostgreSQL) et archivez les volumes de modèles (Ollama) chiffrés hors site.
- Testez la restauration trimestriellement pour valider les backups.
# Backup script example: snapshot volumes, compress, encrypt and rsync off-site
#!/bin/bash
TIMESTAMP=$(date +%F_%H%M)
BACKUP_DIR="/backups/$TIMESTAMP"
mkdir -p "$BACKUP_DIR"
# Dump Postgres (n8n)
docker exec -t n8n_db pg_dump -U n8n > "$BACKUP_DIR"/n8n_dump.sql
# Archive volumes (example: ollama models)
tar -czf "$BACKUP_DIR"/volumes.tar.gz -C /var/lib/docker/volumes ollama_data
# Encrypt archive with GPG (public key setup required)
gpg --encrypt --recipient admin@example.com "$BACKUP_DIR"/volumes.tar.gz
# Push off-site (rsync to remote)
rsync -avz "$BACKUP_DIR".gpg backup@remote:/mnt/backups/
# Simple update sequence
docker-compose pull
docker-compose up -d --remove-orphans
4) Mises à jour — Processus sûr.
- Adoptez une stratégie rolling avec snapshots VM/volume avant mise à jour.
- Testez chaque image sur une instance de staging avant production.
5) Surveillance et logs — Mesures pratiques.
- Exportez métriques avec Prometheus et tableaux Grafana pour disponibilité et latences.
- Collectez logs Docker, envoyez alertes via webhook vers n8n ou vers un canal Slack/Telegram.
Checklist mensuelle d’exploitation
- Vérifier les sauvegardes (intégrité et restauration testée).
- Appliquer patchs critiques et vérifier snapshots pré-update.
- Contrôler les alertes et erreurs récurrentes dans les logs.
- Rafraîchir et révoquer les secrets inutilisés et rotations de clés.
| Tâche | Fréquence |
| Vérification des backups + test de restauration | Mensuelle |
| Application des mises à jour de sécurité | Hebdomadaire / urgentes immédiatement |
| Rotation des secrets et audit d’accès | Trimestrielle |
| Revue des logs et alertes | Hebdomadaire |
| Test de mise à jour sur staging | Avant toute mise à jour majeure |
| Scan de vulnérabilités et pentest léger | Annuel |
Prêt à lancer votre hub IA auto-hébergé ?
Vous avez maintenant une feuille de route complète : pourquoi héberger localement, quels composants choisir (Docker, Portainer, Ollama, n8n, Nginx Proxy Manager), comment préparer la machine, installer Docker, déployer les stacks et assurer sécurité, sauvegarde et maintenance. En suivant ces étapes vous réduisez vos coûts d’API, gardez la maîtrise de vos données et automatisez des process internes. Bénéfice concret : un hub fiable et contrôlable qui transforme des tâches répétitives en workflows productifs et sûrs pour votre business.
FAQ
A propos de l’auteur
Franck Scandolera — expert & formateur en Tracking avancé server-side, Analytics Engineering, Automatisation No/Low Code (n8n), intégration de l’IA en entreprise et SEO/GEO. Responsable de l’agence webAnalyste et de l’organisme de formation Formations Analytics. Références clients : Logis Hôtel, Yelloh Village, BazarChic, Fédération Française de Football, Texdecor. Dispo pour aider les entreprises => 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.






