Comprendre les Task Runners dans n8n
Les task runners sont des mécanismes permettant d’exécuter du code JavaScript défini dans les nœuds Code de manière sécurisée et performante. Ils fonctionnent en coordination avec un task broker et un task requester. Le task broker (généralement l’instance principale de n8n) reçoit les demandes d’exécution de tâches du task requester (comme un nœud Code) et les distribue aux task runners disponibles via une connexion WebSocket.
Modes de fonctionnement des Task Runners
1. Mode Interne
Dans ce mode, l’instance n8n lance le task runner en tant que processus enfant. Cela signifie que le runner partage le même environnement que n8n, ce qui peut être suffisant pour des charges de travail légères.
2. Mode Externe
Ici, un orchestrateur externe (comme Kubernetes) lance le task runner, généralement en tant que conteneur sidecar. Ce mode offre une isolation complète entre n8n et le code exécuté, améliorant ainsi la sécurité et la scalabilité. Chaque conteneur n8n (principal ou worker) nécessite son propre task runner dans ce mode.
Configuration des Task Runners en Mode Externe
1. Configurer l’Instance n8n
Définissez les variables d’environnement suivantes :
- N8N_RUNNERS_ENABLED=true
- N8N_RUNNERS_MODE=external
- N8N_RUNNERS_AUTH_TOKEN=<secret_partagé>
- N8N_RUNNERS_BROKER_LISTEN_ADDRESS=0.0.0.0
Ces paramètres activent les task runners en mode externe et permettent aux runners de se connecter au broker.
2. Configurer le Conteneur du Task Runner
Utilisez l’image Docker officielle de n8n et définissez :
- Commande : [« /usr/local/bin/task-runner-launcher », « javascript »]
- Probe de vivacité : GET /healthz sur le port 5680
Variables d’environnement à définir :
- N8N_RUNNERS_AUTH_TOKEN=<secret_partagé>
- N8N_RUNNERS_TASK_BROKER_URI=localhost:5679
- N8N_RUNNERS_MAX_CONCURRENCY=5
- N8N_RUNNERS_AUTO_SHUTDOWN_TIMEOUT=15
- NODE_OPTIONS=–max-old-space-size=<limite>
- GENERIC_TIMEZONE=<votre_timezone>
Le launcher démarre le runner à la demande, réduisant ainsi l’utilisation des ressources lorsqu’aucune tâche n’est en attente.
🧰 Bonnes Pratiques pour les Task Runners
- Isolation : Utilisez le mode externe pour isoler le code utilisateur du cœur de n8n, renforçant ainsi la sécurité.
- Modules Externes : Si vos nœuds Code utilisent des modules npm personnalisés, assurez-vous qu’ils sont installés dans l’environnement du task runner. Cela peut nécessiter la personnalisation de l’image Docker de n8n pour inclure ces modules.
- Variables d’Environnement : Utilisez NODE_PATH pour définir le chemin des modules Node.js, garantissant que les task runners peuvent accéder aux modules nécessaires.
- Surveillance : Configurez des probes de santé pour surveiller l’état des task runners et redémarrer automatiquement en cas de défaillance.
En intégrant les task runners dans votre architecture n8n, vous améliorez la gestion des charges de travail intensives et renforcez la sécurité de l’exécution du code utilisateur.