Comment monter une IA auto-hébergée chez vous ?

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

Quel matériel minimal pour démarrer un hub IA auto‑hébergé ?
Un mini‑PC x86-64 avec au moins 8 Go de RAM, 4 cœurs CPU décents et 100+ Go de stockage (SSD recommandé). Pour modèles plus lourds ou usage concurrent, viser 16+ Go de RAM et stockage NVMe.
Mes données sont-elles vraiment plus sûres en local ?
Héberger localement réduit les transferts vers des services tiers et vous donne le contrôle des sauvegardes et des accès, ce qui limite les surfaces d’exposition. Il reste nécessaire d’appliquer chiffrement, TLS, gestion des secrets et bonnes pratiques CNIL pour garantir la sécurité.
Est‑ce moins cher que les APIs cloud ?
À moyen/long terme, oui pour des usages intensifs : coût matériel et énergie amortis peuvent être inférieurs aux frais d’API récurrents. Pour des usages peu fréquents, les APIs cloud peuvent rester compétitives.
Comment mettre à jour les modèles locaux comme Ollama ?
Les modèles locaux s’installent via images ou téléchargements gérés par l’outil (Ollama). Adoptez une zone de staging pour tester les mises à jour, utilisez snapshots de volumes et planifiez des fenêtres de maintenance pour appliquer les changements en production.
Quels backups prévoir pour n8n et Ollama ?
Sauvegardez régulièrement : bases de données (n8n), volumes contenant modèles et données Ollama, et fichiers de configuration. Automatisez les dumps, chiffrez et stockez hors site ou sur un cloud sécurisé, et testez la restauration au moins une fois par trimestre.

 

 

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.

Retour en haut
AIgenierie