Home » AI » Comment déployer un Self-Hosted AI sécurisé chez vous ?

Comment déployer un Self-Hosted AI sécurisé chez vous ?

Déployer un Self-Hosted AI sécurisé demande Ubuntu LTS, Docker/Docker Compose, Portainer, Ollama et n8n sur un serveur local pour garder vos données en interne et éviter les frais API (références : Docker, Ollama, n8n). Suivez la feuille de route pour un hub IA privé, maintenable et contrôlé.

Pourquoi héberger une IA localement

Héberger une IA en local maximise confidentialité et contrôle tout en diminuant les coûts récurrents liés aux APIs.

La confidentialité devient tangible lorsque les données sensibles restent sur votre LAN et ne transitent plus vers des services tiers. La conformité RGPD est plus directe à démontrer lorsque les logs, modèles et backups restent dans votre périmètre. L’économie est rapide à chiffrer : une utilisation continue d’API facturée au token ou par requête peut coûter de quelques centaines à plusieurs milliers d’euros par mois selon le volume. L’hébergement local supprime ces frais récurrents et, selon l’échelle et le modèle, permet souvent de réduire la facture opérationnelle de 50 à 90 % sur le long terme.

  • Solutions d’auto-hébergement pertinentes : Docker pour conteneuriser, Ollama pour exécuter et gérer des modèles open-source localement, n8n pour orchestrer et automatiser les flux sans quitter votre réseau.
  • Conservation des données : Les données utilisateur, les prompts et les historiques restent sur vos serveurs, facilitant audits et revues de conformité.

La flexibilité provient de l’accès aux modèles open-source que vous pouvez adapter, fine-tuner ou restreindre selon vos besoins. Llama et Mistral sont des exemples de modèles exécutables localement via Ollama, ce qui permet de contrôler la version, les paramètres d’inférence et les règles de sécurité sans dépendre d’un fournisseur.

Critère Cloud public Hub local Impact pour l’entreprise
Latence Variable, dépend de la région et de la congestion Faible sur LAN Expérience utilisateur améliorée pour les applications temps réel
Coût Coûts récurrents par token/requête Investissement initial matériel + maintenance Contrôle budgétaire à long terme
Contrôle Limité par le fournisseur Total (versions, logs, accès) Meilleure gouvernance et conformité
Sécurité Fort si bien configuré, mais dépend d’un tiers Directement maîtrisé par l’équipe Réduction des risques de fuite pour les données sensibles
  • Automatisation interne : Orchestrer workflows et RPA (n8n + modèles locaux) pour réduire les tâches manuelles et améliorer la productivité.
  • Traitement de données privées : Analyser documents RH, dossiers médicaux ou financiers sans exposer les données à des tiers.
  • Assistants métiers personnalisés : Construire des agents adaptés au vocabulaire et aux processus internes sans contraintes de confidentialité.

Prérequis matériels et réseau : Mini-PC ou desktop recyclé, au minimum 8 Go de RAM (16 Go recommandé), SSD pour I/O rapide, CPU multi-coeurs ou GPU si besoin pour l’inférence, et un LAN fiable avec switch/routeur stable. Consulter le chapitre suivant pour détailler les composants et dimensionner la machine selon vos cas d’usage.

Quels composants forment votre hub IA

« Un hub IA auto-hébergé combine un OS serveur, la contenerisation, un gestionnaire graphique, un moteur LLM local, une plateforme d’automatisation et un reverse proxy sécurisé. »

Ubuntu Server joue le rôle de socle stable pour tous les services et gère le matériel, les mises à jour de sécurité et les pilotes GPU si nécessaire. Docker et Docker Compose orchestrent les conteneurs, garantissent l’isolation des services et facilitent le déploiement reproductible des stacks. Portainer fournit une interface graphique pour superviser et administrer les containers, les volumes et les réseaux sans passer systématiquement par la ligne de commande.

