tva
← Analyses

Guide complet de dépannage de n8n auto-hébergé 2025 : résoudre les problèmes de taille des données d’exécution et de webhooks avec Traefik

Dernière mise à jour : 15 octobre 2025

L’auto-hébergement de n8n offre des exécutions de flux de travail illimitées, un contrôle total des données et des économies significatives par rapport aux offres cloud. Mais en réalité, les instances auto-hébergées font face à des difficultés que les utilisateurs de n8n Cloud n’ont généralement pas à gérer — notamment autour de la gestion des gros volumes de données et de la configuration des webhooks avec les proxys inverses.

En juin 2025, nous avons publié deux guides de dépannage traitant ces problèmes séparément. Le problème est qu’aucun guide complet n’existe pour les déploiements n8n en production avec le proxy inverse Traefik qui aborde les deux problèmes courants ensemble.

Ce guide combine les deux correctifs originaux, fournit une configuration Traefik complète avec prise en charge de WebSocket, inclut les nouvelles exigences des exécuteurs de tâches de 2025 et livre des fichiers docker-compose prêts pour la production que vous pouvez déployer immédiatement.


Table des matières

  1. Diagnostic rapide : quel problème avez-vous ?
  2. Comprendre les deux problèmes principaux
  3. Correctif n°1 : erreur de données d’exécution trop volumineuses
  4. Correctif n°2 : problèmes d’URL de webhooks
  5. Configuration de production complète avec Traefik
  6. Exigence 2025 : Exécuteurs de tâches
  7. Référence des variables d’environnement
  8. Exemples Docker Compose
  9. Tester votre configuration
  10. Dépannage des problèmes courants

Diagnostic rapide : quel problème avez-vous ?

Symptôme : « Existing execution data is too large »

Vous voyez cette erreur quand :

  • Vous cliquez sur « Execute Node » pendant le développement d’un flux de travail
  • Vous testez des flux de travail avec de grands ensembles de données ou de nombreux éléments
  • Vous utilisez le mode d’exécution partielle (test de nœuds individuels)
  • Vous traitez des transformations complexes avec plusieurs branches

Il vous faut : Correctif n°1 : taille des données d’exécution


Symptôme : les webhooks affichent des URL incorrectes ou ne fonctionnent pas

Vous constatez cela quand :

  • Les URL des webhooks s’affichent avec des numéros de port (par exemple : :5678)
  • Les services externes (Slack, GitHub, Stripe) ne peuvent pas atteindre vos webhooks
  • Les webhooks fonctionnent en mode test mais échouent en production
  • Vous utilisez un proxy inverse (Nginx, Traefik, Caddy)

Il vous faut : Correctif n°2 : configuration des URL de webhooks


Symptôme : avertissements d’obsolescence concernant les exécuteurs de tâches

Vous voyez dans les journaux :

Running n8n without task runners is deprecated. Task runners will be
turned on by default in a future version.

Il vous faut : Configuration des exécuteurs de tâches


Symptôme : vous souhaitez une configuration complète prête pour la production

Il vous faut :

  • Les deux correctifs appliqués correctement
  • Le proxy inverse Traefik avec HTTPS automatique
  • Les bonnes pratiques de production et la sécurité
  • Les limites de ressources et une surveillance appropriée

Aller à : Configuration de production complète


Comprendre les deux problèmes principaux

Pourquoi les utilisateurs de n8n Cloud rencontrent rarement ces problèmes

Sur n8n Cloud, n8n gère pour vous la configuration du serveur, notamment les URL de webhooks, le stockage des données binaires et les mises à jour. Lorsque vous auto-hébergez, vous êtes responsable de ces configurations.

Les causes profondes

Problème n°1 : limite de taille des données d’exécution

La limite par défaut de 16 MiB pour les charges utiles des requêtes envoyées au backend, y compris les données d’exécution partielle déclenche des erreurs lors du travail avec de grands ensembles de données, de nombreuses branches de flux de travail ou des transformations complexes. Le problème est que le développement de flux de travail devient frustrant — vous ne pouvez pas tester les nœuds individuels pendant le développement. Le correctif est simple : la variable d’environnement N8N_PAYLOAD_SIZE_MAX.

Problème n°2 : génération des URL de webhooks

n8n tente de détecter automatiquement votre URL publique, mais cette détection automatique échoue derrière un proxy inverse. Les services externes reçoivent des URL de webhooks incorrectes avec des ports ou des noms d’hôtes internes — les intégrations échouent silencieusement. Le correctif : la variable d’environnement WEBHOOK_URL.


Correctif n°1 : erreur « Execution Data Too Large »

Le problème en détail

Lorsque vous exécutez seulement une partie d’un flux de travail (en cliquant sur « Execute Node » dans l’éditeur), n8n doit charger les données d’exécution précédentes pour fournir le contexte à ce nœud. Par défaut, n8n limite cette requête à 16 MiB (N8N_PAYLOAD_SIZE_MAX=16 ; la valeur est exprimée en MiB) pour prévenir les problèmes de mémoire sur les serveurs plus petits. Si la requête est plus volumineuse, n8n (ou un proxy inverse dont la limite de taille du corps est inférieure) répond avec HTTP 413, et l’éditeur affiche cette erreur.

Le message d’erreur

Selon la documentation officielle de n8n :

Please execute the whole workflow, rather than just the node.
(Existing execution data is too large.)

Cette erreur apparaît lors du traitement de milliers d’éléments dans un seul nœud, du travail avec de grandes réponses API en JSON, de la transformation de grands ensembles de données avec des nœuds Code ou de l’utilisation de flux de travail avec de nombreuses branches parallèles.

