Automatise tes workflows comme un pro. Zapier mais en libre, sur ta machine.
n8n (prononcé "n-huit-n") est un outil qui permet d'automatiser des tâches entre différentes applications. En clair : tu lui dis quoi faire, et il le fait à ta place, automatiquement.
Imagine que tu reçois un email avec une facture en pièce jointe. Normalement, tu dois :
Avec n8n, tout ça se fait tout seul. Ton email arrive, et pouf : la facture est rangée, nommée correctement, et ton tableau est à jour.
Tu es un particulier :
Tu as une petite activité :
Tu es curieux et bricoleur :
| Sans n8n | Avec n8n |
|---|---|
| Tu fais les tâches répétitives à la main | Elles se font toutes seules |
| Tu vas sur 5 sites différents pour vérifier des infos | Tu reçois un résumé automatique |
| Tu oublies des rappels et des suivis | Tu es notifié au bon moment |
| Tu copies-colles des données entre applications | Les données passent toute seules |
| Tu perds du temps sur des tâches ennuyeuses | Tu te concentres sur ce qui compte vraiment |
Ce que n8n n'est pas :
n8n est un outil que tu installes sur ta propre machine (ou ton propre serveur). Ça veut dire :
En échange de this liberté, tu dois gérer l'installation et la maintenance. C'est pour ça que ce tutoriel existe : pour t'accompagner.
Trois solutions principales pour l'automatisation. Voici comment elles se comparent.
| Critère | n8n | Zapier | Make (Integromat) |
|---|---|---|---|
| Coût | Gratuit (self-hosted) | Freemium (limité) puis ~20$/mois | Freemium (limité) puis ~10$/mois |
| Self-hosted | ✅ Oui, sur ton serveur | ❌ Non, cloud uniquement | ❌ Non, cloud uniquement |
| Données | Restent chez toi | Passent par les serveurs Zapier | Passent par les serveurs Make |
| Intégrations | ~400+ nodes | ~6000+ apps | ~1500+ apps |
| Code custom | ✅ JavaScript complet | ⚠️ Limité (Python, JS) | ⚠️ Limité |
| Interface | Visuelle, technique | Très simple | Visuelle, plus complexe |
| Exécutions | Illimitées (self-hosted) | Limitées par plan | Limitées par plan |
| IA intégrée | ✅ Native (Ollama, OpenAI...) | ⚠️ Via partenaires | ⚠️ Via partenaires |
| Courbe d'apprentissage | Moyenne | Faible | Moyenne |
Zapier si :
Make si :
n8n si :
n8n se lance facilement avec Docker. C'est la méthode recommandée pour Windows.
Pour démarrer rapidement :
docker run -d --name n8n --restart=unless-stopped -p 5678:5678 -v n8n_data:/home/node/.n8n n8nio/n8n
n8n tourne sur le port 5678. Ouvre http://localhost:5678 dans ton navigateur.
-d : lance en arrière-plan (detached)--name n8n : nomme le conteneur pour le retrouver--restart=unless-stopped : redémarre automatiquement (sauf si tu l'arrêtes manuellement)-p 5678:5678 : expose le port 5678-v n8n_data:/home/node/.n8n : persiste les donnéesn8nio/n8n : l'image officiellePour une installation propre avec variables d'environnement, crée un docker-compose.yml :
services:
n8n:
image: n8nio/n8n:latest
container_name: n8n
restart: unless-stopped
ports:
- "5678:5678"
environment:
- N8N_HOST=localhost
- N8N_PORT=5678
- N8N_PROTOCOL=http
- NODE_ENV=production
- WEBHOOK_URL=http://localhost:5678/
- GENERIC_TIMEZONE=Europe/Paris
- TZ=Europe/Paris
volumes:
- n8n_data:/home/node/.n8n
- ./files:/files
volumes:
n8n_data:
Lance avec :
docker-compose up -d
| Variable | Description |
|---|---|
N8N_HOST |
Nom de domaine ou IP (ex: n8n.mon-domaine.fr) |
N8N_PORT |
Port interne (défaut: 5678) |
N8N_PROTOCOL |
http ou https |
WEBHOOK_URL |
URL complète pour les webhooks |
GENERIC_TIMEZONE |
Timezone pour les schedules (ex: Europe/Paris) |
N8N_BASIC_AUTH_ACTIVE |
Active l'authentification basique (défaut: true) |
N8N_BASIC_AUTH_USER |
Utilisateur pour l'auth basique |
N8N_BASIC_AUTH_PASSWORD |
Mot de passe pour l'auth basique |
Si tu veux que n8n puisse lire/écrire des fichiers sur ta machine :
volumes:
- n8n_data:/home/node/.n8n
- ./mes-fichiers:/data:ro # :ro = read-only
Dans n8n, le chemin sera /data/ pour accéder aux fichiers.
À la première connexion, n8n te demande de créer un compte propriétaire.
http://localhost:5678Va dans Settings → Settings pour configurer :
Pour protéger ton instance sans passer par le système de compte n8n :
environment:
- N8N_BASIC_AUTH_ACTIVE=true
- N8N_BASIC_AUTH_USER=admin
- N8N_BASIC_AUTH_PASSWORD=ton-mot-de-passe-securise
L'interface de n8n est divisée en plusieurs zones :
On va créer un workflow simple : Manual Trigger → Set → Console
message avec la valeur Hello World
┌─────────────┐ ┌─────────┐ ┌───────────┐
│ Manual │ │ Set │ │ Console │
│ Trigger │────▶│ message │────▶│ │
│ │ │ "Hello" │ │ Output │
└─────────────┘ └─────────┘ └───────────┘
Types de nodes :
Trigger Déclenche le workflow (Manual, Schedule, Webhook, etc.) Action Effectue une action (HTTP Request, Send Email, etc.) Logic Logique et contrôle (If, Switch, Loop, etc.) Output Résultat (Console, No-Op, etc.)
Pour accéder à n8n depuis l'extérieur avec HTTPS, utilise un reverse proxy.
Si tu utilises Nginx Proxy Manager (NPM) :
http://localhost:81)| Champ | Valeur |
|---|---|
| Domain Names | n8n.mon-domaine.fr |
| Scheme | http |
| Forward Hostname / IP | n8n (nom du container) ou host.docker.internal |
| Forward Port | 5678 |
Dans l'onglet SSL :
server {
listen 443 ssl http2;
server_name n8n.mon-domaine.fr;
ssl_certificate /etc/letsencrypt/live/n8n.mon-domaine.fr/fullchain.pem;
ssl_certificate_key /etc/letsencrypt/live/n8n.mon-domaine.fr/privkey.pem;
location / {
proxy_pass http://localhost:5678;
proxy_set_header Host $host;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
proxy_set_header X-Forwarded-Proto $scheme;
# WebSocket support
proxy_http_version 1.1;
proxy_set_header Upgrade $http_upgrade;
proxy_set_header Connection "upgrade";
}
}
Une fois le reverse proxy en place, mets à jour ton docker-compose.yml :
environment:
- N8N_HOST=n8n.mon-domaine.fr
- N8N_PORT=5678
- N8N_PROTOCOL=https
- WEBHOOK_URL=https://n8n.mon-domaine.fr/
Puis relance :
docker-compose down && docker-compose up -d
n8n peut s'intégrer avec des modèles de langage locaux via Ollama. C'est pratique pour de l'automatisation intelligente.
Si Ollama tourne sur la même machine que n8n (en Docker), utilise l'adresse spéciale Docker :
# Dans docker-compose.yml, ajoute un network ou utilise l'IP host
extra_hosts:
- "host.docker.internal:host-gateway"
# Ensuite dans n8n, Ollama URL = http://host.docker.internal:11434
Si tu mets Ollama et n8n dans le même fichier docker-compose :
services:
ollama:
image: ollama/ollama:latest
container_name: ollama
restart: unless-stopped
ports:
- "11434:11434"
volumes:
- ollama_data:/root/.ollama
n8n:
image: n8nio/n8n:latest
container_name: n8n
restart: unless-stopped
ports:
- "5678:5678"
environment:
- N8N_HOST=localhost
- N8N_PORT=5678
- N8N_PROTOCOL=http
volumes:
- n8n_data:/home/node/.n8n
volumes:
ollama_data:
n8n_data:
Dans n8n, l'URL Ollama sera : http://ollama:11434
http://host.docker.internal:11434 (ou http://ollama:11434)llama3, mistral)Voici 4 workflows concrets pour démarrer.
Recevoir une requête HTTP et envoyer une notification Discord.
┌─────────────┐ ┌─────────┐ ┌───────────┐
│ Webhook │ │ Edit │ │ Discord │
│ Trigger │────▶│ Fields │────▶│ Send │
│ (POST) │ │ │ │ Message │
└─────────────┘ └─────────┘ └───────────┘
Étapes :
notificationmessage{{ $json.body.message }}{{ $json.message }}curl -X POST http://localhost:5678/webhook/notification -d '{"message":"Test"}'Surveiller un flux RSS et recevoir les nouveaux articles par email.
┌─────────────┐ ┌─────────┐ ┌─────────┐ ┌───────────┐
│ Schedule │ │ RSS │ │ Filter │ │ Email │
│ Trigger │────▶│ Feed │────▶│ (if) │────▶│ Send │
│ (1h) │ │ Read │ │ │ │ │
└─────────────┘ └─────────┘ └─────────┘ └───────────┘
Étapes :
{{ $json.title }}{{ $json.content }}Appeler une API, traiter la réponse avec une IA locale, et formater le résultat.
┌─────────────┐ ┌─────────┐ ┌─────────┐ ┌───────────┐
│ Manual │ │ HTTP │ │ Ollama │ │ Set │
│ Trigger │────▶│ Request │────▶│ Chat │────▶│ Output │
│ │ │ (API) │ │ │ │ │
└─────────────┘ └─────────┘ └─────────┘ └───────────┘
Étapes :
llama3Résume ce texte : {{ $json.body }}Exécuter une tâche planifiée qui récupère des données et les stocke.
┌─────────────┐ ┌─────────┐ ┌──────────┐ ┌───────────┐
│ Schedule │ │ HTTP │ │ Write │ │ Local │
│ Trigger │────▶│ Request │────▶│ File │────▶│ File │
│ (daily) │ │ (API) │ │ │ │ Storage │
└─────────────┘ └─────────┘ └──────────┘ └───────────┘
Étapes :
data-{{ $now.format('yyyy-MM-dd') }}.json{{ $json }}n8n permet d'exporter/importer des workflows en JSON. Pour importer :
.jsonNe stocke jamais de mots de passe en clair dans les workflows. Utilise le système de Credentials de n8n :
N8N_ENCRYPTION_KEY.
Pour les secrets que tu ne veux pas mettre dans les workflows :
environment:
- N8N_ENCRYPTION_KEY=ta-cle-secrete-tres-longue
- N8N_USER_MANAGEMENTJwtSecret=un-autre-secret-pour-jwt
# Arrêter le conteneur
docker-compose down
# Tirer la nouvelle image
docker pull n8nio/n8n:latest
# Relancer
docker-compose up -d
Si le port est pris par une autre application :
# Vérifier ce qui utilise le port
docker run -d --name n8n -p 5679:5678 n8nio/n8n
# Accès : http://localhost:5679
Vérifie les logs :
docker logs n8n --tail 100
Erreurs courantes :
Si les webhooks ne sont pas accessibles depuis l'extérieur :
WEBHOOK_URL correspond à ton URL publique# Dans docker-compose.yml
environment:
- WEBHOOK_URL=https://n8n.mon-domaine.fr/
- N8N_HOST=n8n.mon-domaine.fr
- N8N_PROTOCOL=https
Si n8n est lent :
LOG_LEVEL=warn