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 |
|
| Installer OpenSSH |
|
| Créer un utilisateur sudo non-root |
|
| Configurer la clé SSH pour l’utilisateur |
|
| Désactiver l’authentification par mot de passe (optionnel) |
|
Je recommande ces règles ufw pour limiter les accès tout en laissant les services essentiels disponibles.
| Règle | Commande |
| Autoriser SSH |
|
| Autoriser Portainer (exemple) |
|
| Autoriser n8n (exemple) |
|
| Activer ufw |
|
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 |
|
| Ajouter le dépôt Docker |
|
| Mettre à jour la liste des paquets |
|
| Installer Docker Engine et 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-worldet vérifier le message de succès. - Exécuter
docker compose versionpour confirmer la présence du plugin Compose. - Créer et lister un volume
docker volume create testvolpuisdocker volume lspour 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
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.
⭐ 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.






