Intermédiaire 11 minn8n

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.

Par Samir K.·Màj 2026-10-14·Testé sur Windows, macOS, Linux

#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

Le kit Agents Locaux

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.

i
Gratuit, mais pas open source
Pour un usage personnel ou interne, la distinction ne change rien en pratique. Elle compte si vous comptez revendre un service construit sur n8n, ou si votre entreprise exige une licence approuvée par l'OSI : dans ce cas, il faut lire la licence avant d'installer, pas après.

#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.
Terminal
docker --version
docker compose version

#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.

  1. 01
    Créer le dossier du projet
    Un 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.
  2. 02
    Générer la clé de chiffrement
    Avant 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.
  3. 03
    Écrire le docker-compose.yml
    Copiez 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.
  4. 04
    Démarrer
    docker 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.
  5. 05
    Créer le compte propriétaire
    Ouvrez 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.
Terminal
mkdir -p ~/n8n && cd ~/n8n

# Clé de chiffrement : 64 caractères hexadécimaux
echo "N8N_ENCRYPTION_KEY=$(openssl rand -hex 32)" > .env
chmod 600 .env
cat .env
docker-compose.yml
services:
  n8n:
    image: docker.n8n.io/n8nio/n8n:latest
    container_name: n8n
    restart: unless-stopped
    ports:
      - "127.0.0.1:5678:5678"
    environment:
      - N8N_ENCRYPTION_KEY=${N8N_ENCRYPTION_KEY}
      - GENERIC_TIMEZONE=Europe/Paris
      - TZ=Europe/Paris
      - N8N_RUNNERS_ENABLED=true
      - N8N_DIAGNOSTICS_ENABLED=false
      - EXECUTIONS_DATA_PRUNE=true
      - EXECUTIONS_DATA_MAX_AGE=336
    volumes:
      - n8n_data:/home/node/.n8n
      - ./local-files:/files

volumes:
  n8n_data:
Terminal
docker compose up -d
docker compose logs -f n8n   # Ctrl+C pour quitter les journaux

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.

→
Accès depuis une autre machine du réseau local
Le fichier publie le port sur 127.0.0.1 : seule la machine qui héberge n8n peut y accéder. Pour ouvrir à votre réseau local, remplacez par "5678:5678" et ajoutez N8N_SECURE_COOKIE=false aux variables, sinon n8n refuse la connexion en HTTP depuis une adresse autre que localhost avec un message explicite sur le cookie sécurisé. Cette variable ne doit jamais rester en place sur une instance exposée à Internet : utilisez la section HTTPS.

#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.
!
Clé définie après un premier démarrage sans elle
Si vous avez déjà lancé n8n sans N8N_ENCRYPTION_KEY, le conteneur contient une clé générée automatiquement. Définir ensuite une valeur différente dans .env déclenche une erreur au démarrage ou rend les identifiants illisibles. Dans ce cas, récupérez la clé existante avec docker exec n8n cat /home/node/.n8n/config et reportez cette valeur dans .env, plutôt que d'en générer une nouvelle.

#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.

Sauvegarde du volume complet
cd ~/n8n
mkdir -p backups
docker compose stop n8n
docker run --rm \
  -v n8n_data:/data:ro \
  -v "$PWD/backups":/backup \
  alpine tar czf "/backup/n8n_data-$(date +%F).tgz" -C /data .
docker compose start n8n
ls -lh backups/
Export JSON par la CLI n8n
# Un fichier par workflow, puis un par identifiant, dans le volume
docker exec n8n n8n export:workflow --backup --output=/home/node/.n8n/exports/workflows/
docker exec n8n n8n export:credentials --backup --output=/home/node/.n8n/exports/credentials/

# Récupérer les exports sur la machine hôte
docker cp n8n:/home/node/.n8n/exports ./backups/exports-$(date +%F)

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.

i
SQLite ou PostgreSQL ?
SQLite est la base par défaut et suffit pour une instance personnelle ou une petite équipe. La documentation n8n recommande PostgreSQL pour la production, en particulier dès que plusieurs workflows tournent en parallèle ou que vous envisagez le mode file d'attente. Le passage se fait par les variables DB_TYPE=postgresdb et DB_POSTGRESDB_*, avec un service postgres ajouté au fichier Compose. La migration de SQLite vers PostgreSQL passe par l'export et l'import CLI décrits ci-dessus.

#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.

Terminal
cd ~/n8n

# 1. Sauvegarde avant toute mise à jour (voir section précédente)

# 2. Mise à jour
docker compose pull
docker compose down
docker compose up -d

# 3. Contrôle
docker compose logs --tail=50 n8n
docker exec n8n n8n --version

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.

docker-compose.yml (version figée, exemple de forme)
services:
  n8n:
    # Remplacez par un numéro lu sur la page des releases
    image: docker.n8n.io/n8nio/n8n:1.XX.Y
→
Revenir en arrière
Si une version pose problème, remettez l'étiquette précédente dans le fichier Compose et relancez docker compose up -d. Cela fonctionne tant que la nouvelle version n'a pas migré le schéma de la base ; dans le cas contraire, restaurez la sauvegarde faite avant la mise à jour. C'est la raison de l'étape 1.

#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.

docker-compose.yml (avec Caddy)
services:
  n8n:
    image: docker.n8n.io/n8nio/n8n:latest
    container_name: n8n
    restart: unless-stopped
    environment:
      - N8N_ENCRYPTION_KEY=${N8N_ENCRYPTION_KEY}
      - N8N_HOST=n8n.votre-domaine.fr
      - N8N_PORT=5678
      - N8N_PROTOCOL=https
      - WEBHOOK_URL=https://n8n.votre-domaine.fr/
      - GENERIC_TIMEZONE=Europe/Paris
      - TZ=Europe/Paris
      - N8N_RUNNERS_ENABLED=true
      - N8N_DIAGNOSTICS_ENABLED=false
      - EXECUTIONS_DATA_PRUNE=true
      - EXECUTIONS_DATA_MAX_AGE=336
    volumes:
      - n8n_data:/home/node/.n8n

  caddy:
    image: caddy:2
    container_name: caddy
    restart: unless-stopped
    ports:
      - "80:80"
      - "443:443"
    volumes:
      - ./Caddyfile:/etc/caddy/Caddyfile:ro
      - caddy_data:/data
      - caddy_config:/config

volumes:
  n8n_data:
  caddy_data:
  caddy_config:
Caddyfile
n8n.votre-domaine.fr {
    reverse_proxy n8n:5678
}

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.

!
Ce qu'une exposition publique implique
Une instance n8n joignable depuis Internet est une cible : elle détient vos identifiants d'intégration et peut exécuter du code. Mot de passe long et unique sur le compte propriétaire, authentification à deux facteurs activée dans les réglages, mises à jour appliquées rapidement, et aucun accès HTTP résiduel. Si vous n'avez pas besoin de webhooks publics, le VPN reste préférable. Les principes détaillés dans notre guide sur la sécurisation d'un serveur Ollama s'appliquent de la même manière à n8n.

#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.
Commandes utiles
docker compose ps                     # état du conteneur
docker compose logs --tail=100 n8n   # dernières lignes du journal
docker exec n8n n8n --version         # version installée
docker volume inspect n8n_n8n_data    # emplacement réel du volume (préfixe = nom du dossier)
docker compose restart n8n            # redémarrage simple

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
Ce guide vous a aidé ?

Un retour, une erreur, une précision ? Faites-nous signe, ça améliore le guide pour tout le monde.