La solution : N8N_PAYLOAD_SIZE_MAX

Le correctif est simple mais nécessite de comprendre les ressources disponibles de votre serveur.

Paramètres recommandés selon la RAM du serveur

RAM du serveurN8N_PAYLOAD_SIZE_MAXValeur à définir (MiB)Pourcentage de la RAM
2 Go ou moins64 Mo64~3 %
4 Go128 Mo128~3 %
8 Go256 Mo256~3 %
16 Go+512 Mo512~3 %

Règle générale : utilisez moins de 20 % de votre RAM disponible pour maintenir le système stable sous charge.

Mise en œuvre Docker Compose

version: '3.8'

services:
  n8n:
    image: n8nio/n8n:latest
    container_name: n8n
    restart: unless-stopped
    ports:
      - "5678:5678"
    environment:
      - N8N_PORT=5678

      # Payload size fix (256MB for 8GB+ RAM servers; value in MiB)
      - N8N_PAYLOAD_SIZE_MAX=256

      # Binary data optimization (highly recommended)
      - N8N_DEFAULT_BINARY_DATA_MODE=filesystem
      - N8N_BINARY_DATA_TTL=1440  # 24 hours

    volumes:
      - n8n_data:/home/node/.n8n

    # Resource limits (adjust based on your server)
    deploy:
      resources:
        limits:
          memory: 2G
        reservations:
          memory: 1G

volumes:
  n8n_data:

Comprendre le mode de données binaires

Par défaut : stockage en mémoire (non recommandé)

# This is the default - DON'T use in production
N8N_DEFAULT_BINARY_DATA_MODE=default

Problèmes : stocke les fichiers (images, PDF, etc.) en RAM, gaspille de la mémoire précieuse, inadapté aux charges de production, limite le nombre de fichiers que vous pouvez traiter.

D’après nos tests, le mode par défaut utilisait ~315 Mo de RAM au repos, contre 211 Mo avec le mode système de fichiers, soit ~100 Mo de mémoire en moins au repos.

Recommandé : stockage sur le système de fichiers

N8N_DEFAULT_BINARY_DATA_MODE=filesystem
N8N_BINARY_DATA_TTL=1440  # Clean up after 24 hours (value in minutes)

Avantages : stocke les fichiers sur disque plutôt qu’en RAM, performances nettement meilleures avec les gros fichiers, prêt pour la production et recommandé par n8n. N8N_BINARY_DATA_TTL n’a plus d’effet depuis n8n 1.9.0 : n8n supprime les données binaires lors de la purge des exécutions. Les paramètres de purge des exécutions contrôlent donc l’utilisation du disque.

Important : Si vous utilisez le mode file d’attente (exécution distribuée basée sur Redis), sachez que n8n n’y prend pas en charge le mode système de fichiers. En octobre 2026, la documentation de n8n recommande le mode database pour le mode file d’attente.

Impact réel

D’après nos tests Docker en octobre 2025 avec la version n8n 1.115.2 :

ConfigurationUtilisation de la mémoireDifférence
Par défaut (sans correctifs)315 MoRéférence
Avec correctif de charge utile + stockage sur le système de fichiers211 Mo-104 Mo

Constat clé : Dans nos mesures au repos, la configuration avec le correctif de charge utile et le mode binaire sur système de fichiers utilisait moins de mémoire que la configuration par défaut. Nous n’avons pas mesuré la mémoire sous charge avec de grosses requêtes ; son utilisation dépend alors de vos flux de travail.


Correctif n°2 : problèmes d’URL de webhooks

Le problème en détail

Lorsque n8n génère des URL de webhooks pour les afficher dans l’éditeur et les enregistrer auprès des services externes, il tente de détecter automatiquement votre URL publique. Derrière un proxy inverse, cette détection automatique échoue de manière spectaculaire.

Ce que vous verrez (les mauvaises URL)

http://n8n.yourdomain.com:5678/webhook/abc123

Problèmes avec cette URL :

  1. Numéro de port inclus (:5678) — les services externes ne peuvent généralement pas atteindre les ports non standard
  2. Mauvais protocole (http au lieu de https) — de nombreux services exigent HTTPS
  3. Nom d’hôte interne — peut être le nom du conteneur Docker au lieu du domaine public

Pourquoi les services externes échouent

Des services comme GitHub, Slack, Stripe, Zoom, Google Sheets et des centaines d’autres tentent d’envoyer des webhooks à ces URL incorrectes et échouent silencieusement. Vous configurez l’intégration, elle semble correcte dans l’interface, mais les notifications n’arrivent jamais.

La solution : variable d’environnement WEBHOOK_URL

Selon la documentation officielle de n8n :

« La variable d’environnement WEBHOOK_URL est utilisée pour définir manuellement l’URL du webhook afin que n8n puisse l’afficher dans l’interface de l’éditeur et enregistrer les URL de webhooks correctes auprès des services externes. Lors de l’exécution de n8n derrière un proxy inverse, il est important de définir cette variable. »

Configuration de base

environment:
  - WEBHOOK_URL=https://n8n.yourdomain.com
  - N8N_EDITOR_BASE_URL=https://n8n.yourdomain.com
  - N8N_PROTOCOL=https
  - N8N_HOST=n8n.yourdomain.com
  - N8N_TRUST_PROXY_HEADER=true
  - N8N_PROXY_HOPS=1

Rôle de chaque variable

