[{"data":1,"prerenderedAt":160},["ShallowReactive",2],{"seo-verification":3,"blog-n8n-migration-npm-docker-avant-v3-fr":6},{"google":4,"bing":5},"EycwPY2XMyTkVzas3n1ygeNJFGAH513qrMjfDljzsMQ","",{"key":7,"data":8},"blog-n8n-migration-npm-docker-avant-v3-fr",{"id":9,"slug":10,"slugs":11,"title":15,"excerpt":16,"readTime":17,"views":18,"isPinned":19,"publishedAt":20,"category":21,"categories":26,"featuredImage":28,"bgImage":29,"posterImage":30,"relatedSolution":31,"intro":33,"sections":34,"ctaTitle":109,"ctaBody":110,"ctaButton":111,"ctaUrl":112,"relatedPosts":113},344,"n8n-migration-npm-docker-avant-v3",{"fr":10,"en":12,"ar":13,"es":14},"n8n-migration-npm-to-docker-before-v3","n8n-migration-npm-to-docker-before-v3-ar","n8n-migracion-npm-docker-antes-v3","n8n 3.0 : migrer de npm vers Docker avant octobre 2026","n8n 3.0 retire npm et npx en octobre 2026. Détectez votre mode, exportez vos workflows et basculez sur Docker Compose avec PostgreSQL avant l'échéance.",8,0,false,"2026-09-09T00:00:00+00:00",{"id":22,"name":23,"slug":24,"color":25,"icon":24},2,"Automatisation","automatisation","bg-brand-action\u002F10 text-brand-action",[27],{"id":22,"name":23,"slug":24,"color":25,"icon":24},null,"\u002Fblog\u002Fcovers\u002Fbg.svg","\u002Fblog\u002Fcovers\u002Fn8n-migration-npm-docker-avant-v3-poster.svg",{"categorySlug":24,"appSlug":32},"n8n","n8n 3.0 est prévu pour octobre 2026 et apporte un changement structurel : le support des installations npm et npx est supprimé. Seul Docker sera distribué. Si votre instance tourne encore avec `npx n8n` ou un package global npm, la migration doit avoir lieu avant cette date — non pas parce que ça ne fonctionne plus aujourd'hui, mais parce qu'une migration planifiée est toujours plus sûre qu'une migration d'urgence un dimanche soir.",[35,39,48,51,60,63,91,95,98,106],{"type":36,"title":37,"body":38},"h2","Ce qui change avec n8n 3.0 et pourquoi agir maintenant","La documentation officielle des breaking changes de n8n 3.0 est sans ambiguïté : « Self-hosted n8n will require a Docker-based deployment. n8n 3.0 will no longer support installations run using `npm` or `npx n8n`. » Ce n'est pas un avertissement de dépréciation progressive — c'est une date butoir. En octobre 2026, toute instance lancée via `npx n8n` ou un package npm global ne pourra plus être mise à jour. Elle restera figée sur la dernière version 2.x, sans correctifs de sécurité.",{"type":40,"title":41,"items":42},"ul","Risques de reporter la migration à octobre",[43,44,45,46,47],"**Mise à jour sous pression** — migrer en urgence alors que des automatisations critiques tournent expose à des erreurs de configuration difficiles à diagnostiquer.","**Perte de données SQLite** — l'issue GitHub #22341 documente des cas où des conteneurs Docker mis à jour sans précautions ont provoqué une régression de la base : les workflows et exécutions « reviennent en arrière » vers l'état d'une ancienne sauvegarde.","**Absence de correctifs** — une instance npm figée en v2.x ne reçoit plus ni les patches de sécurité ni les correctifs de stabilité publiés pour la branche 3.x.","**Incompatibilité croissante** — les intégrations, nœuds communautaires et webhooks reposent sur des API qui évoluent ; rester sur une version morte crée une dette d'incompatibilité croissante.","**Durée imprévisible** — une migration bien préparée prend une heure ; une migration improvisée peut mobiliser une journée, pendant laquelle vos workflows sont arrêtés.",{"type":36,"title":49,"body":50},"Prérequis avant de commencer","Cette procédure s'adresse à une instance n8n existante en production. Si vous partez de zéro, consultez l'article dédié à l'installation initiale de n8n sur VPS.",{"type":40,"title":52,"items":53},"Ce dont vous avez besoin",[54,55,56,57,58,59],"**VPS avec accès root** — Ubuntu 22.04 ou Debian 12 recommandés, minimum 2 vCPU et 2 Go de RAM pour n8n seul, 4 Go si vous ajoutez PostgreSQL sur le même hôte.","**Docker Engine et Docker Compose v2** — vérifiez avec `docker --version` et `docker compose version` (syntaxe sans tiret, plugin v2).","**PostgreSQL recommandé** — n8n supporte SQLite et PostgreSQL, mais SQLite sur Docker présente des risques de perte de données en cas de mise à jour mal gérée (cf. issue #22341) ; PostgreSQL est la cible pour toute instance qui compte.","**Accès à l'instance npm actuelle** — la migration exige d'exporter les workflows via l'API REST avant d'arrêter l'ancienne instance.","**Un nom de domaine et un certificat TLS** — n8n en production ne s'expose pas en HTTP brut ; Nginx fait office de reverse proxy avec Let's Encrypt.","**Une fenêtre de maintenance planifiée** — même courte, elle évite les pertes d'exécutions en cours.",{"type":36,"title":61,"body":62},"Détecter votre mode de lancement actuel","Avant toute chose, identifiez précisément comment votre instance n8n est lancée. La commande à utiliser dépend du mode de supervision.",{"type":64,"title":65,"steps":66},"steps","Détecter, exporter, déployer et valider",[67,70,73,76,79,82,85,88],{"title":68,"body":69},"Identifier le processus n8n","Cherchez l'exécutable en cours : `which n8n` indique le chemin si n8n est installé globalement via npm. Puis vérifiez si un service système le supervise : `systemctl status n8n` ou `systemctl status n8n.service`. Si aucun service systemd n'existe, cherchez un processus actif : `ps aux | grep n8n`. Un résultat contenant `node ...\u002Fn8n\u002Fbin\u002Fn8n` ou `npx n8n` confirme une installation npm.",{"title":71,"body":72},"Repérer le fichier de configuration et la base de données","Le répertoire de données par défaut est `~\u002F.n8n\u002F`. Vérifiez son contenu : `ls -la ~\u002F.n8n\u002F`. Le fichier `database.sqlite` indique une base SQLite. Notez le chemin complet — vous en aurez besoin pour l'export. Si la variable `N8N_USER_FOLDER` est définie dans l'environnement du processus (`cat \u002Fproc\u002F$(pgrep -f n8n)\u002Fenviron | tr '\\0' '\\n' | grep N8N`), c'est ce chemin qui prévaut.",{"title":74,"body":75},"Exporter tous vos workflows via l'API REST","L'API REST de n8n permet d'exporter les workflows en JSON. Récupérez d'abord une clé API dans l'interface (`Settings → API → Create API Key`), puis exportez : `curl -s -H 'X-N8N-API-KEY: VOTRE_CLE' http:\u002F\u002Flocalhost:5678\u002Fapi\u002Fv1\u002Fworkflows | python3 -m json.tool > workflows-export-$(date +%Y%m%d).json`. Vérifiez que le fichier contient bien vos workflows : `python3 -c \"import json; d=json.load(open('workflows-export-*.json')); print(len(d['data']), 'workflows exportés')\"`. Conservez ce fichier en lieu sûr avant toute opération.",{"title":77,"body":78},"Arrêter proprement l'instance npm","Si supervisé par systemd : `systemctl stop n8n && systemctl disable n8n`. Si lancé manuellement dans un terminal ou via un script de démarrage, identifiez le PID (`pgrep -f n8n`) puis `kill -SIGTERM \u003CPID>`. Attendez quelques secondes que n8n termine ses exécutions en cours avant de forcer l'arrêt. Une fois arrêté, notez ou sauvegardez `~\u002F.n8n\u002Fdatabase.sqlite` si vous souhaitez conserver les historiques d'exécution.",{"title":80,"body":81},"Créer le fichier docker-compose.yml avec PostgreSQL","Créez un répertoire dédié : `mkdir -p \u002Fopt\u002Fn8n && cd \u002Fopt\u002Fn8n`. Puis créez le fichier `docker-compose.yml` avec le contenu suivant — adaptez les mots de passe et le domaine :\n\n```yaml\nservices:\n  postgres:\n    image: postgres:16-alpine\n    restart: unless-stopped\n    environment:\n      POSTGRES_DB: n8n\n      POSTGRES_USER: n8n\n      POSTGRES_PASSWORD: CHANGEZ_CE_MOT_DE_PASSE\n    volumes:\n      - postgres_data:\u002Fvar\u002Flib\u002Fpostgresql\u002Fdata\n    healthcheck:\n      test: [\"CMD-SHELL\", \"pg_isready -U n8n\"]\n      interval: 10s\n      timeout: 5s\n      retries: 5\n\n  n8n:\n    image: n8nio\u002Fn8n:2.38.4\n    restart: unless-stopped\n    depends_on:\n      postgres:\n        condition: service_healthy\n    environment:\n      DB_TYPE: postgresdb\n      DB_POSTGRESDB_HOST: postgres\n      DB_POSTGRESDB_PORT: 5432\n      DB_POSTGRESDB_DATABASE: n8n\n      DB_POSTGRESDB_USER: n8n\n      DB_POSTGRESDB_PASSWORD: CHANGEZ_CE_MOT_DE_PASSE\n      N8N_HOST: votre-domaine.com\n      N8N_PORT: 5678\n      N8N_PROTOCOL: https\n      WEBHOOK_URL: https:\u002F\u002Fvotre-domaine.com\u002F\n      N8N_BASIC_AUTH_ACTIVE: \"true\"\n      N8N_BASIC_AUTH_USER: admin\n      N8N_BASIC_AUTH_PASSWORD: CHANGEZ_CE_MOT_DE_PASSE_AUTH\n    volumes:\n      - n8n_data:\u002Fhome\u002Fnode\u002F.n8n\n    ports:\n      - \"127.0.0.1:5678:5678\"\n\nvolumes:\n  postgres_data:\n  n8n_data:\n```\n\nRemarque : la version est épinglée à `2.38.4` (stable au 2026-09-09). Ne jamais utiliser `:latest` — voir le conseil ci-dessous.",{"title":83,"body":84},"Démarrer la stack et importer les workflows","Lancez la stack : `docker compose up -d`. Attendez que les deux conteneurs soient sains : `docker compose ps`. Une fois n8n accessible sur `http:\u002F\u002F127.0.0.1:5678`, importez vos workflows via l'API : `curl -s -X POST -H 'X-N8N-API-KEY: VOTRE_NOUVELLE_CLE' -H 'Content-Type: application\u002Fjson' -d @workflows-export-YYYYMMDD.json http:\u002F\u002F127.0.0.1:5678\u002Fapi\u002Fv1\u002Fworkflows`. Si votre export contient plusieurs workflows dans un tableau, importez-les un par un ou utilisez le script d'import fourni dans la documentation n8n. Vérifiez ensuite dans l'interface que vos workflows, leurs connexions et leurs credentials sont présents.",{"title":86,"body":87},"Configurer Nginx comme reverse proxy avec TLS","Installez Nginx et Certbot si ce n'est pas fait : `apt install nginx certbot python3-certbot-nginx -y`. Créez la configuration Nginx dans `\u002Fetc\u002Fnginx\u002Fsites-available\u002Fn8n` :\n\n```nginx\nserver {\n    listen 80;\n    server_name votre-domaine.com;\n    return 301 https:\u002F\u002F$host$request_uri;\n}\n\nserver {\n    listen 443 ssl;\n    server_name votre-domaine.com;\n\n    location \u002F {\n        proxy_pass http:\u002F\u002F127.0.0.1:5678;\n        proxy_http_version 1.1;\n        proxy_set_header Upgrade $http_upgrade;\n        proxy_set_header Connection \"upgrade\";\n        proxy_set_header Host $host;\n        proxy_set_header X-Real-IP $remote_addr;\n        proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;\n        proxy_set_header X-Forwarded-Proto $scheme;\n        proxy_buffering off;\n        proxy_read_timeout 300s;\n    }\n}\n```\n\nActivez le site et obtenez le certificat : `ln -s \u002Fetc\u002Fnginx\u002Fsites-available\u002Fn8n \u002Fetc\u002Fnginx\u002Fsites-enabled\u002F && certbot --nginx -d votre-domaine.com`.",{"title":89,"body":90},"Valider que la migration a réussi","Effectuez ces vérifications dans l'ordre : 1) accédez à `https:\u002F\u002Fvotre-domaine.com` — la page de connexion s'affiche sans avertissement TLS ; 2) connectez-vous et vérifiez que vos workflows sont présents et actifs ; 3) déclenchez manuellement un workflow simple pour valider l'exécution de bout en bout ; 4) vérifiez les webhooks : si des services tiers pointent vers votre ancienne URL ou un ancien port, mettez-les à jour dans n8n (`Settings → Webhooks`) ; 5) laissez tourner 24 heures et consultez les logs : `docker compose logs n8n --since 24h | grep -i error`.",{"type":92,"title":93,"body":94},"tip","Épinglez toujours une version, jamais :latest","L'utilisation de `n8nio\u002Fn8n:latest` dans votre `docker-compose.yml` expose à des mises à jour automatiques non contrôlées lors d'un `docker compose pull`. Sur une base SQLite, un saut de version majeur sans migration préalable peut déclencher le scénario décrit dans l'issue #22341 : les données semblent présentes dans le volume mais la base revient à un état antérieur. Épinglez toujours une version précise (`n8nio\u002Fn8n:2.38.4`) et planifiez vos montées de version. Pour passer à une nouvelle version, lisez d'abord les release notes, puis : `docker compose pull && docker compose up -d`.",{"type":36,"title":96,"body":97},"Dépannage : les cas courants après migration","Voici les problèmes rencontrés le plus fréquemment lors de cette transition.",{"type":40,"title":99,"items":100},"Problèmes et solutions",[101,102,103,104,105],"**Workflows vides après import** — vérifiez que le format JSON exporté correspond au format attendu par l'API d'import ; certaines versions n8n exportent un objet `{ data: [] }`, d'autres un tableau direct. Adaptez la commande `curl` en conséquence.","**Webhooks qui ne répondent plus** — la variable `WEBHOOK_URL` doit correspondre exactement à l'URL publique de votre instance (avec `https:\u002F\u002F`). Un mauvais paramétrage génère des URLs de webhook incorrectes dans l'interface.","**Credentials inaccessibles** — les credentials sont chiffrés avec la clé `N8N_ENCRYPTION_KEY`. Si vous ne la définissez pas explicitement et que vous repartez d'un nouveau volume `n8n_data`, les anciens credentials sont perdus. Récupérez la clé depuis `~\u002F.n8n\u002F.n8n_encryption_key` sur l'instance npm et posez-la en variable d'environnement.","**Base SQLite qui régresse (issue #22341)** — si vous avez choisi de conserver SQLite temporairement, assurez-vous que le volume Docker est monté de façon persistante et que vous n'utilisez pas `--rm` ou de politique de restart agressive. La migration vers PostgreSQL reste la résolution définitive.","**Erreur `ECONNREFUSED` sur PostgreSQL** — la condition `depends_on.postgres.condition: service_healthy` et le healthcheck `pg_isready` garantissent que n8n attend que PostgreSQL soit prêt. Sans cette condition, n8n démarre avant PostgreSQL et échoue.",{"type":36,"title":107,"body":108},"Une migration à faire maintenant, pas en octobre","La version stable de n8n au moment de cet article est la 2.38.4. Vous avez plusieurs semaines pour mener cette migration dans de bonnes conditions : exporter proprement vos workflows, tester la stack Docker sur un serveur de test, puis basculer la production avec un vrai plan de rollback. En octobre, quand n8n 3.0 sera disponible, vous n'aurez qu'à bumper le numéro de version dans votre `docker-compose.yml` — un geste de cinq minutes. La différence entre cinq minutes et une journée de stress se joue maintenant.","Un VPS prêt pour Docker et n8n","ServOrbit propose des VPS avec accès root, IPv4 dédiée et choix d'OS. Montez votre stack n8n en quelques minutes avec notre template Docker.","Déployer n8n sur VPS ServOrbit","\u002Fvps-cloud",[114,130,145],{"id":115,"slug":116,"slugs":117,"title":121,"excerpt":122,"readTime":123,"views":18,"isPinned":19,"publishedAt":124,"category":125,"categories":126,"featuredImage":28,"bgImage":29,"posterImage":128,"relatedSolution":129},3,"installer-n8n-vps",{"fr":116,"en":118,"ar":119,"es":120},"install-n8n-on-vps-with-docker-complete-2026-guide","تثبيت-n8n-على-vps-مع-docker-دليل-شامل-2026","instalar-n8n-en-vps-con-docker","Installer n8n sur VPS avec Docker : guide complet 2026","Déployez n8n sur VPS avec Docker, reverse proxy et HTTPS. Crash V8, 502 nginx, migration npm vers Docker et sécurisation des exécutions persistées (advisory août 2026).",12,"2026-06-05T00:00:00+00:00",{"id":22,"name":23,"slug":24,"color":25,"icon":24},[127],{"id":22,"name":23,"slug":24,"color":25,"icon":24},"\u002Fblog\u002Fcovers\u002Finstaller-n8n-vps-poster.svg",{"categorySlug":24,"appSlug":32},{"id":131,"slug":132,"slugs":133,"title":137,"excerpt":138,"readTime":17,"views":139,"isPinned":19,"publishedAt":140,"category":141,"categories":142,"featuredImage":28,"bgImage":29,"posterImage":144,"relatedSolution":28},338,"remplacer-github-actions-woodpecker-ci-self-hosted-vps",{"fr":132,"en":134,"ar":135,"es":136},"replace-github-actions-with-woodpecker-ci-on-a-vps","استبدال-github-actions-بـwoodpecker-ci-على-vps","reemplazar-github-actions-con-woodpecker-ci-en-vps","Remplacer GitHub Actions par Woodpecker CI sur VPS","GitHub a annoncé puis suspendu la facturation des runners self-hosted. Migrez vers Woodpecker CI : syntaxe propre, moins de 50 Mo RAM, coût fixe sur VPS.",1,"2026-09-07T00:00:00+00:00",{"id":22,"name":23,"slug":24,"color":25,"icon":24},[143],{"id":22,"name":23,"slug":24,"color":25,"icon":24},"\u002Fblog\u002Fcovers\u002Fremplacer-github-actions-woodpecker-ci-self-hosted-vps-poster.svg",{"id":146,"slug":147,"slugs":148,"title":152,"excerpt":153,"readTime":154,"views":18,"isPinned":19,"publishedAt":155,"category":156,"categories":157,"featuredImage":28,"bgImage":29,"posterImage":159,"relatedSolution":28},307,"zapier-vs-n8n-cout-migration-2026",{"fr":147,"en":149,"ar":150,"es":151},"zapier-vs-n8n-cost-migration-2026","zapier-مقابل-n8n-التكلفة-والهجرة-2026","zapier-vs-n8n-costo-migracion-2026","Zapier vs n8n self-hosted : coût réel et migration pour agences","Zapier Pro plafonne à 750 tâches\u002Fmois. Comparez le coût réel face à n8n self-hosted et suivez le guide de migration étape par étape pour agences.",9,"2026-08-27T00:00:00+00:00",{"id":22,"name":23,"slug":24,"color":25,"icon":24},[158],{"id":22,"name":23,"slug":24,"color":25,"icon":24},"\u002Fblog\u002Fcovers\u002Fzapier-vs-n8n-cout-migration-2026-poster.svg",1789046129553]