Guide complet de dépannage 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 workflows illimitées, un contrôle total des données et des économies significatives par rapport aux plans cloud. Mais en réalité, les instances auto-hébergées font face à des défis uniques que les utilisateurs cloud ne rencontrent jamais — notamment autour de la gestion des gros volumes de données et de la configuration des webhooks avec les reverse proxies.
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 reverse proxy Traefik qui aborde les deux problèmes courants ensemble.
Ce guide combine les deux correctifs originaux, fournit une configuration Traefik complète avec support WebSocket, inclut les nouvelles exigences des task runners de 2025 et livre des fichiers docker-compose prêts pour la production que vous pouvez déployer immédiatement.
Table des matières
- Diagnostic rapide : quel problème avez-vous ?
- Comprendre les deux problèmes principaux
- Correctif n°1 : erreur de données d'exécution trop volumineuses
- Correctif n°2 : problèmes d'URL de webhooks
- Configuration de production complète avec Traefik
- Exigence 2025 : Task Runners
- Référence des variables d'environnement
- Exemples Docker Compose
- Tester votre configuration
- 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 workflow
- Vous testez des workflows 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 URLs incorrectes ou ne fonctionnent pas
Vous constatez cela quand :
- Les URLs des webhooks s'affichent avec des numéros de port (ex :
: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 reverse proxy (Nginx, Traefik, Caddy)
Il vous faut : Correctif n°2 : configuration des URLs de webhooks
Symptôme : avertissements de dépréciation concernant les task runners
Vous voyez dans les logs :
Running n8n without task runners is deprecated. Task runners will be
turned on by default in a future version.
Il vous faut : Configuration des Task Runners
Symptôme : vous souhaitez une configuration complète prête pour la production
Il vous faut :
- Les deux correctifs appliqués correctement
- Le reverse proxy 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 n8n Cloud n'a pas ces problèmes
n8n Cloud gère automatiquement des limites de mémoire plus élevées pour l'exécution partielle, les URLs de webhooks correctes, le stockage optimisé des données binaires et les mises à jour automatiques incluant toutes les nouvelles exigences. 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 Mo pour les données d'exécution partielle envoyées au backend déclenche des erreurs lors du travail avec de grands ensembles de données, de nombreuses branches de workflow ou des transformations complexes. Le problème est que le développement de workflows 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 URLs de webhooks
n8n tente de détecter automatiquement votre URL publique, mais cette détection automatique échoue derrière un reverse proxy. Les services externes reçoivent des URLs 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 workflow (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 ce transfert de données à 16 Mo pour prévenir les problèmes de mémoire sur les serveurs plus petits.
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 workflows 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 serveur | N8N_PAYLOAD_SIZE_MAX | Valeur en octets | Pourcentage de la RAM |
|---|---|---|---|
| 2 Go ou moins | 64 Mo | 67108864 | ~3 % |
| 4 Go | 128 Mo | 134217728 | ~3 % |
| 8 Go | 256 Mo | 268435456 | ~3 % |
| 16 Go+ | 512 Mo | 536870912 | ~3 % |
Règle générale : utilisez moins de 20 % de votre RAM disponible pour maintenir le système stable sous charge.
Implémentation 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)
- N8N_PAYLOAD_SIZE_MAX=268435456
# 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.
Selon nos tests : le mode par défaut utilise environ 315 Mo de RAM contre 211 Mo avec le mode filesystem — soit environ 100 Mo de RAM économisés.
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, nettoyage automatique avec TTL pour éviter l'engorgement du disque.
Important : si vous utilisez le mode file d'attente (exécution distribuée basée sur Redis), vous devez conserver le mode de données binaires par défaut car le stockage filesystem n'est pas supporté avec le mode file d'attente.
Impact réel
D'après nos tests Docker en octobre 2025 avec la version n8n 1.115.2 :
| Configuration | Utilisation mémoire | Différence |
|---|---|---|
| Par défaut (sans correctifs) | 315 Mo | Référence |
| Avec correctif payload + mode filesystem | 211 Mo | -104 Mo |
Constat clé : la combinaison de l'augmentation de la taille du payload et du mode binaire filesystem réduit en fait l'utilisation mémoire car les données sont gérées plus efficacement sur disque plutôt qu'en RAM.
Correctif n°2 : problèmes d'URL de webhooks
Le problème en détail
Lorsque n8n génère des URLs 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 reverse proxy, cette détection automatique échoue de manière spectaculaire.
Ce que vous verrez (les mauvaises URLs)
http://n8n.yourdomain.com:5678/webhook/abc123
Problèmes avec cette URL :
- Numéro de port inclus (
:5678) — les services externes ne peuvent généralement pas atteindre les ports non standard - Mauvais protocole (http au lieu de https) — de nombreux services exigent HTTPS
- 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 URLs 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 URLs de webhooks correctes auprès des services externes. Lors de l'exécution de n8n derrière un reverse proxy, 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 endpoints de webhooks
- Utilisée lors de l'enregistrement des webhooks auprès des services externes
- Doit correspondre exactement à votre configuration Traefik/reverse proxy
- Note de version : renommée depuis
WEBHOOK_TUNNEL_URLdans 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
- Définir à
httpspour la production (avec SSL/TLS) - Définir à
httpuniquement pour les tests locaux - Doit correspondre à la terminaison de votre reverse proxy
N8N_HOST
- Votre nom de domaine public uniquement
- Ne pas inclure le protocole (
https://) ni le port - Exemple :
n8n.yourdomain.comet nonhttps://n8n.yourdomain.com:443
N8N_TRUST_PROXY_HEADER
- Doit être
truederrière un reverse proxy - Permet à n8n de voir les vraies adresses IP des clients depuis les en-têtes du proxy
- Requis pour le traitement et la sécurité corrects des requêtes
N8N_PROXY_HOPS
- Définir à
1derrière un seul reverse proxy - Définir à
2derrière deux proxies (rare) - Indique à n8n combien de couches de proxy approuver
Tester les URLs 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 reverse proxy) au lieu du port interne 5678.
Configuration de production complète avec Traefik
Pourquoi Traefik ?
Traefik est un reverse proxy 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, support WebSocket critique pour la fonctionnalité webhook de 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
[n8n Container]
↓ Internal Network [PostgreSQL Database]
Configuration critique : support WebSocket
C'est la configuration la plus souvent oubliée et elle cause des échecs de webhooks :
labels:
# WebSocket middleware (ABSOLUTELY REQUIRED)
- "traefik.http.middlewares.n8n-websocket.headers.customrequestheaders.Upgrade=websocket"
- "traefik.http.middlewares.n8n-websocket.headers.customrequestheaders.Connection=Upgrade"
# Apply middleware to router
- "traefik.http.routers.n8n.middlewares=n8n-websocket"
Sans les en-têtes WebSocket :
- Les webhooks en temps réel échouent
- Les webhooks de production expirent
- Les services externes ne peuvent pas maintenir de connexions persistantes
- Les erreurs d'intégration apparaissent de manière intermittente et imprévisible
Docker Compose de production complet
Cette configuration combine les deux correctifs, inclut Traefik avec un support WebSocket approprié 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 (100MB)
- "traefik.http.middlewares.n8n-buffering.buffering.maxRequestBodyBytes=104857600"
# Middleware: WebSocket support (CRITICAL - DO NOT SKIP)
- "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=268435456 # 256MB
# 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: your-email@example.com # 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 (ou configurez un domaine pour le tableau de bord)
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 URLs des webhooks
- Connectez-vous à n8n
- Créez un nouveau workflow
- Ajoutez un nœud Webhook
- 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 : Task Runners
Que sont les Task Runners ?
Les task runners 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 sandboxés, 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 task runners est dépréciée. Les task runners 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 logs 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 le task runner comme processus enfant — configuration la plus simple, aucune infrastructure supplémentaire nécessaire, adapté à la plupart des déploiements auto-hébergés, surcoût de performance minimal.
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 de task runners séparés offrent une meilleure isolation des ressources pour les workflows à haut volume, permettent une mise à l'échelle horizontale sur plusieurs serveurs, mais nécessitent une orchestration (Docker Swarm, Kubernetes).
Vérifier les Task Runners
Vérifier la liste des processus
docker exec n8n ps aux
Sans task runners (3 processus) :
PID USER TIME COMMAND
1 node 0:00 tini -- /docker-entrypoint.sh
7 node 0:12 node /usr/local/bin/n8n
Avec task runners (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 task runner visible avec le PID 18.
Vérifier les logs
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) :
| Configuration | Mémoire | CPU | Processus |
|---|---|---|---|
| Sans task runners | 214 Mo | 0,14 % | 3 |
| Avec task runners | 289 Mo | 0,29 % | 4 |
| Différence | +75 Mo | +0,15 % | +1 |
Surcoût minimal. 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
| Variable | Type | Défaut | Fonction | Priorité |
|---|---|---|---|---|
| Variables critiques | ||||
WEBHOOK_URL | String | — | URL publique des webhooks | REQUIS avec reverse proxy |
N8N_PAYLOAD_SIZE_MAX | Number | 16777216 (16 Mo) | Taille max des données d'exécution | REQUIS pour les gros volumes |
N8N_RUNNERS_ENABLED | Boolean | false | Activer les task runners | REQUIS pour 2025 |
N8N_TRUST_PROXY_HEADER | Boolean | false | Approuver les en-têtes du reverse proxy | REQUIS avec proxy |
| Configuration des webhooks | ||||
N8N_EDITOR_BASE_URL | String | — | URL de l'interface éditeur | Recommandé |
N8N_PROTOCOL | String | http | Protocole (http/https) | Production |
N8N_HOST | String | localhost | Nom d'hôte public | Production |
N8N_PORT | Number | 5678 | Port interne | Optionnel |
N8N_PROXY_HOPS | Number | 0 | Nombre de reverse proxies | Définir à 1 avec proxy |
| Performance | ||||
N8N_DEFAULT_BINARY_DATA_MODE | String | default | Mode de stockage binaire | Recommandé |
N8N_BINARY_DATA_TTL | Number | 60 | Nettoyage binaire (minutes) | Recommandé |
| Task Runners | ||||
N8N_RUNNERS_MODE | String | internal | Mode du task runner | Si runners activés |
N8N_RUNNERS_MAX_CONCURRENCY | Number | 5 | Max de task runners simultanés | Optionnel |
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 reverse proxy, sans exigences de production
Scénario B : derrière un reverse proxy (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, workflows 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=268435456 # 256MB
- 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 workflows, 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.
Comparaison de l'utilisation des ressources (d'après nos tests)
| Scénario | Mémoire | CPU | Processus | Description |
|---|---|---|---|---|
| Par défaut | 315 Mo | 0,00 % | 3 | Sans correctifs, référence |
| Correctif Payload | 211 Mo | 0,00 % | 3 | Payload + mode filesystem |
| Correctif Webhook | 215 Mo | 0,14 % | 3 | Configuration webhook uniquement |
| Production | 289 Mo | 0,29 % | 4 | Tous les correctifs + task runners |
Constat clé : la configuration de production avec tous les correctifs utilise MOINS de mémoire que la configuration par défaut grâce au mode binaire filesystem.
Tester votre configuration
Checklist pré-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 URLs de webhooks
- Connectez-vous à l'interface web de n8n
- Créez un nouveau workflow
- Ajoutez un nœud Webhook
- 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 : Task Runners 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=268435456
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 :
- 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 - Port 80 bloqué : Let's Encrypt a besoin du port 80 pour le challenge HTTP. Vérifiez le pare-feu :
sudo ufw status. Autorisez si bloqué :sudo ufw allow 80/tcp && sudo ufw allow 443/tcp - E-mail invalide dans la configuration Traefik : éditez
traefik/traefik.yml, mettez à jourcertificatesResolvers.letsencrypt.acme.emailavec 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 URLs 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 :
- Middleware WebSocket manquant : vérifiez ces labels dans docker-compose.yml :
- "traefik.http.middlewares.n8n-websocket.headers.customrequestheaders.Upgrade=websocket"
- "traefik.http.middlewares.n8n-websocket.headers.customrequestheaders.Connection=Upgrade"
- "traefik.http.routers.n8n.middlewares=n8n-websocket"
- 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 - 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 workflows échouent à « Execute Node »
Diagnostic :
# Verify variable is set
docker exec n8n env | grep PAYLOAD
# Should show N8N_PAYLOAD_SIZE_MAX=268435456
Solutions :
- Variable non appliquée (conteneur non redémarré) : redémarrez pour appliquer les changements :
docker compose restart n8n. Vérifiez après redémarrage :docker exec n8n env | grep PAYLOAD - Limite trop basse pour votre workflow : pour les serveurs avec 16 Go+ de RAM, augmentez à 512 Mo :
N8N_PAYLOAD_SIZE_MAX=536870912 - Taille de requête Traefik trop petite : augmentez également la limite Traefik pour correspondre :
"traefik.http.middlewares.n8n-buffering.buffering.maxRequestBodyBytes=209715200"
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 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 :
- Mode filesystem non utilisé : ajoutez aux variables d'environnement :
N8N_DEFAULT_BINARY_DATA_MODE=filesystemetN8N_BINARY_DATA_TTL=1440. Impact : environ 100 Mo de RAM économisés selon nos tests - Anciennes exécutions accumulées : réduisez la période de rétention :
EXECUTIONS_DATA_MAX_AGE=168(7 jours au lieu de 14) etEXECUTIONS_DATA_PRUNE_MAX_COUNT=1000 - 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é :
- Erreur « Execution Data Too Large » — corrigée avec
N8N_PAYLOAD_SIZE_MAXet le mode binaire filesystem - Problèmes d'URL de webhooks — corrigés avec
WEBHOOK_URLet une configuration appropriée du reverse proxy
Plus ces ajouts essentiels :
- Configuration complète de Traefik — configuration prête pour la production avec support WebSocket
- Configuration des Task Runners — exigence 2025 pour la compatibilité future
- Bonnes pratiques de production — limites de ressources, healthchecks, en-têtes de sécurité, surveillance
- 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=268435456pour les problèmes de données d'exécution (256 Mo pour 8 Go+ de RAM) - Définir
WEBHOOK_URL=https://your-domain.compour les problèmes de webhooks - Définir
N8N_RUNNERS_ENABLED=truepour éliminer les avertissements de dépréciation - Utiliser
N8N_DEFAULT_BINARY_DATA_MODE=filesystempour économiser environ 100 Mo de RAM
Pour le déploiement en production :
- Utilisez notre docker-compose.yml complet avec la configuration Traefik
- Ne sautez pas le middleware WebSocket — absolument requis pour les webhooks
- Incluez PostgreSQL pour de meilleures performances sous charge
- Définissez des limites de ressources appropriées en fonction de la capacité de votre serveur
- Implémentez des healthchecks pour la récupération automatique
Pour les utilisateurs de Traefik (CRITIQUE) :
- Le middleware WebSocket est non négociable pour la fonctionnalité webhook
- Définissez la limite de taille du corps de requête égale ou supérieure à la taille du payload
- 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 2025 | Ce guide |
|---|---|---|
| Correctif données d'exécution | Détaillé | Inclus + mesures de ressources |
| Correctif webhook | Détaillé | Inclus + intégration Traefik |
| Configuration Traefik | Non couvert | Configuration complète |
| Support WebSocket | Non couvert | Mis en avant |
| Task runners | Non couvert | Exigence 2025 |
| Docker-compose combiné | Séparés | Prêt pour la production |
| Mesures de ressources | Théoriques | Données de tests réels |
| Variables d'environnement | Couvertes | Ré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 task runner confirmé dans la liste des processus
- Endpoints HTTP testés et accessibles
- Configurations validées comme fonctionnelles
Prochaines étapes
- Choisissez votre scénario :
- Développement : configuration minimale
- Derrière un reverse proxy : correctif webhook + task runners
- Production : configuration complète avec Traefik (recommandé)
- 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
- Validez :
- Vérifiez que HTTPS fonctionne avec un certificat valide
- Vérifiez que les URLs de webhooks affichent le bon format
- Testez avec un grand ensemble de données (si nécessaire)
- Confirmez que les task runners sont enregistrés
- Surveillez :
- Observez l'utilisation des ressources avec
docker stats - Mettez en place des alertes de healthcheck (surveillance externe)
- Implémentez la rotation des logs pour éviter de remplir le disque
- Planifiez des sauvegardes régulières des volumes de données
- Observez l'utilisation des ressources avec
Ressources associées
De juin 2025 :
- Résoudre l'erreur n8n « Existing execution data is too large » — Guide de dépannage approfondi
- Corriger les problèmes de webhooks n8n — Guide complet de débogage des webhooks
Documentation officielle de n8n :
- Configuration des URLs de webhooks
- Référence des variables d'environnement
- Task Runners
- Gestion des données binaires
- Mise à l'échelle des données d'exécution
Questions ou problèmes ?
Si vous rencontrez des problèmes non couverts par ce guide :
- Consultez nos articles détaillés de dépannage de juin 2025 pour des conseils supplémentaires
- Consultez la documentation officielle de n8n pour les dernières fonctionnalités
- Recherchez sur les forums de la communauté n8n des problèmes similaires
- Consultez la section Dépannage ci-dessus pour les problèmes courants
- Contactez tva pour un accompagnement professionnel à l'implémentation
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 l'implémentation ?
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 implémentons 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é