Migrer vers n8n 2.0 sans casser ses workflows : guide Docker
Plan de l'article
💡 En résumé (TL;DR)
- n8n 2.0 renforce la sécurité et la stabilité, mais modifie certains comportements qui peuvent interrompre des workflows existants.
- Lancez le Migration Report avant la mise à jour : il détecte les workflows et paramètres nécessitant une intervention.
- Sauvegardez PostgreSQL ou SQLite, le volume n8n et surtout
N8N_ENCRYPTION_KEYavant toute opération.- Les nœuds
ExecuteCommandetLocalFileTriggersont désactivés par défaut ; l'accès aux variables d'environnement et aux fichiers est plus restrictif.- Ne mettez jamais une instance métier à niveau avec l'image Docker
latestsans test. Épinglez une version exacte et préparez le retour arrière.
n8n 2.0 ne doit pas être traité comme une mise à jour mineure. Cette version consolide l'exécution du code, la gestion des fichiers, la publication des workflows et plusieurs réglages historiques. Les changements améliorent la sécurité, mais peuvent casser une automatisation qui dépendait d'un ancien comportement permissif.
Ce guide propose une migration contrôlée pour une instance n8n auto-hébergée avec Docker. Si vous débutez, commencez par notre guide complet n8n pour PME. Si vous venez de Zapier, utilisez plutôt notre méthode pour migrer de Zapier vers n8n.
Pourquoi n8n 2.0 demande une préparation ?
n8n présente la version 2.0 comme une évolution centrée sur la sécurité, la fiabilité et les performances. Les principaux effets visibles pour une instance existante sont :
- exécution du code davantage isolée par les task runners ;
- accès aux variables d'environnement bloqué par défaut dans certains nœuds ;
- restriction de l'accès au système de fichiers ;
- désactivation par défaut de nœuds capables d'exécuter des commandes ou de surveiller des fichiers locaux ;
- suppression de fonctions et modes de stockage hérités ;
- séparation plus nette entre sauvegarder un brouillon et publier une version active ;
- corrections de comportement des sous-workflows et des exécutions longues.
Un workflow simple Gmail → Google Sheets peut continuer à fonctionner sans changement. Un workflow avec scripts, commandes système, fichiers montés, variables process.env ou sous-workflows doit être considéré à risque jusqu'à validation.
Étape 1 — Inventorier l'instance
Avant de toucher à Docker, documentez :
| Élément | Information à conserver |
|---|---|
| Version n8n | Version exacte, pas seulement « 1.x » |
| Base de données | PostgreSQL ou SQLite, version et emplacement |
| Stockage binaire | Mode utilisé et volumes montés |
| Chiffrement | Présence et sauvegarde de N8N_ENCRYPTION_KEY |
| Reverse proxy | Domaine, HTTPS, en-têtes et WEBHOOK_URL |
| Code | Nœuds Code JavaScript/Python et modules externes |
| Système | Execute Command, fichiers locaux, scripts et binaires |
| Intégrations | OAuth, webhooks entrants et adresses IP autorisées |
| Criticité | Fréquence, propriétaire et impact d'un arrêt |
Exportez aussi la liste des workflows et identifiez ceux qui facturent, suppriment des données, créent des commandes ou contactent des clients.
Étape 2 — Utiliser le rapport de migration n8n 2.0
n8n fournit un outil de migration qui analyse l'instance et signale les problèmes de compatibilité et de configuration. Exécutez-le depuis une version 1.x prise en charge avant la bascule.
Le rapport ne remplace pas les tests. Il permet de trouver plus vite :
- les nœuds désactivés en 2.0 ;
- les anciens déclencheurs ;
- les accès à l'environnement ou au système de fichiers ;
- les configurations supprimées ou renommées ;
- les workflows qui nécessitent une publication explicite ;
- les composants communautaires à vérifier.
Traitez les alertes selon trois niveaux :
- Bloquant : corriger avant la mise à niveau.
- Risque métier : tester avec un jeu de données contrôlé.
- Amélioration : planifier après stabilisation.
Conservez une copie du rapport avec la date et la version analysée.
Étape 3 — Sauvegarder ce qui permet réellement de restaurer
Un export JSON des workflows ne suffit pas. Il ne restaure pas nécessairement les credentials, utilisateurs, historiques et configurations.
Sauvegarde PostgreSQL
Adaptez les noms du conteneur et de la base :
docker exec n8n-postgres pg_dump -U n8n -d n8n -Fc > n8n-pre-v2.dump
Le fichier doit être copié hors du serveur et testé par une restauration dans une base temporaire.
Sauvegarde des volumes
Sauvegardez le volume /home/node/.n8n et les répertoires métiers montés. La commande dépend de votre plateforme ; l'objectif est d'obtenir une archive lisible hors du conteneur, pas un instantané dont personne ne connaît la procédure de restauration.
Clé de chiffrement
Sans la valeur exacte de N8N_ENCRYPTION_KEY, les credentials chiffrés peuvent devenir inutilisables après restauration. Stockez cette clé dans un gestionnaire de secrets, séparée de l'archive de la base.
Test de restauration
Une sauvegarde est validée uniquement si vous pouvez :
- lancer une instance isolée ;
- restaurer la base et les volumes ;
- ouvrir les workflows ;
- déchiffrer les credentials ;
- exécuter un workflow de test sans contacter la production.
Étape 4 — Corriger les changements les plus cassants
ExecuteCommand et LocalFileTrigger
Ces nœuds sont désactivés par défaut pour réduire le risque d'exécution arbitraire et d'accès au système de fichiers.
Ne les réactivez pas globalement par réflexe. Pour chaque workflow :
- remplacez une commande par une API lorsque possible ;
- placez le traitement dans un microservice isolé ;
- limitez l'utilisateur Linux et les volumes visibles ;
- journalisez la commande et ses paramètres ;
- réactivez uniquement ce qui est indispensable.
Variables d'environnement dans le nœud Code
Un script utilisant process.env.MA_CLE peut ne plus fonctionner. Déplacez les secrets vers les credentials n8n ou une méthode explicitement prise en charge. Les données non sensibles peuvent être passées en entrée du workflow.
Accès aux fichiers
Montez un répertoire dédié, par exemple /files, et configurez la restriction d'accès pour empêcher un workflow de parcourir l'hôte. Vérifiez les chemins absolus : un montage Docker différent entre test et production est une source classique d'échec.
Task runners
Les nœuds Code utilisent des runners isolés. Pour un mode externe, le conteneur principal et le conteneur runner doivent partager un réseau, un jeton d'authentification et une URI de broker cohérents.
Exemple de structure à adapter, sans secrets en clair :
services:
n8n:
image: docker.n8n.io/n8nio/n8n:2.0.0
restart: unless-stopped
environment:
N8N_RUNNERS_ENABLED: "true"
N8N_RUNNERS_MODE: external
N8N_RUNNERS_BROKER_LISTEN_ADDRESS: 0.0.0.0
N8N_RUNNERS_AUTH_TOKEN: ${N8N_RUNNERS_AUTH_TOKEN}
networks: [n8n_net]
runners:
image: n8nio/runners:2.0.0
restart: unless-stopped
environment:
N8N_RUNNERS_MODE: external
N8N_RUNNERS_TASK_BROKER_URI: http://n8n:5679
N8N_RUNNERS_AUTH_TOKEN: ${N8N_RUNNERS_AUTH_TOKEN}
N8N_RUNNERS_ENABLED_TASK_TYPES: javascript,python
networks: [n8n_net]
networks:
n8n_net:
Vérifiez les exemples correspondant à votre version dans la documentation n8n ; les variables peuvent évoluer.
Étape 5 — Cloner une préproduction fidèle
La préproduction doit reproduire :
- même moteur et version de base de données ;
- mêmes montages, mais données isolées ;
- même reverse proxy et mêmes en-têtes ;
- mêmes nœuds communautaires ;
- même mode de runners ;
- mêmes limites de mémoire et de CPU.
Neutralisez les actions irréversibles :
- emails vers une boîte de test ;
- paiements en sandbox ;
- CRM de test ;
- webhooks avec URL différente ;
- suppression remplacée par un journal.
Importez une copie récente des workflows, puis mettez la copie à niveau.
Étape 6 — Épingler les images Docker
Évitez :
image: docker.n8n.io/n8nio/n8n:latest
Préférez une version exacte validée :
image: docker.n8n.io/n8nio/n8n:2.0.0
Après validation, vous pourrez passer vers un correctif 2.0.x ou 2.x précis. L'épinglage garantit qu'un redémarrage ne télécharge pas silencieusement une version différente.
Avant la mise à niveau :
docker compose config
docker compose pull
docker compose up -d
docker compose logs --tail=200 n8n
Ne lancez pas ces commandes sans avoir vérifié le répertoire, le fichier Compose, les sauvegardes et la procédure de retour arrière.
Étape 7 — Construire une matrice de tests
| Test | Résultat attendu |
|---|---|
| Webhook entrant | Réponse, authentification et délai identiques |
| OAuth | Connexion toujours valide ou reconnexion documentée |
| Code JS/Python | Résultat identique et absence de timeout runner |
| Fichier | Lecture/écriture limitée au volume autorisé |
| Sous-workflow | Données finales correctement renvoyées |
| Wait | Reprise après le délai ou le webhook |
| Erreur | Alerte envoyée et exécution visible |
| Doublon | Relance sans créer deux commandes ou factures |
| Charge | Temps et mémoire acceptables au volume normal |
Testez au moins une exécution réussie, une donnée vide, une erreur API, un timeout et une relance pour chaque workflow critique.
Étape 8 — Basculer et surveiller
- Geler les modifications de workflows.
- Réaliser une sauvegarde finale.
- Mettre en pause les déclencheurs externes si nécessaire.
- Déployer la version validée.
- Vérifier santé, base, runners et files d'exécution.
- Réactiver par groupes de workflows.
- Surveiller erreurs, latence, doublons et webhooks pendant 24 à 72 heures.
Le retour arrière doit préciser la version Docker précédente, la base à restaurer, les volumes concernés et la manière de rejouer les événements reçus pendant l'interruption.
FAQ migration n8n 2.0
Peut-on mettre n8n 1.x à niveau directement vers 2.0 ?
Oui si la version de départ et la configuration sont prises en charge, mais il faut d'abord lire les changements cassants, exécuter le rapport de migration et tester une copie.
Le rapport de migration garantit-il que tout fonctionnera ?
Non. Il détecte de nombreux risques connus, mais ne peut pas valider la logique métier, les API externes, les données réelles et les nœuds communautaires.
Pourquoi ExecuteCommand a-t-il disparu ?
Il est désactivé par défaut en raison de son risque de sécurité. Il peut être réactivé explicitement, mais un service isolé ou une API est souvent préférable.
Faut-il passer de SQLite à PostgreSQL ?
Pour un usage professionnel soutenu, PostgreSQL est généralement plus adapté. La décision dépend du volume et de l'architecture ; migrez la base dans une opération séparée si possible.
Peut-on revenir à n8n 1.x après la migration ?
Uniquement avec un plan testé et une sauvegarde compatible de la base et des volumes. Ne supposez pas qu'il suffit de changer le tag Docker après une migration de schéma.
Sources officielles consultées
- n8n — Changements cassants de la version 2.0
- n8n — Outil de migration 2.0
- n8n — Notes de version 2.x
- n8n — Installation avec Docker
Dernière vérification des informations : 30 août 2026.