Ollama sert de runtime LLM local exposant une API REST/HTTP pour interroger des modèles sur votre réseau privé, réduisant les risques liés aux appels cloud. n8n orchestre les workflows, automatise les intégrations entre services et permet des pipelines no-code/low-code pour orchestrer les prompts et le post-traitement. Nginx Proxy Manager gère le reverse proxy, le routage par nom de domaine et le TLS/Let’s Encrypt afin d’assurer un accès externe sécurisé et des certificats automatisés.

  • Images recommandées et configuration basique : Portainer → portainer/portainer-ce ; Ports exposés → 9000 (UI), 9443 (HTTPS) ; Volumes → /var/run/docker.sock, portainer_data:/data.
  • Ollama → image ollama/ollama (si disponible) ou installation native ; Ports exposés → 11434 (API) ; Volumes → /var/lib/ollama:/root/.ollama.
  • n8n → n8nio/n8n ; Ports exposés → 5678 ; Volumes → ~/.n8n:/home/node/.n8n, n8n_db:/data si local DB.
  • Nginx Proxy Manager → jc21/nginx-proxy-manager ; Ports exposés → 80, 443, 81 (admin) ; Volumes → npm_data:/data, npm_letsencrypt:/etc/letsencrypt.
  • Docker/Docker Compose → installer sur Ubuntu Server (pas d’image nécessaire pour le moteur).

Architecture réseau simple : déployer tous les services sur un réseau bridge Docker interne pour isolation et résolution par nom de service. Portainer se connecte au socket Docker pour la gestion. Nginx Proxy Manager se place en frontal pour TLS et routage vers les services internes, avec règles d’accès et redirections vers Ollama et n8n selon les hôtes.

Composant Fonction clé Image recommandée Ports Volumes
Ubuntu Server OS hôte et gestion matériel — (install) /etc, /var/lib
Docker & Compose Contenerisation et orchestration — (install) /var/lib/docker
Portainer Gestion graphique Docker portainer/portainer-ce 9000, 9443 /var/run/docker.sock, portainer_data
Ollama Runtime LLM local (API) ollama/ollama (ou install native) 11434 /var/lib/ollama
n8n Orchestration de workflows n8nio/n8n 5678 ~/.n8n, n8n_db
Nginx Proxy Manager Reverse proxy, TLS, domaines jc21/nginx-proxy-manager 80, 443, 81 npm_data, npm_letsencrypt

Modularité garantie : il est possible d’ajouter ultérieurement des vecteurs de stockage, des bases vectorielles ou l’accélération GPU sans refondre l’architecture existante.

Comment préparer et sécuriser le serveur

Préparez une base propre : Ubuntu Server LTS, un utilisateur sudo non-root, SSH sécurisé et ufw activé.

Je priorise une image propre et une sécurité minimale avant d’installer des services containers. Je définis un utilisateur non-root avec sudo, j’active SSH par clé (authentification par clé publique), et j’applique un pare-feu léger avec ufw. SSH (Secure Shell) permet un accès distant chiffré ; une clé SSH est une paire cryptographique publique/privée qui évite l’usage de mots de passe.

Action Commande
Mettre à jour apt
sudo apt update && sudo apt upgrade -y
Installer OpenSSH
sudo apt install -y openssh-server
Créer un utilisateur sudo non-root
sudo adduser deployer
sudo usermod -aG sudo deployer
Configurer la clé SSH pour l’utilisateur
sudo -u deployer mkdir -p /home/deployer/.ssh
sudo -u deployer chmod 700 /home/deployer/.ssh
ssh-copy-id deployer@votre_ip_serveur
Désactiver l’authentification par mot de passe (optionnel)
sudo sed -i 's/^#\?PasswordAuthentication.*/PasswordAuthentication no/' /etc/ssh/sshd_config
sudo systemctl reload sshd

Je recommande ces règles ufw pour limiter les accès tout en laissant les services essentiels disponibles.

Règle Commande
Autoriser SSH
sudo ufw allow OpenSSH
Autoriser Portainer (exemple)
sudo ufw allow 9000/tcp
Autoriser n8n (exemple)
sudo ufw allow 5678/tcp
Activer ufw
sudo ufw enable
sudo ufw status verbose

Je conseille au minimum 8 Go de RAM, un SSD pour I/O rapides et un port Ethernet gigabit. Je recommande une adresse IP statique ou une réservation DHCP dans votre routeur, ainsi que des sauvegardes régulières (images système et volumes Docker).

