#Présentation
L’automatisation ne devrait pas être difficile ni risquée. Si vous avez déjà essayé d'assembler des outils avec des scripts personnalisés ou des zaps SaaS payants, vous connaissez la difficulté : logique fragile, dépendance vis-à-vis d'un fournisseur et coûts croissants. n8n corrige cela. Il s'agit d'une plate-forme d'automatisation open source auto-hébergable qui connecte vos applications et API à un constructeur visuel clair, tout en vous donnant un contrôle total.
Dans ce guide, vous apprendrez comment installer n8n sur macOS avec Docker Desktop de la bonne manière : stockage persistant, PostgreSQL (et non SQLite), informations d'identification chiffrées, webhooks sécurisés et routines de mise à niveau/sauvegarde propres. Nous veillerons à ce que les choses soient rapides et conviviales pour les débutants sans omettre les détails de production. À la fin, vous disposerez d'un hub d'automatisation local fiable que vous pourrez utiliser pour un travail réel (tester des webhooks, créer des flux de capture de leads ou orchestrer des pipelines d'IA), puis promouvoir sur un serveur en toute confiance.
Ce que vous construirez
- Une instance n8n locale exécutée dans des conteneurs Docker
- Base de données PostgreSQL pour un stockage durable
- Un dossier de projet bien rangé avec des volumes pour les sauvegardes et les exportations compatibles Git
- Un webhook fonctionnel et une automatisation simple que vous pouvez réutiliser n'importe où
- Extras facultatifs (travailleurs de file d'attente Redis, HTTPS, tunnel pour les webhooks publics)
À qui s'adresse ce guide
* Développeurs qui souhaitent un environnement local sécurisé pour créer et tester des automatisations
- Créateurs et spécialistes du marketing qui ont besoin de flux de travail de style Zapier sans la facture mensuelle * Équipes qui prévoient d'auto-héberger n8n plus tard mais souhaitent démarrer sur un Mac aujourd'hui
Prérequis
- macOS (Apple Silicon ou Intel)
- Docker Desktop installé et en cours d'exécution
- Confort de base du terminal
- (Facultatif) Homebrew pour installer des extras comme ngrok ou Cloudflare Tunnel
Vue d'ensemble (Pourquoi Docker + Postgres)
Pourquoi Docker ? Cohérence. Vous bénéficiez du même environnement localement et en production : pas de drame du type « travaille sur ma machine ». Pourquoi PostgreSQL ? Il est robuste et privilégié par la production. SQLite convient aux tests rapides, mais Postgres maintient vos flux de travail, journaux d'exécution et informations d'identification solides et récupérables. Pourquoi le local d'abord ? Vous pouvez itérer en toute sécurité. Une fois votre flux de travail stable, vous pouvez déplacer la configuration exacte vers un VPS sans presque aucune modification.
Étape 1 : Créer un projet propre
Ouvrez Terminal et créez un dossier dédié :
mkdir -p ~/n8n-stack/{n8n_data,db_data}
cd ~/n8n-pile
n8n_datastocke la configuration, les informations d'identification et les exportations n8ndb_datastocke vos fichiers de base de données PostgreSQL- Les garder côte à côte simplifie les sauvegardes (copiez simplement le dossier)
Étape 2 : Ajouter des variables d'environnement
Créez un fichier .env dans ~/n8n-stack. Ces valeurs configurent vos conteneurs et gardent les secrets hors du contrôle de version.
# ---- Noyau n8n ----
N8N_HOST=hôte local
N8N_PORT=5678
N8N_PROTOCOL=http
NODE_ENV=production
# Utilisez une longue chaîne aléatoire (stockez-la dans votre gestionnaire de mots de passe)
N8N_ENCRYPTION_KEY=CHANGE_ME_TO_A_LONG_RANDOM_64_CHAR_STRING
# Paramètres de confidentialité et UX
N8N_USER_MANAGEMENT_DISABLED=faux
N8N_DIAGNOSTICS_ENABLED=faux
N8N_PERSONALIZATION_ENABLED=faux
# Entretien ménager de l'exécution (garde la base de données mince)
EXECUTIONS_DATA_PRUNE=vrai
EXECUTIONS_DATA_MAX_AGE=336 # heures (14 jours)
EXECUTIONS_DATA_PRUNE_MAX_COUNT=10 000
# ---- base de données ----
DB_TYPE=postgresdb
DB_POSTGRESDB_HOST=base de données
DB_POSTGRESDB_PORT=5432
DB_POSTGRESDB_DATABASE=n8n
DB_POSTGRESDB_USER=n8n_user
DB_POSTGRESDB_PASSWORD=CHANGE_THIS_STRONG_PASSWORD
# ---- mode file d'attente (facultatif) ----
N8N_EXECUTIONS_MODE=régulier
QUEUE_BULL_REDIS_HOST=redis
QUEUE_BULL_REDIS_PORT=6379
Conseil de pro : Générez une clé sécurisée directement dans Terminal :
python3 - <<'PY'
importer des secrets, chaîne
alphabet = chaîne.ascii_letters + chaîne.chiffres + chaîne.ponctuation
print(''.join(secrets.choice(alphabet) for _ in range(80)))
PY
Collez la sortie dans N8N_ENCRYPTION_KEY.
Étape 3 : Créer le fichier Docker Compose
Ajoutez un docker-compose.yml dans le même dossier :
version : "3.8"
prestations :
n8n :
image : n8nio/n8n : dernière
redémarrage : à moins d'être arrêté
fichier_env : .env
ports :
- "5678:5678"
environnement :
- WEBHOOK_URL=${N8N_PROTOCOL}://${N8N_HOST} :${N8N_PORT}/
tomes :
- ./n8n_data:/home/node/.n8n
cela dépend :
- base de données
base de données :
image : postgres : 15
redémarrage : à moins d'être arrêté
environnement :
- POSTGRES_USER=${DB_POSTGRESDB_USER}
- POSTGRES_PASSWORD=${DB_POSTGRESDB_PASSWORD}
- POSTGRES_DB=${DB_POSTGRESDB_DATABASE}
tomes :
- ./db_data:/var/lib/postgresql/data
# Facultatif : activer plus tard pour les exécutions en parallèle/en file d'attente
# redis :
# image : redis:7-alpine
# redémarrage : à moins d'être arrêté
Pourquoi cette mise en page fonctionne :
- Le conteneur n8n conserve tout ce qui est important dans
./n8n_data - Les données Postgres se trouvent dans
./db_data env_filegarde les secrets en dehors de YAML et de Git
Étape 4 : Démarrer n8n
Depuis ~/n8n-stack :
docker compose -d
ouvrez http://localhost:5678
L'écran Configuration du propriétaire s'affiche. Créez votre compte administrateur avec un mot de passe fort.
Étape 5 : Verrouillez vos paramètres de base
Accédez à Paramètres → Général et confirmez :
- Fuseau horaire : définissez votre heure locale
- URL du webhook :
http://localhost:5678/pour les tests locaux - Exécutions : élagage activé (déjà défini via
.env)
Enregistrez les modifications.
Étape 6 : Testez un Webhook (votre première automatisation)
-
Cliquez sur Créer un workflow → Repartir de zéro
-
Ajouter un nœud Webhook
- Méthode HTTP :
POST - Chemin :
bonjour(ou quittez le chemin automatique)
- Méthode HTTP :
-
Ajoutez le nœud Répondre au Webhook
-
Réponse : JSON *Corps :
{ "ok": vrai, "reçu": "{{$json.body.ping || 'pong'}}" }
-
-
Connectez Webhook → Répondre au Webhook
-
Cliquez sur Écouter l'événement de test sur le nœud Webhook.
-
Dans Terminal :
curl -X POST "http://localhost:5678/webhook-test/<votre-id>" \
-H "Type de contenu : application/json" \
-d '{"ping": "pong"}'
Vous verrez la requête arriver dans la sortie du nœud et recevrez une réponse JSON « 200 ». Cliquez sur Activer pour obtenir une URL de production que vous pouvez appeler même lorsque l'éditeur n'écoute pas.
Étape 7 : exposez votre Webhook publiquement (facultatif, pratique)
Lorsque vous souhaitez tester des webhooks depuis des services externes (formulaires, Stripe, GitHub), utilisez un tunnel sécurisé.
Option A — ngrok
brasser installer ngrok/ngrok/ngrok
ngrok http http://localhost:5678
Option B — Cloudflare Tunnel (gratuit, stable)
Brew installer cloudflare/cloudflare/cloudflared
tunnel cloudflared --url http://localhost:5678
Copiez l'URL HTTPS qu'il vous donne. Dans n8n Paramètres → Général, définissez temporairement Webhook URL sur cette valeur afin que vos URL de production utilisent HTTPS.
Étape 8 : Construire une automatisation simple mais significative
Voici un démarreur réel et utile : Uptime & Error Watchdog.
- Toutes les 5 minutes : pingez une liste d'URL
- Si un renvoie
>= 400, envoyez une alerte Slack avec l'URL et le code d'état
Importez le workflow ci-dessous (n8n → Importer → coller JSON). Modifiez ensuite la liste d'URL et la chaîne Slack.
{
"name": "Chien de surveillance de la disponibilité et des erreurs",
"nœuds": [
{
"paramètres": {
"triggerTimes": { "item": [ { "mode": "everyX", "unit": "minutes", "value": 5 } ] }
},
"identifiant": "Cron",
"name": "Cron (tous les 5 m)",
"type": "n8n-nodes-base.cron",
"typeVersion": 1,
"position": [220, 280]
},
{
"paramètres": {
"functionCode": "const urls = [\n 'https://www.ramlit.com/',\n 'https://www.colorpark.io/',\n 'https://www.xcybersecurity.io/',\n 'https://www.mejba.me/'\n];\nreturn urls.map(u => ({ url: u }));"
},
"id": "Graine",
"name": "URL de départ",
"type": "n8n-nodes-base.fonction",
"typeVersion": 2,
"position": [440, 280]
},
{
"paramètres": {
"url": "={{$json.url}}",
"responseFormat": "chaîne",
"options": { "ignoreResponseCode": vrai, "timeout": 10000 }
},
"identifiant": "HTTP",
"name": "Vérification HTTP",
"type": "n8n-nodes-base.httpRequest",
"typeVersion": 4,
"position": [660, 280]
},
{
"paramètres": {
"conditions": {
"number": [ { "value1": "={{$json.statusCode}}", "opération": "largerEqual", "value2": 400 } ]
}
},
"id": "SI",
"name": "IF erreur (>=400)",
"type": "n8n-nodes-base.if",
"typeVersion": 1,
"position": [880, 280]
},
{
"paramètres": {
"channel": "#alertes",
"text": "Alerte de disponibilité : {{$json.url}} a renvoyé HTTP {{$json.statusCode}}"
},
"id": "Slack",
"name": "Alerte Slack",
"type": "n8n-nodes-base.slack",
"typeVersion": 1,
"position": [1100, 240],
"credentials": { "slackApi": { "id": "replace-in-ui" } }
}
],
"connexions": {
"Cron (tous les 5 mois)": { "main": [ [ { "node": "URL de départ", "type": "main", "index": 0 } ] ] },
"URL de départ": { "main": [ [ { "node": "HTTP Check", "type": "main", "index": 0 } ] ] },
"HTTP Check": { "main": [ [ { "node": "IF error (>=400)", "type": "main", "index": 0 } ] ] },
"IF error (>=400)": { "main": [ [ { "node": "Slack Alert", "type": "main", "index": 0 } ], [] ] }
}
}
Pourquoi c'est utile : Vous détecterez rapidement les temps d'arrêt ou les erreurs de routage, avant les clients. Étendez-le en enregistrant les échecs dans Google Sheets ou Notion.
Étape 9 : Identifiants, confidentialité et bases de sécurité
Même localement, traitez les secrets avec précaution :
- Stockez les jetons API dans Credentials (ils sont cryptés avec votre
N8N_ENCRYPTION_KEY). - Pour les webhooks entrants, ajoutez un en-tête secret (par exemple,
X-Webhook-Secret) et vérifiez-le avec un nœud Function. - Gardez les diagnostics et la personnalisation désactivés pour des raisons de confidentialité.
- Utilisez un gestionnaire de mots de passe pour stocker vos secrets
.env: ne les confiez pas à Git.
Étape 10 : Sauvegardes et exportations de workflow
Vos atouts les plus importants se trouvent à deux endroits :
~/n8n-stack/n8n_data(configuration n8n et magasin d'informations d'identification)~/n8n-stack/db_data(données Postgres)
Sauvegarde manuelle rapide :
- Arrêter les conteneurs :
docker compose down - Copiez l'intégralité du dossier
~/n8n-stacksur un lecteur sécurisé ou S3 - Recommencez :
docker compose up -d
Exporter les workflows vers un seul fichier JSON (idéal pour Git) :
docker exec -it $(docker ps --filter name=n8n -q) \
n8n export:workflow --all --output=/home/node/.n8n/exports.json
# Le fichier apparaîtra à l'intérieur de ./n8n_data
Étape 11 : Mettre à niveau n8n en toute sécurité
- Exportez vos workflows (
exports.json) - Faites une copie rapide des dossiers
n8n_dataetdb_data - Extrayez la dernière image et recréez :
docker compose pull
docker compose -d
Si quelque chose ne va pas, vous pouvez revenir en arrière en échangeant vos dossiers de sauvegarde.
Étape 12 : Amélioration facultative des performances (Workers + Redis)
Lorsque les flux de travail deviennent lourds (appels IA, téléchargements de fichiers, API lentes), passez en mode file d'attente et générez des nœuds de calcul.
-
Décommentez le service
redisdansdocker-compose.yml*Défini dans.env:N8N_EXECUTIONS_MODE=file d'attente -
Démarrer les services et un travailleur :
docker compose -d
docker compose run --no-deps --name n8n-worker-1 \
-e N8N_EXECUTIONS_MODE=file d'attente \
-e QUEUE_BULL_REDIS_HOST=redis\
n8n n8n travailleur
Vous pouvez exécuter plusieurs travailleurs pour une exécution parallèle.
Étape 13 : Du Mac à la production (quand vous êtes prêt)
La beauté de Docker est que la promotion est simple. Sur un VPS (ou dans Kubernetes) :
- Réutilisez les mêmes images et variables d'environnement
- Mettez n8n derrière Caddy/Nginx avec HTTPS (Let's Encrypt)
- Ajoutez Cloudflare Access ou votre SSO pour une interface utilisateur d'administration sécurisée
- Planifiez des sauvegardes régulières de la base de données Postgres et de
n8n_data
Vos apprentissages locaux évoluent avec vous, aucune reconstruction n'est nécessaire.
Pièges courants (et solutions rapides)
** « Port déjà utilisé. » **
Modifiez N8N_PORT dans .env et le mappage ports dans docker-compose.yml, puis docker compose up -d.
** « Autorisation refusée » sur les volumes.** Corriger la propriété/autorisations :
chmod -R 775 ~/n8n-stack/n8n_data ~/n8n-stack/db_data
Erreurs d'URL de test du webhook.
- Utilisez l'URL de test uniquement lorsque « Écouter l'événement de test » est actif.
- Après avoir cliqué sur Activer, utilisez l'URL de production.
Grande croissance de la base de données.
- Continuez à tailler (déjà configuré).
- Évitez de sauvegarder des données binaires volumineuses dans les nœuds ; utilisez S3/Drive lorsque cela est possible.
Comparaisons : Pourquoi n8n contre Zapier/Make ?
- Contrôle des coûts : n8n est open source et auto-hébergable – évolutif sans pénalités par zap.
- Flexibilité : logique au niveau du code via les nœuds de fonction ; créez des nœuds personnalisés si nécessaire.
- Contrôle des données : exécuté sur votre matériel ; s'aligner sur la conformité ou les demandes des clients.
- Portabilité : La configuration Dockerisée reflète la production : changez facilement d'environnement.
Cas d'utilisation réels que vous pouvez créer ensuite
- Admission de leads : Webhook → Normaliser → Notifier Slack → Ajouter Google Sheets
- Daily AI Digest : Cron → API de recherche → Résumé OpenAI → Publier sur Notion
- Routage des incidents : Webhook GitHub/CI → Analyser les journaux → Alerte Slack/PagerDuty
- Finance Ops : Import CSV → nettoyer les données → stocker dans Postgres → rapport par e-mail
- Opérations de vente : Événement Stripe → enrichir avec CRM → notifier et identifier dans Slack
Chacun d'entre eux peut démarrer sur votre Mac et être mis en production ultérieurement avec des files d'attente et HTTPS.
Points à puces / Points à retenir
- Docker + Postgres vous offre un n8n stable et de type production sur macOS.
- Chiffrez les informations d'identification avec
N8N_ENCRYPTION_KEYet évitez de commettre des secrets. * Utilisez Tester les URL pendant l'écoute ; URL de production après activation. - Sauvegardez régulièrement
n8n_dataetdb_dataou exportez les flux de travail. - Ajoutez Redis + Workers lorsque les flux deviennent plus lourds ; vous gagnerez en parallélisme.
- Les tunnels (ngrok/Cloudflare) rendent les tests de webhooks externes simples et sécurisés.
- La promotion vers un VPS se fait principalement en copier-coller : même fichier Compose, périmètre plus fort.
Appel à l'action
Si vous êtes sérieux au sujet de l’automatisation, ne vous arrêtez pas à « bonjour tout le monde ». Choisissez un processus (admission de leads, alertes de disponibilité ou rapport quotidien d'IA) et expédiez-le dès aujourd'hui. Vous souhaitez un workflow de démarrage sur mesure (Slack + Sheets, ou résumé IA → Notion) ? Dites-moi vos outils de destination et je vous fournirai un JSON prêt à être importé que vous pourrez exécuter immédiatement.
🤝 Embaucher / Travailler avec moi :
- 🔗 Fiverr (builds personnalisés, intégrations, performances) : https://www.fiverr.com/s/EgxYmWD
- 🌐 Portfolio personnel Mejba : https://www.mejba.me
- 🏢 Ramlit Limitée : https://www.ramlit.com
- 🎨 Agence Créative ColorPark : https://www.colorpark.io
- 🛡 Services mondiaux xCyberSecurity : https://www.xcybersecurity.io
##FAQ
1) Puis-je utiliser SQLite au lieu de Postgres ? Vous pouvez, mais ce n’est pas idéal pour autre chose que des expériences rapides. Postgres est plus fiable, plus facile à sauvegarder et recommandé pour un travail réel.
2) Ai-je besoin de HTTPS sur mon Mac ? Pour le développement local, non. Si vous exposez publiquement des webhooks, utilisez un tunnel (ngrok/Cloudflare). Pour la production, placez n8n derrière un proxy inverse avec HTTPS.
3) Comment puis-je protéger mes flux de travail pendant les mises à niveau ? Exportez les workflows vers JSON, sauvegardez « n8n_data » et « db_data », puis effectuez la mise à niveau. Si quelque chose se casse, restaurez les dossiers.
4) Pourquoi mon URL de test ne fonctionne-t-elle pas après une minute ? Les URL de test ne fonctionnent que pendant que l'éditeur écoute les événements. Cliquez à nouveau sur « Écouter l'événement de test » ou utilisez l'URL de production après l'activation.
5) Puis-je exécuter plusieurs flux de travail en parallèle sur mon Mac ? Oui. Passez en mode file d'attente avec Redis et démarrez un ou plusieurs nœuds de calcul.
6) Comment puis-je me connecter à Slack, Google Sheets ou Notion ?
Créez des informations d'identification dans Credentials (OAuth ou token), puis sélectionnez-les dans le nœud. n8n les stocke cryptés à l'aide de votre N8N_ENCRYPTION_KEY.
7) N8n est-il adapté aux entreprises ? Oui, lorsqu'il est auto-hébergé correctement avec SSO/OIDC, HTTPS, sauvegardes et accès basé sur les rôles. La configuration de votre Mac reflète l’architecture que vous utiliserez en production.
8) Qu'en est-il des workflows d'IA ? n8n s'intègre à OpenAI et à d'autres fournisseurs. Ajoutez des nœuds de fonction pour des invites personnalisées ou des API en chaîne (recherche → résumer → publier) avec des tentatives et des délais d'attente.
Vous avez terminé. Vous avez installé n8n sur votre Mac avec Docker Desktop, vérifié les webhooks et appris une méthode axée sur la production pour créer des automatisations fiables. Maintenant, mettez-le au travail.