n8n avec Docker : installer et auto-héberger gratuitement
n8n avec Docker, c'est la façon la plus courte d'obtenir une instance d'automatisation auto-hébergée qui survit aux redémarrages et aux mises à jour. Ce guide s'arrête volontairement au socle : un fichier Docker Compose, un volume pour les données, une clé de chiffrement que vous contrôlez, une procédure de sauvegarde et de mise à jour, puis une exposition HTTPS prudente. Les nodes IA et le branchement sur Ollama sont traités dans un guide séparé ; ici, l'objectif est une installation propre que vous n'aurez pas à refaire.
#Pourquoi installer n8n avec Docker plutôt qu'avec npm
n8n est une application Node.js. On peut la lancer avec npm ou npx, et la documentation le propose pour un essai rapide. Pour une instance qui tourne en continu, l'image Docker officielle est la voie recommandée par le projet : elle embarque la bonne version de Node.js, isole n8n du reste de la machine, et rend la mise à jour aussi simple qu'un changement d'image. C'est aussi le format dans lequel la documentation d'hébergement de n8n décrit tous ses exemples de serveur.
Le second avantage est la reproductibilité. Un fichier docker-compose.yml décrit l'intégralité de la configuration : image, port, variables d'environnement, volume de données. Vous pouvez le versionner, le copier sur une autre machine ou le relire dans six mois pour savoir exactement ce qui tourne. Avec une installation npm, cette information est dispersée entre le système, le profil utilisateur et le gestionnaire de services.
- Ce que couvre ce guide
- Installation locale ou sur un petit serveur, persistance des données, clé de chiffrement, sauvegarde, mise à jour, accès HTTPS.
- Ce qu'il ne couvre pas
- Les nodes IA de n8n, la connexion à Ollama, le serveur MCP et la mise à l'échelle en mode file d'attente. Les deux premiers points ont leur propre guide, lié en fin d'article.
- Ce que nous n'affirmons pas
- Aucune durée d'installation, aucune consommation mesurée, aucun numéro de version figé. Ces valeurs changent d'une release à l'autre et se lisent dans les sources officielles au moment où vous installez.
#Licence et limites de la version communautaire
Des agents qui agissent sur ta machine : Cline agentique, MCP, n8n + Ollama, automatisations locales.
- Espace en ligne à vie
- PDF + fichiers
- Mises à jour à vie
n8n n'est pas sous licence open source au sens de l'OSI. Le code est publié sous la Sustainable Use License, un modèle que l'éditeur appelle « fair-code ». Dans les grandes lignes, vous pouvez utiliser, modifier et héberger n8n librement pour vos besoins internes, personnels ou ceux de votre entreprise. Ce qui est restreint, c'est la revente : proposer n8n comme service hébergé à des tiers, ou l'intégrer dans un produit commercial, demande un accord avec l'éditeur. Le texte complet et sa FAQ sont sur docs.n8n.io/sustainable-use-license/ ; lisez-les si votre usage dépasse l'automatisation interne.
La version que vous installez avec Docker est l'édition communautaire. Elle contient l'éditeur complet, les centaines de nodes d'intégration, les webhooks, les déclencheurs planifiés, les nodes IA et la gestion des utilisateurs. Certaines fonctions sont réservées aux offres payantes auto-hébergées : l'authentification unique (SSO), les environnements avec synchronisation Git, les secrets externes, l'envoi de journaux vers un outil externe et une partie des fonctions de collaboration. L'éditeur propose par ailleurs une clé gratuite dite « communauté enregistrée », obtenue en indiquant une adresse e-mail dans les réglages, qui débloque quelques fonctions supplémentaires. La liste exacte évolue : la page docs.n8n.io/hosting/community-edition-features/ fait foi.
#Prérequis
- Docker et Docker Compose
- Docker Engine avec le plugin Compose sous Linux, ou Docker Desktop sous Windows et macOS. Vérifiez avec docker compose version : la commande doit répondre avec un numéro de version, en deux mots (docker compose), pas avec le tiret de l'ancien outil.
- Une machine qui reste allumée
- n8n exécute vos workflows à l'heure prévue ou à la réception d'un webhook. Un PC qui s'éteint le soir ne verra pas les déclenchements de la nuit. Un mini-PC, un NAS compatible Docker ou un petit VPS conviennent ; les besoins en mémoire restent modestes pour quelques workflows simples.
- Un port libre
- n8n écoute sur le port 5678 à l'intérieur du conteneur. Nous le publions sur le même numéro côté hôte ; changez-le si un autre service l'occupe déjà.
- Pour l'étape HTTPS seulement
- Un nom de domaine qui pointe vers la machine, et les ports 80 et 443 joignables depuis Internet. Sans cela, restez sur l'accès local ou passez par un VPN : la section HTTPS détaille les deux options.
#Installer n8n avec Docker Compose pas à pas
La documentation n8n donne d'abord une commande docker run en une ligne, utile pour un essai. Nous passons directement par Compose : le fichier est à peine plus long et il devient la référence de votre installation. Toutes les valeurs ci-dessous sont celles documentées par n8n ; seules les valeurs de fuseau horaire et de port sont des choix de ce guide.
- 01Créer le dossier du projetUn dossier dédié contient le fichier Compose, le fichier .env et, plus tard, vos sauvegardes. Les données de n8n elles-mêmes iront dans un volume Docker nommé, pas dans ce dossier.
- 02Générer la clé de chiffrementAvant le premier démarrage, générez une clé aléatoire et placez-la dans le fichier .env. La section suivante explique pourquoi cet ordre compte.
- 03Écrire le docker-compose.ymlCopiez le fichier ci-dessous. Il publie n8n sur le port 5678 de la machine, limité à l'adresse locale 127.0.0.1, et monte le volume n8n_data sur le dossier /home/node/.n8n du conteneur, qui est l'emplacement où n8n stocke sa base SQLite, sa configuration et ses fichiers.
- 04Démarrerdocker compose up -d télécharge l'image et lance le conteneur en arrière-plan. La première exécution prend le temps du téléchargement de l'image ; les suivantes sont immédiates.
- 05Créer le compte propriétaireOuvrez http://localhost:5678 dans un navigateur. n8n demande de créer le premier compte, qui devient propriétaire de l'instance. Depuis la version 1.0, c'est ce compte qui protège l'accès ; l'ancienne authentification basique par variables d'environnement n'existe plus.
Quelques explications sur les variables. GENERIC_TIMEZONE fixe le fuseau utilisé par le node Schedule Trigger et par les expressions de date ; TZ aligne l'horloge du système dans le conteneur. N8N_RUNNERS_ENABLED active les task runners, le mécanisme qui exécute le code des nodes Code dans un processus séparé ; la documentation le recommande et les versions récentes affichent un avertissement s'il est absent. N8N_DIAGNOSTICS_ENABLED=false coupe l'envoi de données de télémétrie à l'éditeur. Les deux variables EXECUTIONS_DATA_* demandent à n8n de purger l'historique des exécutions au-delà de 336 heures, soit quatorze jours, pour éviter que la base ne grossisse indéfiniment.
Le montage ./local-files:/files est optionnel. Il donne à n8n un dossier partagé avec la machine hôte, pratique pour les nodes qui lisent ou écrivent des fichiers. Supprimez la ligne si vous n'en avez pas l'usage.
#La clé de chiffrement : la variable qu'il ne faut pas perdre
n8n chiffre tous les identifiants que vous enregistrez dans l'interface, c'est-à-dire les jetons d'API, mots de passe et clés OAuth de vos intégrations. La clé de chiffrement utilisée est N8N_ENCRYPTION_KEY. Si vous ne la définissez pas, n8n en génère une au premier démarrage et l'écrit dans le fichier config du dossier /home/node/.n8n, donc dans le volume. Cela fonctionne, mais la clé vit alors uniquement dans ce volume : si vous le perdez, ou si vous recréez l'instance sans lui, chaque identifiant devient illisible et doit être ressaisi.
C'est pourquoi ce guide fixe la clé dans le fichier .env avant le premier lancement. Elle reste sous votre contrôle, se sauvegarde avec le fichier Compose et permet de restaurer la base sur une autre machine sans perdre les identifiants. Deux règles en découlent.
- Ne changez jamais la clé après coup
- Une clé différente de celle qui a servi à chiffrer rend tous les identifiants existants inutilisables. Si vous devez la remplacer, exportez d'abord vos identifiants déchiffrés avec la commande export:credentials, puis réimportez-les après le changement.
- Sauvegardez le fichier .env à part
- Rangez une copie de la clé dans votre gestionnaire de mots de passe. Une sauvegarde du volume sans la clé ne vaut rien pour les identifiants, même si les workflows restent lisibles.
#Persistance et sauvegarde des données
Tout ce que n8n doit conserver vit dans /home/node/.n8n : la base SQLite qui contient workflows, identifiants chiffrés et historique des exécutions, le fichier config, les nodes communautaires installés et les fichiers binaires en mode stockage disque. Le volume nommé n8n_data survit à docker compose down et à la suppression du conteneur. Il ne survit pas à docker compose down -v, ni à docker volume rm : ces deux commandes effacent les données.
Pour une sauvegarde, deux approches se complètent. La première archive le volume entier : on arrête n8n le temps de copier les fichiers, pour éviter de capturer une base SQLite en cours d'écriture. La seconde utilise l'outil en ligne de commande de n8n pour exporter les workflows et les identifiants en JSON, lisibles et réimportables individuellement.
L'option --backup des commandes d'export regroupe les options qui produisent un fichier par élément, au format lisible. Les identifiants exportés restent chiffrés avec votre clé, sauf si vous ajoutez --decrypted ; dans ce cas, traitez le fichier comme un secret. Pour restaurer, les commandes import:workflow et import:credentials acceptent le même dossier avec l'option --separate. La référence complète de la CLI se trouve sur docs.n8n.io/hosting/cli-commands/.
Pour une restauration complète sur une autre machine : recréez le dossier avec le même docker-compose.yml et le même .env, créez le volume vide avec docker compose up -d puis docker compose stop, décompressez l'archive dans le volume avec la commande inverse de la sauvegarde, et redémarrez. La même clé de chiffrement est la condition pour retrouver les identifiants.
#Mettre à jour n8n sans casser l'instance
n8n publie des versions fréquentes. L'étiquette latest de l'image pointe sur la dernière version stable, l'étiquette next sur la version de test ; les étiquettes numérotées permettent de figer une version précise. Avec Compose, la mise à jour tient en trois commandes : récupérer la nouvelle image, arrêter l'ancien conteneur, en recréer un avec la même configuration. Les données restent dans le volume et ne sont pas touchées. Les migrations de schéma de base, quand il y en a, se font automatiquement au démarrage.
Trois précautions évitent l'essentiel des mauvaises surprises. Sauvegardez avant : une migration de base ne se rejoue pas en arrière. Lisez les notes de version sur github.com/n8n-io/n8n/releases et la page de mise à jour de la documentation, docs.n8n.io/hosting/installation/updating/ : les versions majeures retirent des variables d'environnement ou changent des comportements par défaut, et la documentation tient une page dédiée aux changements cassants. Enfin, si l'instance est importante pour vous, préférez une étiquette numérotée à latest : vous choisissez le moment de la montée de version au lieu de la subir au prochain pull.
#Exposer n8n en HTTPS, prudemment
Tant que vous utilisez n8n depuis la machine qui l'héberge ou depuis votre réseau local, l'installation précédente suffit. Le besoin d'une exposition apparaît avec les webhooks : un service tiers qui doit appeler votre instance, ou un accès depuis l'extérieur. Deux voies existent, et la première est souvent la bonne.
- Un VPN plutôt qu'une exposition
- Tailscale, WireGuard ou le VPN de votre routeur donnent accès à n8n depuis n'importe où sans ouvrir de port sur Internet. Pour un usage personnel sans webhook public, c'est la solution la plus sûre et la plus simple. L'instance reste en HTTP sur le réseau privé, et N8N_SECURE_COOKIE=false devient nécessaire si vous y accédez par l'adresse VPN.
- Un reverse proxy avec certificat
- Pour recevoir des webhooks publics, il faut un nom de domaine, un reverse proxy qui termine le TLS et un certificat. L'exemple officiel de n8n utilise Traefik ; nous montrons Caddy, dont la configuration tient en trois lignes et qui obtient les certificats Let's Encrypt seul.
Dans la configuration ci-dessous, n8n ne publie plus aucun port : seul Caddy est joignable, sur 80 et 443, et il transmet au conteneur n8n par le réseau interne de Compose. Les variables N8N_HOST, N8N_PROTOCOL et WEBHOOK_URL indiquent à n8n l'adresse publique sous laquelle il est servi ; sans elles, les URL de webhook affichées dans l'éditeur pointeraient vers localhost et les redirections OAuth échoueraient.
Avant de lancer docker compose up -d, l'enregistrement DNS de n8n.votre-domaine.fr doit pointer vers l'adresse publique de la machine et les ports 80 et 443 doivent être redirigés vers elle. Caddy demande alors un certificat à Let's Encrypt et le renouvelle sans intervention. Les volumes caddy_data et caddy_config conservent certificats et état entre les redémarrages.
#Dépannage : les blocages fréquents
- Message sur le cookie sécurisé à l'ouverture
- Vous accédez à n8n en HTTP depuis une adresse qui n'est pas localhost. Soit vous passez en HTTPS, soit vous ajoutez N8N_SECURE_COOKIE=false, uniquement sur un réseau privé.
- Erreur de permission sur /home/node/.n8n
- Le conteneur tourne avec l'utilisateur node, et non root. Cela arrive quand on remplace le volume nommé par un dossier de l'hôte dont les droits ne correspondent pas. Gardez le volume nommé, ou alignez le propriétaire du dossier sur l'identifiant utilisateur 1000, celui de node dans l'image.
- Les workflows planifiés tournent à la mauvaise heure
- GENERIC_TIMEZONE est absent ou mal orthographié. La valeur attendue est un nom de fuseau IANA comme Europe/Paris. Chaque workflow peut aussi fixer son propre fuseau dans ses réglages.
- Les webhooks affichent une adresse localhost
- WEBHOOK_URL n'est pas défini, ou ne correspond pas à l'adresse par laquelle le service tiers vous joint. La valeur doit se terminer par une barre oblique et inclure le protocole.
- La base grossit sans fin
- La purge des exécutions est désactivée ou trop longue. Vérifiez EXECUTIONS_DATA_PRUNE et EXECUTIONS_DATA_MAX_AGE, et pensez aussi à l'option qui conserve les données des exécutions réussies, désactivable workflow par workflow.
- Après une mise à jour, n8n refuse de démarrer
- Lisez le journal avec docker compose logs n8n : le message indique généralement une variable retirée ou une migration échouée. Comparez avec les notes de version, puis restaurez la sauvegarde si nécessaire.
- n8n ne voit pas Ollama sur la même machine
- Depuis un conteneur, localhost désigne le conteneur lui-même, pas l'hôte. L'adresse à utiliser dépend du système et de la façon dont Ollama est lancé ; c'est l'objet du guide n8n et Ollama cité ci-dessous.
Pour les questions qui ne trouvent pas de réponse dans la documentation, le forum community.n8n.io est actif et l'éditeur y répond. Indiquez la version exacte, le mode d'installation et les lignes de journal : ce sont les trois premières choses demandées.
#Pour aller plus loin
L'instance est en place, sauvegardée et à jour. La suite logique est de la brancher sur un modèle local, puis de l'intégrer à une stack plus large. Sources officielles consultées pour ce guide : la section hébergement de la documentation n8n (docs.n8n.io/hosting/), la page d'installation Docker (docs.n8n.io/hosting/installation/docker/), la page de mise à jour, la page sur la licence et celle sur les fonctions de l'édition communautaire. Ces pages évoluent avec les versions : en cas de divergence avec ce guide, elles font foi.
- n8n + Ollama : automatiser avec une IA 100 % locale
- Le guide qui prend le relais : nodes IA, connexion à Ollama depuis le conteneur, premiers workflows de traduction et de résumé. https://quelllm.fr/guide/n8n-ollama-automatisation-workflow
- Ollama avec Docker
- Si vous voulez aussi faire tourner Ollama en conteneur, à côté de n8n, avec l'accès au GPU. https://quelllm.fr/guide/ollama-docker-installation-guide
- Déployer un LLM en production avec Docker Compose
- La stack complète Ollama, Open WebUI, Qdrant, n8n et Traefik dans un seul fichier Compose, pour aller au-delà de l'instance isolée. https://quelllm.fr/guide/deployer-llm-docker-compose-production
- Sécuriser son serveur Ollama
- Authentification, pare-feu, reverse proxy : les règles d'exposition valent pour tout service auto-hébergé, n8n compris. https://quelllm.fr/guide/securiser-serveur-ollama
Un retour, une erreur, une précision ? Faites-nous signe, ça améliore le guide pour tout le monde.