Je vérifie le noyau et l’environnement avant Docker : commande pour le kernel uname -r, pour l’espace disque df -h /, et pour le swap swapon --show. Je crée un swap si nécessaire (ex. 4G) et je m’assure d’avoir au moins 20–30 Go d’espace libre pour images et volumes.

Prêt pour Docker Validé
OS à jour
SSH configuré et clé installée
ufw activé avec règles minimales
Espace disque suffisant
Compte non-root avec sudo

Comment installer Docker et vérifier les permissions

« Installez Docker depuis le dépôt officiel, puis ajoutez l’utilisateur au groupe docker pour exécuter des commandes sans sudo. »

Installez Docker Engine (moteur de conteneurs) et le plugin Docker Compose (gestion des stacks) depuis les paquets officiels Ubuntu pour recevoir les mises à jour de sécurité. Les commandes ci‑dessous fonctionnent sur Ubuntu 20.04+.

Ajouter la clé GPG officielle
curl -fsSL https://download.docker.com/linux/ubuntu/gpg | sudo gpg --dearmor -o /usr/share/keyrings/docker-archive-keyring.gpg
Ajouter le dépôt Docker
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
Mettre à jour la liste des paquets
sudo apt update
Installer Docker Engine et Compose plugin
sudo apt install -y docker-ce docker-ce-cli containerd.io docker-compose-plugin

Vérifications de base après installation :

sudo docker version
docker compose version
sudo docker run --rm hello-world

La sortie attendue pour sudo docker version montre les versions Client et Server (Engine). La commande docker compose version doit renvoyer la version du plugin Compose. Le conteneur hello-world affiche un message de réussite confirmant que Docker peut lancer des conteneurs.

Pour exécuter Docker sans sudo, ajoutez votre utilisateur au groupe docker :

sudo usermod -aG docker $USER

Notez qu’il est nécessaire de se déconnecter et se reconnecter (ou redémarrer) pour que le changement prenne effet.

Bonnes pratiques post‑installation :

  • Activer la rotation des logs : Configurer /etc/docker/daemon.json avec "log-opts": {"max-size":"10m","max-file":"3"} pour éviter de remplir le disque.
  • Limiter l’accès au socket : Vérifier les permissions de /var/run/docker.sock (root:docker, 660) et restreindre les utilisateurs du groupe docker car l’accès équivaut à un accès root.
  • Utiliser des volumes nommés : Créer des volumes Docker (docker volume create mydata) pour persister les données et faciliter les sauvegardes.

Tests rapides

  • Lancer docker run --rm hello-world et vérifier le message de succès.
  • Exécuter docker compose version pour confirmer la présence du plugin Compose.
  • Créer et lister un volume docker volume create testvol puis docker volume ls pour valider la persistance.

Comment déployer Portainer, Ollama et orchestrer n8n

Déployez Portainer pour gérer les containers, lancez Ollama comme moteur LLM local et orchestrez via n8n consommant l’API d’Ollama.

Exemple complet docker-compose.yml

version: "3.8"
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
    networks:
      - stack_net

  ollama:
    image: ollama/ollama:latest
    ports:
      - "11434:11434"
    volumes:
      - ollama_data:/var/lib/ollama
    restart: unless-stopped
    networks:
      - stack_net

  n8n:
    image: n8nio/n8n:latest
    ports:
      - "5678:5678"
    environment:
      - N8N_BASIC_AUTH_ACTIVE=true
      - N8N_BASIC_AUTH_USER=admin
      - N8N_BASIC_AUTH_PASSWORD=ChangeMeStrong!
      - N8N_PORT=5678
    volumes:
      - n8n_data:/home/node/.n8n
    restart: unless-stopped
    networks:
      - stack_net

volumes:
  portainer_data:
  ollama_data:
  n8n_data:

networks:
  stack_net:
    driver: bridge

Options cruciales expliquées

  • Mount du socket Docker : Permet à Portainer de gérer l’hôte Docker. Ne pas exposer ce socket publiquement.
  • Mapping de volumes : Garantit la persistance des données (Portainer, Ollama, n8n). Utiliser des volumes nommés pour les sauvegardes.
  • restart: unless-stopped : Redémarre automatiquement les services après un crash ou un reboot.
  • networks : Isoler les services dans un réseau Docker interne pour éviter l’exposition directe et faciliter les règles de firewall.