WEBHOOK_URL (LA PLUS IMPORTANTE)

  • L’URL publique pour tous les points de terminaison des webhooks
  • Utilisée lors de l’enregistrement des webhooks auprès des services externes
  • Doit correspondre exactement à votre configuration Traefik/proxy inverse
  • Note de version : renommée depuis WEBHOOK_TUNNEL_URL dans la v0.227.0, l’ancien nom a été supprimé dans n8n 1.0

N8N_EDITOR_BASE_URL

  • L’URL d’accès à l’interface web de n8n
  • Généralement identique à WEBHOOK_URL
  • S’affiche dans la barre d’adresse du navigateur et dans les invitations par e-mail

N8N_PROTOCOL

  • Régler sur https pour la production (avec SSL/TLS)
  • Régler sur http uniquement pour les tests locaux
  • Doit correspondre à la terminaison de votre proxy inverse

N8N_HOST

  • Votre nom de domaine public uniquement
  • Ne pas inclure le protocole (https://) ni le port
  • Exemple : n8n.yourdomain.com et non https://n8n.yourdomain.com:443

N8N_TRUST_PROXY_HEADER

  • Ce n’est pas une variable documentée de n8n : elle ne figure pas dans la référence des variables d’environnement de n8n ; la définir n’a donc aucun effet documenté
  • La confiance accordée aux en-têtes du proxy (pour les adresses IP réelles des clients) est contrôlée par N8N_PROXY_HOPS
  • Vous pouvez l’omettre dans les exemples de ce guide

N8N_PROXY_HOPS

  • Régler sur 1 derrière un seul proxy inverse
  • Régler sur 2 derrière deux proxies (rare)
  • Indique à n8n à combien de couches de proxy faire confiance

Tester les URL de webhooks

Avant le correctif

Dans l’interface n8n, créez un nœud Webhook et vérifiez l’URL affichée :

http://n8n.example.com:5678/webhook/abc123  ❌ Wrong

Après le correctif

Le même nœud webhook affiche maintenant :

https://n8n.example.com/webhook/abc123  ✅ Correct

Différence critique : les services externes peuvent maintenant atteindre cette URL car elle utilise le port HTTPS standard 443 (géré par votre proxy inverse) au lieu du port interne 5678.


Configuration de production complète avec Traefik

Pourquoi Traefik ?

Traefik est un proxy inverse moderne parfaitement adapté aux déploiements Docker — HTTPS automatique via Let's Encrypt sans gestion manuelle des certificats, découverte de services détectant automatiquement les conteneurs via les labels Docker, prise en charge native de WebSocket pour la connexion en direct de l’éditeur n8n, configuration facile avec de simples labels Docker au lieu de fichiers de configuration complexes, et un tableau de bord intégré pour surveiller le routage et les certificats en temps réel.

Vue d’ensemble de l’architecture

Internet
  ↓
[Traefik Reverse Proxy]
  ↓ HTTPS (Let's Encrypt)
  ↓ WebSocket Support
[Conteneur n8n]
  ↓ Réseau interne
[Base de données PostgreSQL]

Prise en charge de WebSocket

Traefik relaie nativement les connexions WebSocket, dont la connexion en direct de l’éditeur n8n ; aucun middleware supplémentaire n’est donc nécessaire. Les webhooks sont des requêtes HTTPS ordinaires et ne dépendent pas de WebSocket. L’exemple de production ci-dessous inclut des labels d’en-têtes WebSocket facultatifs ; vous pouvez les omettre.

Docker Compose de production complet

Cette configuration combine les deux correctifs, inclut Traefik avec une prise en charge appropriée de WebSocket et suit les bonnes pratiques de production :

version: '3.8'

networks:
  traefik-net:
    external: true
  n8n-internal:
    internal: true

services:
  # PostgreSQL Database
  postgres:
    image: postgres:16-alpine
    container_name: n8n-postgres
    restart: unless-stopped
    networks:
      - n8n-internal
    environment:
      - POSTGRES_USER=n8n
      - POSTGRES_PASSWORD=${DB_PASSWORD}
      - POSTGRES_DB=n8n
    volumes:
      - postgres_data:/var/lib/postgresql/data
    healthcheck:
      test: ["CMD-SHELL", "pg_isready -U n8n"]
      interval: 10s
      timeout: 5s
      retries: 5
    deploy:
      resources:
        limits:
          memory: 512M

  # n8n Application
  n8n:
    image: n8nio/n8n:latest
    container_name: n8n
    restart: unless-stopped
    depends_on:
      postgres:
        condition: service_healthy
    networks:
      - traefik-net
      - n8n-internal

    # Traefik Configuration Labels
    labels:
      # Enable Traefik for this container
      - "traefik.enable=true"
      - "traefik.docker.network=traefik-net"

      # Router configuration
      - "traefik.http.routers.n8n.rule=Host(`${N8N_DOMAIN}`)"
      - "traefik.http.routers.n8n.entrypoints=websecure"
      - "traefik.http.routers.n8n.tls.certresolver=letsencrypt"

      # Service configuration
      - "traefik.http.services.n8n.loadbalancer.server.port=5678"

      # Middleware: Request size limit in bytes (256MB, matches N8N_PAYLOAD_SIZE_MAX)
      - "traefik.http.middlewares.n8n-buffering.buffering.maxRequestBodyBytes=268435456"

      # Middleware: WebSocket headers (optional; Traefik proxies WebSockets natively)
      - "traefik.http.middlewares.n8n-websocket.headers.customrequestheaders.Upgrade=websocket"
      - "traefik.http.middlewares.n8n-websocket.headers.customrequestheaders.Connection=Upgrade"

      # Middleware: Security headers
      - "traefik.http.middlewares.n8n-security.headers.customResponseHeaders.X-Robots-Tag=noindex,nofollow"
      - "traefik.http.middlewares.n8n-security.headers.sslProxyHeaders.X-Forwarded-Proto=https"

      # Apply ALL middlewares
      - "traefik.http.routers.n8n.middlewares=n8n-buffering,n8n-websocket,n8n-security"

    environment:
      # Database Configuration
      - DB_TYPE=postgresdb
      - DB_POSTGRESDB_HOST=postgres
      - DB_POSTGRESDB_PORT=5432
      - DB_POSTGRESDB_DATABASE=n8n
      - DB_POSTGRESDB_USER=n8n
      - DB_POSTGRESDB_PASSWORD=${DB_PASSWORD}

      # FIX #2: Webhook URL Configuration
      - WEBHOOK_URL=https://${N8N_DOMAIN}
      - N8N_EDITOR_BASE_URL=https://${N8N_DOMAIN}
      - N8N_PROTOCOL=https
      - N8N_HOST=${N8N_DOMAIN}
      - N8N_PORT=5678
      - N8N_TRUST_PROXY_HEADER=true
      - N8N_PROXY_HOPS=1

      # FIX #1: Payload Size Configuration
      - N8N_PAYLOAD_SIZE_MAX=256  # 256 MiB

      # Binary Data Management
      - N8N_DEFAULT_BINARY_DATA_MODE=filesystem
      - N8N_BINARY_DATA_TTL=1440  # 24 hours

      # 2025 Requirement: Task Runners
      - N8N_RUNNERS_ENABLED=true
      - N8N_RUNNERS_MODE=internal
      - N8N_RUNNERS_MAX_CONCURRENCY=5

      # Production Optimizations
      - NODE_ENV=production
      - EXECUTIONS_DATA_MAX_AGE=168  # 7 days
      - EXECUTIONS_DATA_PRUNE_MAX_COUNT=1000
      - N8N_LOG_LEVEL=info
      - N8N_LOG_OUTPUT=console

      # Timezone (adjust to your location)
      - GENERIC_TIMEZONE=America/New_York
      - TZ=America/New_York

      # Security
      - N8N_ENCRYPTION_KEY=${N8N_ENCRYPTION_KEY}

    volumes:
      - n8n_data:/home/node/.n8n

    # Resource Limits (8GB+ RAM server)
    deploy:
      resources:
        limits:
          memory: 2G
          cpus: '2.0'
        reservations:
          memory: 1G
          cpus: '1.0'

    # Health Check
    healthcheck:
      test: ["CMD", "wget", "--quiet", "--tries=1", "--spider", "http://localhost:5678/healthz"]
      interval: 30s
      timeout: 10s
      retries: 3
      start_period: 40s

volumes:
  n8n_data:
  postgres_data:

Configuration de Traefik

Si vous n’avez pas encore Traefik en fonctionnement, voici la configuration complète :

Étape 1 : créer le réseau Traefik

docker network create traefik-net

Étape 2 : créer la configuration Traefik

Créez traefik/traefik.yml :

api:
  dashboard: true

entryPoints:
  web:
    address: ":80"
    http:
      redirections:
        entryPoint:
          to: websecure
          scheme: https
  websecure:
    address: ":443"

providers:
  docker:
    endpoint: "unix:///var/run/docker.sock"
    exposedByDefault: false
    network: traefik-net

certificatesResolvers:
  letsencrypt:
    acme:
      email: [email protected]  # CHANGE THIS
      storage: /letsencrypt/acme.json
      httpChallenge:
        entryPoint: web

log:
  level: INFO

accessLog: {}

Étape 3 : créer le Docker Compose de Traefik

Créez traefik/docker-compose.yml :

version: '3.8'

networks:
  traefik-net:
    external: true

services:
  traefik:
    image: traefik:v2.10
    container_name: traefik
    restart: unless-stopped
    security_opt:
      - no-new-privileges:true
    networks:
      - traefik-net
    ports:
      - "80:80"
      - "443:443"
      - "8080:8080"  # Dashboard (secure this in production!)
    volumes:
      - /var/run/docker.sock:/var/run/docker.sock:ro
      - ./traefik.yml:/traefik.yml:ro
      - ./letsencrypt:/letsencrypt
    labels:
      - "traefik.enable=true"

Étape 4 : créer le fichier d’environnement

Créez .env dans votre répertoire n8n :

# Domain Configuration
N8N_DOMAIN=n8n.yourdomain.com

# Database Password (generate secure password)
DB_PASSWORD=your_secure_db_password_here

# n8n Encryption Key (generate random string)
N8N_ENCRYPTION_KEY=your_encryption_key_here

Générer des valeurs sécurisées :

# For DB_PASSWORD
openssl rand -base64 32

# For N8N_ENCRYPTION_KEY
openssl rand -hex 32

Étape 5 : tout lancer

# Start Traefik first
cd traefik
docker compose up -d

# Wait a few seconds, then start n8n
cd ../n8n
docker compose up -d

# Watch logs to verify startup
docker compose logs -f n8n

Vérifier votre configuration

Vérifier le tableau de bord Traefik

Visitez http://your-server-ip:8080. Cela fonctionne uniquement si vous définissez aussi api.insecure: true dans traefik.yml (pour les tests uniquement) ; sinon, configurez un routeur pour le tableau de bord (api@internal) sur son propre domaine.

Doit afficher :

  • Routeur n8n actif avec statut vert
  • Certificat obtenu de Let's Encrypt
  • Service marqué comme sain

Vérifier l’accès à n8n

Visitez https://n8n.yourdomain.com

Doit afficher :

  • HTTPS fonctionnel avec un certificat Let's Encrypt valide
  • Aucun avertissement de sécurité du navigateur
  • La page de connexion/configuration de n8n s’affiche correctement

Vérifier les URL des webhooks

  1. Connectez-vous à n8n
  2. Créez un nouveau flux de travail
  3. Ajoutez un nœud Webhook
  4. Vérifiez l’« URL de production » affichée

Attendu :

https://n8n.yourdomain.com/webhook/abc123

PAS ceci (la configuration est incorrecte) :

http://n8n.yourdomain.com:5678/webhook/abc123  ❌

Exigence 2025 : exécuteurs de tâches

Que sont les exécuteurs de tâches ?

Les exécuteurs de tâches exécutent le code défini dans les nœuds Code au sein de processus isolés plutôt que dans le processus principal de n8n. Cela offre une meilleure sécurité grâce à des environnements en bac à sable, une stabilité améliorée où les erreurs de code ne font pas planter le processus principal, et une compatibilité future car ils seront requis dans les prochaines versions de n8n.

Pourquoi c’est important maintenant

D’après la documentation officielle de n8n :

« L’exécution de n8n sans exécuteurs de tâches est désormais déconseillée. Les exécuteurs de tâches seront activés par défaut dans une future version. Il est conseillé aux utilisateurs de définir N8N_RUNNERS_ENABLED=true dès maintenant pour éviter d’éventuels problèmes à l’avenir. »

D’après nos journaux de test (octobre 2025) :

There are deprecations related to your environment variables:
 - N8N_RUNNERS_ENABLED -> Running n8n without task runners is deprecated.

Configuration

Mode interne (recommandé pour un serveur unique)

environment:
  - N8N_RUNNERS_ENABLED=true
  - N8N_RUNNERS_MODE=internal
  - N8N_RUNNERS_MAX_CONCURRENCY=5

n8n lance l’exécuteur de tâches comme processus enfant — configuration la plus simple, aucune infrastructure supplémentaire nécessaire, adapté à la plupart des déploiements auto-hébergés, faible surcharge d’exécution. En octobre 2026, la documentation de n8n décrit le mode interne comme non sécurisé par conception et le déclare obsolète à partir de n8n 3.0.

Mode externe (pour les configurations distribuées)

environment:
  - N8N_RUNNERS_ENABLED=true
  - N8N_RUNNERS_MODE=external
  - N8N_RUNNERS_AUTH_TOKEN=your_secure_token

Des conteneurs d’exécuteurs de tâches séparés offrent une meilleure isolation des ressources pour les flux de travail à haut volume, permettent une mise à l’échelle horizontale sur plusieurs serveurs, et s’exécutent dans un conteneur sidecar issu de l’image n8nio/runners, dont la version doit correspondre à celle de votre image n8n. Une configuration Docker Compose suffit ; Docker Swarm et Kubernetes ne sont pas nécessaires.

Vérifier les exécuteurs de tâches

Vérifier la liste des processus

docker exec n8n ps aux

Sans exécuteurs de tâches (3 processus) :

PID   USER     TIME  COMMAND
    1 node      0:00 tini -- /docker-entrypoint.sh
    7 node      0:12 node /usr/local/bin/n8n

Avec exécuteurs de tâches (4 processus) :

PID   USER     TIME  COMMAND
    1 node      0:00 tini -- /docker-entrypoint.sh
    7 node      0:16 node /usr/local/bin/n8n
   18 node      0:10 node [...]/task-runner/dist/start.js

Preuve : processus de l’exécuteur de tâches visible avec le PID 18.

Vérifier les journaux

docker logs n8n | grep -i runner

Vous devriez voir :

n8n Task Broker ready on 127.0.0.1, port 5679
Registered runner "JS Task Runner" (zCWpF0Eb_LJsqWYvLm5t1)

Impact sur l’utilisation des ressources

D’après nos tests Docker (octobre 2025, version n8n 1.115.2) :

ConfigurationMémoireCPUProcessus
Sans exécuteurs de tâches214 Mo0,14 %3
Avec exécuteurs de tâches289 Mo0,29 %4
Différence+75 Mo+0,15 %+1

Faible surcharge. Les avantages — sécurité, stabilité, pérennité — l’emportent largement sur le faible coût en ressources.


Référence des variables d’environnement

Liste complète des variables

VariableTypeValeur par défautFonctionPriorité
Variables critiques
WEBHOOK_URLChaîne de caractères—URL publique des webhooksREQUIS avec proxy inverse
N8N_PAYLOAD_SIZE_MAXNombre16 (MiB)Taille maximale de la charge utile des requêtes en MiB, y compris les données d’exécution partielleREQUIS pour les gros volumes
N8N_RUNNERS_ENABLEDBooléenfalseActiver les exécuteurs de tâchesRecommandé sur 1.x (inutile à partir de n8n 2.0)
N8N_TRUST_PROXY_HEADER––Ne figure pas parmi les variables documentées de n8nInutile ; utilisez N8N_PROXY_HOPS
Configuration des webhooks
N8N_EDITOR_BASE_URLChaîne de caractères—URL de l’interface éditeurRecommandé
N8N_PROTOCOLChaîne de caractèreshttpProtocole (http/https)Production
N8N_HOSTChaîne de caractèreslocalhostNom d’hôte publicProduction
N8N_PORTNombre5678Port interneOptionnel
N8N_PROXY_HOPSNombre0Nombre de proxys inversesRégler sur 1 avec proxy
Performance
N8N_DEFAULT_BINARY_DATA_MODEChaîne de caractèresdefaultMode de stockage binaireRecommandé
N8N_BINARY_DATA_TTL––Sans effet depuis n8n 1.9.0 (les données binaires sont purgées avec les exécutions)Peut être supprimé
Exécuteurs de tâches
N8N_RUNNERS_MODEChaîne de caractèresinternalMode de l’exécuteur de tâchesSi les exécuteurs sont activés
N8N_RUNNERS_MAX_CONCURRENCYNombre10Nombre maximal de tâches simultanées par exécuteurOptionnel

Préréglages de configuration par scénario

Scénario A : développement (machine locale)

environment:
  - N8N_PORT=5678

À utiliser quand : tests en local, sans proxy inverse, sans exigences de production

Scénario B : derrière un proxy inverse (sans gros volumes de données)

environment:
  - N8N_PORT=5678
  - WEBHOOK_URL=https://n8n.yourdomain.com
  - N8N_EDITOR_BASE_URL=https://n8n.yourdomain.com
  - N8N_PROTOCOL=https
  - N8N_HOST=n8n.yourdomain.com
  - N8N_TRUST_PROXY_HEADER=true
  - N8N_PROXY_HOPS=1
  - N8N_RUNNERS_ENABLED=true

À utiliser quand : instance n8n publique, webhooks nécessaires, flux de travail de petite taille

Scénario C : configuration de production complète

environment:
  # Database
  - DB_TYPE=postgresdb
  - DB_POSTGRESDB_HOST=postgres
  - DB_POSTGRESDB_PORT=5432
  - DB_POSTGRESDB_DATABASE=n8n
  - DB_POSTGRESDB_USER=n8n
  - DB_POSTGRESDB_PASSWORD=${DB_PASSWORD}

  # Webhooks
  - WEBHOOK_URL=https://n8n.yourdomain.com
  - N8N_EDITOR_BASE_URL=https://n8n.yourdomain.com
  - N8N_PROTOCOL=https
  - N8N_HOST=n8n.yourdomain.com
  - N8N_PORT=5678
  - N8N_TRUST_PROXY_HEADER=true
  - N8N_PROXY_HOPS=1

  # Performance
  - N8N_PAYLOAD_SIZE_MAX=256  # 256 MiB
  - N8N_DEFAULT_BINARY_DATA_MODE=filesystem
  - N8N_BINARY_DATA_TTL=1440

  # Task Runners
  - N8N_RUNNERS_ENABLED=true
  - N8N_RUNNERS_MODE=internal
  - N8N_RUNNERS_MAX_CONCURRENCY=5

  # Production
  - NODE_ENV=production
  - EXECUTIONS_DATA_MAX_AGE=168  # 7 days
  - EXECUTIONS_DATA_PRUNE_MAX_COUNT=1000
  - N8N_LOG_LEVEL=info

  # Security
  - N8N_ENCRYPTION_KEY=${N8N_ENCRYPTION_KEY}

À utiliser quand : déploiement de production avec toutes les fonctionnalités, gros flux de travail, accès public


Exemples Docker Compose

Les quatre scénarios de notre environnement de test sont disponibles. Ces configurations ont été validées avec la version n8n 1.115.2 en octobre 2025. Les exemples utilisent le tag d’image latest ; fixez n8nio/n8n:1.115.2 pour reproduire la version testée.

Comparaison de l’utilisation des ressources (d’après nos tests)

ScénarioMémoireCPUProcessusDescription
Par défaut315 Mo0,00 %3Sans correctifs, référence
Correctif de charge utile211 Mo0,00 %3Charge utile + stockage sur le système de fichiers
Correctif de webhook215 Mo0,14 %3Configuration webhook uniquement
Production289 Mo0,29 %4Tous les correctifs + exécuteurs de tâches

Constat clé : Au repos, la configuration de production avec tous les correctifs utilisait moins de mémoire que la configuration par défaut dans nos tests. Il s’agit de mesures au repos, et non de résultats sous charge avec de grosses requêtes.


Tester votre configuration

Liste de vérification avant déploiement

1. Configuration DNS

# Verify DNS points to your server
nslookup n8n.yourdomain.com

# Should return your server's public IP

2. Disponibilité des ports

# Check if required ports are free
sudo netstat -tlnp | grep -E '(80|443|5678)'

# Should show nothing or only Traefik on 80/443

3. Installation de Docker

# Verify Docker
docker --version

# Verify Docker Compose
docker compose version

4. Variables d’environnement

# Verify .env file exists
cat .env

# Should show N8N_DOMAIN, DB_PASSWORD, N8N_ENCRYPTION_KEY

Étapes de déploiement

# Step 1: Create Traefik network
docker network create traefik-net

# Step 2: Start Traefik
cd traefik
docker compose up -d

# Step 3: Wait for Traefik to be ready
sleep 10

# Step 4: Start n8n
cd ../n8n
docker compose up -d

# Step 5: Watch logs for any errors
docker compose logs -f n8n

Tests post-déploiement

Test 1 : accès HTTPS

curl -I https://n8n.yourdomain.com

Attendu : HTTP/2 200 (ou HTTP/1.1 200)

Test 2 : redirection HTTP vers HTTPS

curl -I http://n8n.yourdomain.com

Attendu : HTTP/1.1 308 Permanent Redirect avec Location: https://n8n.yourdomain.com

Test 3 : santé des conteneurs

docker ps

Attendu : n8n et n8n-postgres affichant le statut (healthy)

Test 4 : format des URL de webhooks

  1. Connectez-vous à l’interface web de n8n
  2. Créez un nouveau flux de travail
  3. Ajoutez un nœud Webhook
  4. Vérifiez l’URL de production affichée

Format attendu :

https://n8n.yourdomain.com/webhook/abc123

PAS attendu (erreur de configuration) :

http://n8n.yourdomain.com:5678/webhook/abc123  ❌

Test 5 : exécuteurs de tâches actifs

docker logs n8n | grep -i runner

Sortie attendue :

Registered runner "JS Task Runner"

Test 6 : variables d’environnement appliquées

docker exec n8n env | grep N8N_PAYLOAD_SIZE_MAX

Attendu : N8N_PAYLOAD_SIZE_MAX=256


Dépannage des problèmes courants

Problème : HTTPS ne fonctionne pas

Symptômes : le navigateur affiche l’avertissement « Non sécurisé », messages d’erreur de certificat, impossible d’accéder via HTTPS

Diagnostic :

# Check Traefik logs for errors
docker logs traefik | grep -i error

# Check certificate file exists
ls -la traefik/letsencrypt/acme.json

# Verify DNS resolution
nslookup n8n.yourdomain.com

Solutions :

  1. DNS ne pointe pas vers le serveur : mettez à jour votre enregistrement DNS A pour pointer vers l’IP publique du serveur, attendez la propagation DNS (jusqu’à 24 heures, généralement beaucoup plus rapide), testez depuis un autre réseau : dig n8n.yourdomain.com +short
  2. Port 80 bloqué : Let's Encrypt a besoin du port 80 pour le défi HTTP. Vérifiez le pare-feu : sudo ufw status. Autorisez si bloqué : sudo ufw allow 80/tcp && sudo ufw allow 443/tcp
  3. E-mail invalide dans la configuration Traefik : éditez traefik/traefik.yml, mettez à jour certificatesResolvers.letsencrypt.acme.email avec une adresse valide, redémarrez Traefik : docker compose restart

Problème : les webhooks renvoient 404

Symptômes : les services externes signalent des échecs de webhooks, les URL de webhooks semblent correctes mais ne fonctionnent pas, le mode test fonctionne mais le mode production échoue

Diagnostic :

# Test webhook directly
curl -v https://n8n.yourdomain.com/webhook/test

# Check Traefik routing logs
docker logs traefik | grep webhook

# Verify n8n sees requests
docker logs n8n | grep webhook

Solutions :

  1. WEBHOOK_URL mal configurée : vérifiez la variable d’environnement : docker exec n8n env | grep WEBHOOK_URL. Doit correspondre exactement à votre domaine : WEBHOOK_URL=https://n8n.yourdomain.com
  2. Mauvaise configuration réseau : vérifiez que n8n est sur traefik-net : docker inspect n8n | grep -A 5 Networks. Doit afficher « traefik-net » dans la sortie

Problème : « Execution Data Too Large » persiste

Symptômes : l’erreur persiste après avoir défini N8N_PAYLOAD_SIZE_MAX, les gros flux de travail échouent à « Execute Node »

Diagnostic :

# Verify variable is set
docker exec n8n env | grep PAYLOAD

# Should show N8N_PAYLOAD_SIZE_MAX=256

Solutions :

  1. Variable non appliquée (conteneur non recréé) : recréez le conteneur pour appliquer les modifications : docker compose up -d n8n (docker compose restart n’applique pas les valeurs d’environnement modifiées). Vérifiez ensuite : docker exec n8n env | grep PAYLOAD
  2. Limite trop basse pour votre flux de travail : pour les serveurs avec 16 Go+ de RAM, augmentez à 512 Mo : N8N_PAYLOAD_SIZE_MAX=512
  3. Taille de requête Traefik trop petite : augmentez également la limite Traefik (en octets) pour correspondre : "traefik.http.middlewares.n8n-buffering.buffering.maxRequestBodyBytes=536870912"

Problème : utilisation élevée de la mémoire

Symptômes : le conteneur utilise plus de 1,5 Go de RAM au repos, l’utilisation de la mémoire augmente avec le temps, erreurs de mémoire insuffisante

Diagnostic :

# Monitor memory
docker stats n8n

# Check binary data mode
docker exec n8n env | grep BINARY_DATA_MODE

Solutions :

  1. Mode système de fichiers non utilisé : ajoutez à l’environnement : N8N_DEFAULT_BINARY_DATA_MODE=filesystem. Impact : ~100 Mo de mémoire en moins au repos dans nos tests
  2. Anciennes exécutions accumulées : réduisez la période de rétention : EXECUTIONS_DATA_MAX_AGE=168 (7 jours au lieu de 14) et EXECUTIONS_DATA_PRUNE_MAX_COUNT=1000
  3. Limite du conteneur trop basse : augmentez si le serveur a la capacité. Changez la limite mémoire de 2G à 4G dans la section deploy resources

Conclusion

Ce que nous avons résolu

Ce guide complet aborde les deux problèmes les plus courants de n8n auto-hébergé :

  1. Erreur « Execution Data Too Large » — corrigée avec N8N_PAYLOAD_SIZE_MAX et le mode de stockage binaire sur le système de fichiers
  2. Problèmes d’URL de webhooks — corrigés avec WEBHOOK_URL et une configuration appropriée du proxy inverse

Plus ces ajouts essentiels :

  1. Configuration complète de Traefik — configuration prête pour la production avec prise en charge de WebSocket
  2. Configuration des exécuteurs de tâches — exigence 2025 pour la compatibilité future
  3. Bonnes pratiques de production — limites de ressources, contrôles de santé, en-têtes de sécurité, surveillance
  4. Configurations validées — tous les fichiers docker-compose testés avec n8n 1.115.2 en octobre 2025

Points clés à retenir

Pour des correctifs rapides :

  • Définir N8N_PAYLOAD_SIZE_MAX=256 pour les problèmes de données d’exécution (256 Mo pour 8 Go+ de RAM)
  • Définir WEBHOOK_URL=https://your-domain.com pour les problèmes de webhooks
  • Définir N8N_RUNNERS_ENABLED=true pour éliminer les avertissements d’obsolescence
  • Utilisez N8N_DEFAULT_BINARY_DATA_MODE=filesystem (environ 100 Mo de mémoire en moins au repos dans nos tests)

Pour le déploiement en production :

  • Utilisez notre docker-compose.yml complet avec la configuration Traefik
  • Aucun middleware WebSocket nécessaire — Traefik relaie nativement WebSocket et les webhooks sont de simples requêtes HTTPS
  • Incluez PostgreSQL pour de meilleures performances sous charge
  • Définissez des limites de ressources appropriées en fonction de la capacité de votre serveur
  • Mettez en place des contrôles de santé pour que la surveillance et les services dépendants détectent les pannes (Docker seul marque le conteneur comme défaillant, mais ne le redémarre pas)

Pour les utilisateurs de Traefik (CRITIQUE) :

  • Traefik gère WebSocket sans middleware supplémentaire ; les webhooks nécessitent un routeur correct et WEBHOOK_URL
  • Définissez la limite de taille du corps de requête égale ou supérieure à la taille de la charge utile
  • Configurez les en-têtes de sécurité (X-Robots-Tag, X-Forwarded-Proto)
  • Assurez-vous que le DNS pointe vers votre serveur avant de démarrer Traefik (exigence Let's Encrypt)

Nouveautés par rapport aux articles de juin 2025

FonctionnalitéArticles de juin 2025Ce guide
Correctif données d’exécutionDétailléInclus + mesures de ressources
Correctif webhookDétailléInclus + intégration Traefik
Configuration TraefikNon traitéConfiguration complète
Prise en charge de WebSocketNon traitéMis en avant
Exécuteurs de tâchesNon traitéExigence 2025
Docker-compose combinéSéparésPrêt pour la production
Mesures de ressourcesThéoriquesDonnées de tests réels
Variables d’environnementCouvertesRéférence complète

Tests et validation

Notre environnement de test (octobre 2025) :

  • n8n version 1.115.2
  • Conteneurs Docker en fonctionnement depuis plus de 2 heures
  • Toutes les variables d’environnement vérifiées dans les conteneurs en cours d’exécution
  • Utilisation des ressources mesurée avec docker stats
  • Processus de l’exécuteur de tâches confirmé dans la liste des processus
  • Points de terminaison HTTP testés et accessibles
  • Configurations validées comme fonctionnelles

Prochaines étapes

  1. Choisissez votre scénario :
    • Développement : configuration minimale
    • Derrière un proxy inverse : correctif webhook + exécuteurs de tâches
    • Production : configuration complète avec Traefik (recommandé)
  2. Déployez :
    • Copiez le docker-compose.yml approprié
    • Créez le fichier .env avec votre domaine et des mots de passe sécurisés
    • Démarrez Traefik en premier, puis n8n
    • Exécutez les tests post-déploiement
  3. Validez :
    • Vérifiez que HTTPS fonctionne avec un certificat valide
    • Vérifiez que les URL de webhooks affichent le bon format
    • Testez avec un grand ensemble de données (si nécessaire)
    • Confirmez que les exécuteurs de tâches sont enregistrés
  4. Surveillez :
    • Observez l’utilisation des ressources avec docker stats
    • Mettez en place des alertes de contrôle de santé (surveillance externe)
    • Mettez en place la rotation des journaux pour éviter de remplir le disque
    • Planifiez des sauvegardes régulières des volumes de données

Ressources associées

De juin 2025 :

Documentation officielle de n8n :

Questions ou problèmes ?

Si vous rencontrez des problèmes non couverts par ce guide :

  1. Consultez nos articles détaillés de dépannage de juin 2025 pour des conseils supplémentaires
  2. Consultez la documentation officielle de n8n pour les dernières fonctionnalités
  3. Recherchez sur les forums de la communauté n8n des problèmes similaires
  4. Consultez la section Dépannage ci-dessus pour les problèmes courants
  5. Contactez tva pour un accompagnement professionnel à la mise en œuvre

Tests reproductibles

Toutes les configurations de ce guide peuvent être reproduites dans votre propre environnement — les fichiers Docker Compose sont prêts pour la production, les variables d’environnement sont documentées et vérifiées, les commandes de test sont fournies pour la validation et les sorties attendues sont clairement spécifiées. Vous pouvez valider chaque affirmation de ce guide en déployant les configurations vous-même et en exécutant les tests fournis.

Besoin d’aide pour la mise en œuvre ?

Si vous souhaitez que tva gère votre déploiement n8n ou si vous avez besoin d’assistance pour la mise en production, contactez-nous. Nous mettons en œuvre ces configurations pour les organisations recherchant une infrastructure n8n fiable et prête pour la production.


Publié : 15 octobre 2025
Testé avec : n8n v1.115.2, Docker Compose v3.8, Traefik v2.10
Configuration serveur requise : 4 Go+ de RAM, 2+ cœurs CPU recommandés pour la production
Basé sur : la documentation officielle de n8n, des tests Docker validés et les bonnes pratiques de la communauté

Pour aller plus loin