Comment installer et utiliser n8n avec Docker ?
Qu'est-ce que n8n ?
n8n est une plateforme d’automatisation open-source qui permet de créer des workflows visuels pour connecter des applications et automatiser des tâches répétitives.
Dans n8n, un workflow est un ensemble d’actions automatisées, reliées entre elles, qui s’exécutent dans un ordre défini pour accomplir une tâche précise.
Grâce à son interface graphique et à ses nombreux « nodes » intégrés, n8n facilite l’intégration entre des services web, des bases de données, des APIs et des outils internes.
Lorsqu’il est associé à Docker, n8n devient particulièrement simple à installer, à maintenir et à mettre à jour.
Installer n8n !
Vérifier que Docker est bien installé
Pour commencer à utiliser Docker pour installer n8n, il faut vérifier d’abord que Docker est bien installé sur votre ordinateur.
docker -v
Si Docker est installé, un numéro de version devrait apparaître :
Docker version 28.5.1, build e180ab8
Utiliser un compose.yml
Maintenant que nous sommes certains que Docker est bien installé, nous pouvons créer le fichier compose.yml.
services:
n8n:
image: n8nio/n8n:latest
container_name: n8n
ports:
- "5678:5678"
environment:
- GENERIC_TIMEZONE=${GENERIC_TIMEZONE}
- N8N_SECURE_COOKIE=false
volumes:
- ./data:/home/node/.n8n
restart: unless-stopped
Nous utilisons une variable d'environnement qu'il nous faut définir dans un fichier .env que nous allons créer.
GENERIC_TIMEZONE=Europe/Paris
Comprendre le contenu du fichier compose.yml
Nous allons principalement expliquer le contenu de la partie environment.
GENERIC_TIMEZONE
C'est le fuseau horaire utilisé par n8n.
N8N_SECURE_COOKIE
Cette option désactive la sécurité du cookie. C'est utile quand on utilise n8n sans HTTPS. Ce qui est le cas ! 😉
Ouvrir n8n
On peut maintenant utiliser la commande docker-compose.
Dans le dossier du projet, tapez la commande suivante :
docker-compose up
On nous indique, que nous pouvons utiliser l'URL http://localhost:5678 !
n8n | [license SDK] Skipping renewal on init: license cert is not initialized
n8n | Version: 1.118.2
n8n |
n8n | Editor is now accessible via:
n8n | http://localhost:5678
Tapez donc cette URL dans un navigateur.
Inscrivez-vous !
Ensuite, on vous posera quelques questions. Vous n'êtes pas obligés d'y répondre.
Enfin, on va vous proposer une licence gratuite.
Après toute ces étapes, l'interface qui vous permettra de créer un workflow dans n8n apparaîtra.
Utiliser n8n !
Se connecter à notre compte
Si vous avez été déconnecté, reconnectez-vous en entrant votre adresse e-mail et votre mot de passe.
Et ensuite, pour créer un nouveau workflow, cliquez sur le bouton Create workflow.
Qu'allons nous faire ?
Nous allons créer un workflow avec n8n qui permettra à cet outil de vérifier si un site est toujours en marche ou s'il est en panne.
1 - Schedule Trigger
Nous allons commencer par créer un Trigger.
Un Trigger est un noeud déclencheur qui démarre automatiquement un workflow lorsqu'un événement se produit.
Ajouter Schedule Trigger
Nous allons utiliser Schedule Trigger pour définir la fréquence à laquelle le workflow devra se lancer automatiquement.
Pour cela, cliquez sur Add first step ... au centre et choisissez Schedule Trigger.
Paramétrer Schedule Trigger
En cliquant sur Schedule Trigger, vous accéderez à plusieurs paramètres liés à ce noeud. Ici, il faut juste définir la fréquence.
La fréquence sera de 10 secondes ! 👍
Pour retourner à notre workflow, vous pouvez cliquez sur Back to canvas en haut à gauche.
Notre premier noeud a été créé.
2 - HTTP Request
Ajouter HTTP Request
Maintenant, nous allons utiliser HTTP Request qui est un noeud de type Action, utilisé, entre autres, pour effectuer un appel HTTP à un site internet ou à une API.
Paramétrer HTTP Request
Nous allons également utiliser des paramètres pour bien configurer ce noeud.
Nous avons définit la méthode GET et insérer une URL :
http://nginx
Pourquoi cette URL ? Vous le comprendrez plus tard !
Nous devons également cliquez sur Add option pour activer une option qui ne sera utile.
Nous demandons à n8n d'inclure dans la réponse les Headers et les Status car nous en aurons besoin.
Maintenant, cliquez sur Settings en haut et activez l’option qui permet au flux de continuer en cas d’erreur, car nous devons gérer ces erreurs.
Lorsque toutes ces options ont été activés, retournez à votre workflow (grâce à Back to canvas).
⚠️ Veuillez vous assurer que toutes les options sont activées, sinon notre workflow ne fonctionnera pas correctement.
Sauvegarder
N'oubliez pas de sauvegarder grâce au bouton Save en haut à droite.
Simuler le site internet http://nginx avec Docker
Dans les paramètres de HTTP Request, nous avons indiqué l'URL http://nginx pour simuler un site internet. Nous aurions très bien pu mettre le nom de domaine d'un vrai site internet. Mais puisque l'objectif de ce workflow est de vérifier si un site est toujours en marche ou s'il est en panne, il nous faut pouvoir le « mettre en panne ».
Nous allons donc ajouter un conteneur nginx dans notre compose.yml.
services:
n8n:
image: n8nio/n8n:latest
container_name: n8n
ports:
- "5678:5678"
environment:
- GENERIC_TIMEZONE=${GENERIC_TIMEZONE}
- N8N_SECURE_COOKIE=false
volumes:
- ./data:/home/node/.n8n
nginx:
image: nginx:alpine
container_name: nginx-site
ports:
- "3000:80"
On arrête et on redémarré grâce à la commande suivant :
docker compose down && docker compose up
Maintenant, si nous utilisons http://localhost:3000 la page par défaut du serveur web Nginx devrait apparaître.
Donc, nous avons un site pour nos tests. 👍
3 - If
Ajouter If
Ajoutons un autre noeud appelé If. Il permet de vérifier une condition et d’orienter le flux en fonction du résultat.
Paramétrer If
Analysons, l'interface des paramètres car il y a des choses intéressantes.
-
Le centre nous permet de paramétrer le noeud
If. -
À gauche, nous avons des informations que nous renvoie le noeud précédent et que nous pouvons utiliser. Il suffit de déplacer les champs correspondants.
-
À droite, nous pouvons vérifier ce que renvoie notre noeud
If. -
En haut à droite, nous avons un bouton
Execute stepqui permet de tester l'étape du noeud
Notre exercice consiste à vérifier que le code HTTP retourné est bien égal à 200.
Comme vous pouvez le constater, il a fallu utiliser l'option Convert types where required pour que cela fonctionne.
Si on Back to canvas, on retrouve notre workflow n8n avec nos trois noeud.
Cette partie est particulièrement intéressante. Notre workflow vérifie désormais toutes les 10 secondes si le site http://nginx est opérationnel. Si c’est le cas, le noeud (qui n’existe pas encore) de la branche true sera exécuté. Dans le cas contraire, le noeud (qui n’existe pas encore) de la branche false sera exécuté.
Pour que notre workflow puisse nous notifier du résultat après chaque branche, nous pourrions utiliser un nouveau noeud pour envoyer un email. Cela est possible mais la configuration va être longue et ne peut être abordée dans cette vidéo car je ne souhaite pas en plus indiqué mes données personnelles ou créer un nouveau compte juste pour l'exercice.
Par conséquent, je vais opter pour une autre méthode : les notifications.
Préparer les notifications
Je vais créer un système de notification basé sur Node.js. Par conséquent, vous devez également avoir Node.js d'installé dans votre machine pour pouvoir l'utiliser.
Pour cela, je commence par taper la commande suivante dans le dossier du projet.
npm init -y && npm install node-notifier
Cette commande génère un fichier package.json indispensable à la création d’un serveur et installe le paquet node-notifier, permettant d’envoyer des notifications sur notre ordinateur.
Ensuite, on ajoute un fichier server.js !
Voici à quoi devrait ressembler notre projet :
n8n/
|-- data/
|-- node_modules/
|-- .env
|-- compose.yml
|-- package-lock.json
|-- package.json
|-- server.js
Dans le fichier server.js ajouter le code suivant :
const http = require("http");
const { execFile } = require("child_process");
const PORT = 8787;
const server = http.createServer((req, res) => {
if (req.method === "POST" && req.url === "/notify") {
let body = "";
req.on("data", chunk => {
body += chunk;
});
req.on("end", () => {
try {
const data = JSON.parse(body);
const title = (data.title || "n8n").replace(/"/g, '\\"');
const subtitle = (data.subtitle || "").replace(/"/g, '\\"');
const message = (data.message || "").replace(/"/g, '\\"');
const script = `display notification "${message}" with title "${title}" subtitle "${subtitle}"`;
execFile("osascript", ["-e", script], (err) => {
if (err) {
res.writeHead(500, { "Content-Type": "application/json" });
return res.end(JSON.stringify({ ok: false, error: String(err) }));
}
res.writeHead(200, { "Content-Type": "application/json" });
res.end(JSON.stringify({ ok: true }));
});
} catch (e) {
res.writeHead(400, { "Content-Type": "application/json" });
res.end(JSON.stringify({ ok: false, error: e.message }));
}
});
} else {
res.writeHead(404);
res.end("Not found");
}
});
server.listen(PORT, "0.0.0.0", () => {
console.log(`Notification server running on http://localhost:${PORT}`);
});
Et dans un terminal, lancez le serveur :
node server.js
Pour effectuer un test, nous devons utiliser une commande spécifique (curl), car la méthode à employer est POST et non GET.
curl -X POST http://localhost:8787/notify \
-H "Content-Type: application/json" \
-d '{"title":"Test","message":"Hello depuis Node"}'
En principe, une notification devrait s’afficher.
Maintenant, il nous est possible d'utiliser tout ce système dans un noeud de n8n.
4 - HTTP Request pour les notifications
Intégrons un HTTP Request à chaque branche de notre If que l'on va adapter.
Étant donné que nous utilisons Docker, nous devons utiliser cette URL en POST : http://host.docker.internal:8787/notify.
Branche true
Branche false
Workflow final
Tester le workflow !
Pour tester le fonctionnement du workflow une seule fois, appuyez sur Execute workflow. Pour lancer ce workflow toutes les 10 secondes, activez-le.
Normalement, vous devriez voir les notifications (lorsque le serveur web Nginx est en fonctionne et lorsqu'il est en « panne »). 😊