Exemple d’appel API Ollama (curl)

curl -s --request POST http://localhost:11434/v1/complete \
  -H "Content-Type: application/json" \
  -d '{"model":"llama-3.2","prompt":"Donne un résumé en 3 points de la sécurité réseau."}'

Workflow n8n simple

  • Webhook (Trigger) : Reçoit la requête entrante. Utiliser le node Webhook HTTP.
  • HTTP Request : Appel POST vers http://ollama:11434/v1/complete avec le body JSON. Configurer timeout et headers.
  • Transform (Function/Set) : Extraire et formater la réponse du modèle.
  • Stockage/Notification : Envoyer vers une base (Postgres) ou notifier Slack/Email.
  • Gestion d’erreurs : Ajouter un node IF pour vérifier statusCode, boucler avec un compteur + Wait pour retries limités, et utiliser le node « Error Trigger » pour alertes.

Sécurité & exposition

  • Placer Nginx Proxy Manager ou équivalent devant Portainer et n8n, forcer TLS (Let’s Encrypt).
  • Activer authentification forte (2FA si possible) sur Portainer et n8n.
  • Limiter l’accès par firewall/IP allowlist et utiliser des réseaux Docker internes pour Ollama.
  • Segmentation : Ne jamais exposer le socket Docker ou Ollama sans reverse-proxy/authentification.
Service Port Volume
Portainer 9000 portainer_data
Ollama 11434 ollama_data
n8n 5678 n8n_data
Vérification post-deploiement 1) Accéder à Portainer: http://your-host:9000 et s’authentifier.
2) Tester Ollama: exécuter le curl ci-dessus et vérifier la réponse JSON.
3) Déployer le workflow n8n: déclencher via le webhook et suivre les executions.
4) Vérifier logs & redémarrages: docker-compose ps, docker logs pour erreurs.

Prêt à lancer votre hub d’IA privé chez vous ?

Vous disposez maintenant d’une feuille de route claire pour construire un Self-Hosted AI hub : préparer un Ubuntu Server LTS, installer Docker/Docker Compose, gérer les containers avec Portainer, exécuter Ollama pour les modèles LLM et orchestrer les workflows via n8n. Ce montage vous donne confidentialité, contrôle et économies sur le long terme. En appliquant ces étapes vous transformez un mini-PC en une plateforme IA productive et sécurisée pour votre business.

FAQ

Quels sont les minimums matériels pour un hub IA local ?
Un mini-PC ou ancien desktop avec au minimum 8 Go de RAM, un SSD, CPU récent et une connexion Ethernet stable. Pour entraîner ou servir des modèles plus lourds, prévoyez 16-32 Go et GPU dédié.
Mes données restent-elles vraiment privées en local ?
Oui si vous gardez tout sur votre réseau local et n’autorisez pas d’export externe. Assurez-vous d’appliquer TLS pour accès distant, de limiter les accès et de chiffrer les sauvegardes. L’auto-hébergement supprime l’envoi automatique vers des API tierces.
Comment mettre à jour les modèles exécutés par Ollama ?
Les mises à jour dépendent d’Ollama et des images de modèles que vous avez téléchargées. Mettez à jour le container Ollama et redéployez les modèles compatibles. Sauvegardez les fichiers de configuration et suivez les notes de version d’Ollama pour compatibilité.
Comment sécuriser l’accès externe à Portainer et n8n ?
Placez Nginx Proxy Manager en frontal pour gérer TLS et domaines, activez authentification forte sur Portainer/n8n, restreignez les IP si possible et utilisez des réseaux Docker isolés. Activez la rotation des logs et les sauvegardes chiffrées.
Puis-je migrer ce hub vers le cloud plus tard ?
Oui. Concevez vos stacks en containers et persistance via volumes/objets pour faciliter la migration. Gardez des backups des volumes et exports de configuration Docker Compose pour répliquer l’environnement dans un cloud ou sur une VM distante.

 

 

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. Disponible pour aider les entreprises à déployer et sécuriser leur hub IA privé — contactez-moi.

Retour en haut
Vizyz