Introductie
Automatisering hoeft niet moeilijk of riskant te zijn. Als je ooit hebt geprobeerd tools samen te voegen met aangepaste scripts of betaalde SaaS-zaps, dan ken je de pijn: fragiele logica, leverancierslock-in en groeiende kosten. n8n lost dat op. Het is een open source, zelf-hostbaar automatiseringsplatform dat uw apps en API's verbindt met een overzichtelijke, visuele bouwer, terwijl u toch de volledige controle krijgt.
In deze handleiding leert u hoe u n8n op macOS met Docker Desktop op de juiste manier kunt installeren: permanente opslag, PostgreSQL (niet SQLite), gecodeerde inloggegevens, veilige webhooks en schone upgrade-/back-uproutines. We houden het snel en beginnersvriendelijk, zonder de productiedetails over te slaan. Uiteindelijk beschikt u over een betrouwbare lokale automatiseringshub die u voor het echte werk kunt gebruiken (het testen van webhooks, het opbouwen van leadscapture-stromen of het orkestreren van AI-pijplijnen) en vervolgens met vertrouwen kunt promoveren naar een server.
Wat je gaat bouwen
- Een lokale n8n-instantie die draait in Docker-containers
- PostgreSQL-database voor duurzame opslag
- Een opgeruimde projectmap met volumes voor back-ups en Git-vriendelijke exports
- Een werkende webhook en een eenvoudige automatisering die u overal kunt hergebruiken
- Optionele extra's (Redis-wachtrijwerkers, HTTPS, tunnel voor openbare webhooks)
Voor wie is deze gids bedoeld
- Ontwikkelaars die een veilige lokale omgeving willen om automatiseringen te bouwen en te testen
- Makers en marketeers die workflows in Zapier-stijl nodig hebben zonder de maandelijkse factuur
- Teams die van plan zijn om n8n later zelf te hosten, maar vandaag nog op een Mac willen beginnen
Vereisten
- macOS (Apple Silicon of Intel)
- Docker Desktop geïnstalleerd en actief
- Basis Terminal-comfort
- (Optioneel) Homebrew om extra's zoals ngrok of Cloudflare Tunnel te installeren
Het grote geheel (waarom Docker + Postgres)
Waarom Docker? Consistentie. Je krijgt dezelfde omgeving zowel lokaal als in de productie – geen ‘werk op mijn machine’-drama. Waarom PostgreSQL? Het is robuust en heeft de voorkeur voor productie. SQLite is prima voor snelle tests, maar Postgres houdt uw workflows, uitvoeringslogboeken en inloggegevens solide en herstelbaar. Waarom eerst lokaal? U kunt veilig herhalen. Zodra uw workflow stabiel is, kunt u de exacte configuratie vrijwel zonder wijzigingen naar een VPS verplaatsen.
Stap 1: Maak een schoon project
Open Terminal en maak een speciale map:
mkdir -p ~/n8n-stack/{n8n_data,db_data}
cd ~/n8n-stack
n8n_dataslaat n8n-configuratie, inloggegevens en exports opdb_dataslaat uw PostgreSQL-databasebestanden op- Door ze naast elkaar te houden, zijn back-ups eenvoudig (kopieer gewoon de map)
Stap 2: Omgevingsvariabelen toevoegen
Maak een .env-bestand in ~/n8n-stack. Deze waarden configureren uw containers en houden geheimen buiten versiebeheer.
# ---- n8n-kern ----
N8N_HOST=lokalehost
N8N_PORT=5678
N8N_PROTOCOL=http
NODE_ENV=productie
# Gebruik een lange willekeurige reeks (opslaan in uw wachtwoordbeheerder)
N8N_ENCRYPTION_KEY=CHANGE_ME_TO_A_LONG_RANDOM_64_CHAR_STRING
# Privacy- en UX-instellingen
N8N_USER_MANAGEMENT_DISABLED=onwaar
N8N_DIAGNOSTICS_ENABLED=onwaar
N8N_PERSONALIZATION_ENABLED=onwaar
# Uitvoering housekeeping (houdt DB slank)
EXECUTIONS_DATA_PRUNE=waar
EXECUTIONS_DATA_MAX_AGE=336 # uur (14 dagen)
EXECUTIONS_DATA_PRUNE_MAX_COUNT=10000
# ---- databank ----
DB_TYPE=postgresdb
DB_POSTGRESDB_HOST=db
DB_POSTGRESDB_PORT=5432
DB_POSTGRESDB_DATABASE=n8n
DB_POSTGRESDB_USER=n8n_gebruiker
DB_POSTGRESDB_PASSWORD=WIJZIG_THIS_STRONG_PASSWORD
# ---- wachtrijmodus (optioneel) ----
N8N_EXECUTIONS_MODE=normaal
QUEUE_BULL_REDIS_HOST=herdis
QUEUE_BULL_REDIS_PORT=6379
Pro tip: Genereer een veilige sleutel rechtstreeks in Terminal:
python3 - <<'PY'
geheimen importeren, string
alfabet = string.ascii_letters + string.cijfers + string.interpunctie
print(''.join(geheimen.keuze(alfabet) voor _ binnen bereik(80)))
PY
Plak de uitvoer in N8N_ENCRYPTION_KEY.
Stap 3: Maak het Docker Compose-bestand
Voeg een docker-compose.yml toe in dezelfde map:
versie: "3.8"
diensten:
n8n:
afbeelding: n8nio/n8n: nieuwste
herstarten: tenzij-gestopt
env_bestand: .env
poorten:
- "5678:5678"
omgeving:
- WEBHOOK_URL=${N8N_PROTOCOL}://${N8N_HOST}:${N8N_PORT}/
volumes:
- ./n8n_data:/home/node/.n8n
hangt af van:
- db
database:
afbeelding: postgres:15
herstarten: tenzij-gestopt
omgeving:
- POSTGRES_USER=${DB_POSTGRESDB_USER}
- POSTGRES_PASSWORD=${DB_POSTGRESDB_PASSWORD}
- POSTGRES_DB=${DB_POSTGRESDB_DATABASE}
volumes:
- ./db_data:/var/lib/postgresql/data
# Optioneel: later inschakelen voor parallelle/in de wachtrij geplaatste uitvoeringen
# opnieuw indienen:
# afbeelding: redis:7-alpine
# herstart: tenzij gestopt
Waarom deze lay-out werkt:
- De n8n-container bewaart al het belangrijke binnen
./n8n_data - Postgres-gegevens bevinden zich in
./db_data env_filebewaart geheimen buiten de YAML en buiten Git
Stap 4: Start n8n
Van ~/n8n-stack:
docker componeren -d
open http://localhost:5678
U ziet het scherm eigenaar instellen. Maak uw beheerdersaccount aan met een sterk wachtwoord.
Stap 5: Vergrendel uw basisinstellingen
Ga naar Instellingen → Algemeen en bevestig:
- Tijdzone: stel uw lokale tijd in
- Webhook-URL:
http://localhost:5678/voor lokaal testen - Uitvoeringen: snoeien ingeschakeld (al ingesteld via
.env)
Wijzigingen opslaan.
Stap 6: Rooktest een webhook (uw eerste automatisering)
-
Klik op Workflow maken → Helemaal opnieuw beginnen
-
Voeg het Webhook-knooppunt toe
- HTTP-methode:
POST - Pad:
hallo(of verlaat het automatische pad)
- HTTP-methode:
-
Voeg het knooppunt Reageren op Webhook toe
-
Reactie: JSON
-
Lichaam:
{ "ok": waar, "ontvangen": "{{$json.body.ping || 'pong'}}" }
-
-
Verbinden Webhook → Reageren op Webhook
-
Klik op Luister naar testgebeurtenis op het Webhook-knooppunt
-
In de terminal:
curl -X POST "http://localhost:5678/webhook-test/<uw-id>" \
-H "Inhoudstype: applicatie/json" \
-d '{"ping:pong"}'
U ziet het verzoek aankomen in de knooppuntuitvoer en ontvangt een '200' JSON-antwoord. Klik op Activeren om een productie-URL te krijgen die u kunt bellen, zelfs als de redacteur niet luistert.
Stap 7: Maak uw webhook openbaar (optioneel, handig)
Wanneer u webhooks van externe services (formulieren, Stripe, GitHub) wilt testen, gebruikt u een beveiligde tunnel.
Optie A — ngrok
brouw installeer ngrok/ngrok/ngrok
ngrok http://localhost:5678
Optie B — Cloudflare Tunnel (gratis, stabiel)
brouw installeer cloudflare/cloudflare/cloudflared
cloudflared tunnel --url http://localhost:5678
Kopieer de HTTPS-URL die u krijgt. Stel in n8n Instellingen → Algemeen tijdelijk Webhook-URL in op die waarde, zodat uw productie-URL's HTTPS gebruiken.
Stap 8: Bouw een eenvoudige maar significante automatisering
Hier is een echte, nuttige starter: Uptime & Error Watchdog.
- Elke 5 minuten: ping een lijst met URL's
- Als er een resultaat
>= 400is, stuur dan een Slack-waarschuwing met de URL en statuscode
Importeer de onderstaande workflow (n8n → Importeren → JSON plakken). Bewerk vervolgens de URL-lijst en het Slack-kanaal.
{
"name": "Uptime- en foutwatchdog",
"knooppunten": [
{
"parameters": {
"triggerTimes": { "item": [ { "modus": "everyX", "eenheid": "minuten", "waarde": 5 } ] }
},
"id": "Cron",
"name": "Cron (elke 5m)",
"type": "n8n-nodes-base.cron",
"typeVersie": 1,
"positie": [220, 280]
},
{
"parameters": {
"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": "Zaad",
"name": "Seed-URL's",
"type": "n8n-nodes-base.function",
"typeVersie": 2,
"positie": [440, 280]
},
{
"parameters": {
"url": "={{$json.url}}",
"responseFormat": "string",
"options": { "ignoreResponseCode": true, "time-out": 10000 }
},
"id": "HTTP",
"name": "HTTP-controle",
"type": "n8n-nodes-base.httpRequest",
"typeVersie": 4,
"positie": [660, 280]
},
{
"parameters": {
"voorwaarden": {
"number": [ { "value1": "={{$json.statusCode}}", "operation": "largerEqual", "value2": 400 } ]
}
},
"id": "ALS",
"name": "IF-fout (>=400)",
"type": "n8n-nodes-base.if",
"typeVersie": 1,
"positie": [880, 280]
},
{
"parameters": {
"channel": "#waarschuwingen",
"text": "Uptime-waarschuwing: {{$json.url}} heeft HTTP geretourneerd {{$json.statusCode}}"
},
"id": "Slap",
"name": "Slack-waarschuwing",
"type": "n8n-nodes-base.slack",
"typeVersie": 1,
"positie": [1100, 240],
"referenties": { "slackApi": { "id": "replace-in-ui" } }
}
],
"verbindingen": {
"Cron (elke 5m)": { "main": [ [ { "node": "Seed-URL's", "type": "main", "index": 0 } ] ] },
"Seed-URL's": { "main": [ [ { "node": "HTTP Check", "type": "main", "index": 0 } ] ] },
"HTTP-controle": { "main": [ [ { "node": "IF-fout (>=400)", "type": "main", "index": 0 } ] ] },
"IF-fout (>=400)": { "main": [ [ { "node": "Slack Alert", "type": "main", "index": 0 } ], [] ] }
}
}
Waarom dit waardevol is: U ontdekt snel downtime of routeringsfouten, voordat klanten dat doen. Breid het uit door fouten in Google Spreadsheets of Notion te loggen.
Stap 9: Basisbeginselen van inloggegevens, privacy en beveiliging
Ga zelfs lokaal voorzichtig om met geheimen:
- Bewaar API-tokens in Credentials (ze zijn gecodeerd met uw
N8N_ENCRYPTION_KEY). - Voeg voor inkomende webhooks een geheime header toe (bijvoorbeeld
X-Webhook-Secret) en verifieer deze met een Function-knooppunt. - Houd diagnostiek en personalisatie uitgeschakeld vanwege privacy.
- Gebruik een wachtwoordbeheerder om je
.env-geheimen op te slaan; commit ze niet aan Git.
Stap 10: Back-ups en workflow-exports
Uw belangrijkste bezittingen bevinden zich op twee plaatsen:
~/n8n-stack/n8n_data(n8n-configuratie en inloggegevensopslag)~/n8n-stack/db_data(Postgres-gegevens)
Snelle handmatige back-up:
- Stop containers:
docker compose down - Kopieer de hele map
~/n8n-stacknaar een veilige schijf of S3 - Begin opnieuw:
docker compose up -d
Exporteer workflows naar één JSON-bestand (ideaal voor Git):
docker exec -it $(docker ps --filternaam=n8n -q) \
n8n export:workflow --all --output=/home/node/.n8n/exports.json
# Het bestand verschijnt in ./n8n_data
Stap 11: n8n veilig upgraden
- Exporteer uw workflows (
exports.json) - Maak een snelle kopie van de mappen
n8n_dataendb_data - Haal de nieuwste afbeelding op en maak deze opnieuw:
docker componeer pull
docker componeren -d
Als er iets niet klopt, kunt u teruggaan door uw back-upmappen weer in te wisselen.
Stap 12: Optionele prestatieverbetering (werknemers + Redis)
Wanneer workflows zwaar worden (AI-aanroepen, bestandsuploads, trage API's), schakel dan over naar de wachtrijmodus en spawn-workers.
-
Verwijder de commentaartekens voor de
redis-service indocker-compose.yml -
Ingesteld in
.env:N8N_EXECUTIONS_MODE=wachtrij -
Startdiensten en een werknemer:
docker componeren -d
docker compose run --no-deps --name n8n-worker-1 \
-e N8N_EXECUTIONS_MODE=wachtrij \
-e QUEUE_BULL_REDIS_HOST=redis \
n8n n8n werknemer
U kunt meerdere werk nemers uitvoeren voor parallelle uitvoering.
Stap 13: Van Mac naar productie (als u er klaar voor bent)
Het mooie van Docker is dat promotie eenvoudig is. Op een VPS (of in Kubernetes):
- Hergebruik de dezelfde afbeeldingen en omgevingsvariabelen
- Zet n8n achter Caddy/Nginx met HTTPS (Let’s Encrypt)
- Voeg Cloudflare Access of uw SSO toe voor een veilige beheerdersinterface
- Plan regelmatige back-ups van de Postgres DB en
n8n_data
Uw lokale kennis beweegt met u mee, er is geen herbouw nodig.
Veelvoorkomende valkuilen (en snelle oplossingen)
“Poort al in gebruik.”
Wijzig N8N_PORT in .env en de ports-toewijzing in docker-compose.yml, en vervolgens docker compose up -d.
“Toestemming geweigerd” op volumes. Eigendom/rechten repareren:
chmod -R 775 ~/n8n-stack/n8n_data ~/n8n-stack/db_data
Webhook-test-URL-fouten.
- Gebruik de Test-URL alleen als “Luister naar testgebeurtenis” actief is.
- Nadat u op Activeren heeft geklikt, gebruikt u de Productie-URL.
Grote databasegroei.
- Blijf snoeien (reeds geconfigureerd).
- Vermijd het opslaan van grote binaire gegevens in knooppunten; gebruik waar mogelijk S3/Drive.
Vergelijkingen: waarom n8n versus Zapier/Make?
- Kostenbeheersing: n8n is open source en zelf-hostbaar: schaalbaar zonder boetes per zap.
- Flexibiliteit: logica op codeniveau via functieknooppunten; maak indien nodig aangepaste knooppunten.
- Gegevenscontrole: draait op uw hardware; afstemmen op compliance of klanteisen.
- Draagbaarheid: De gedockeriseerde installatie weerspiegelt de productie: verander eenvoudig van omgeving.
Gebruiksscenario's uit de praktijk die u vervolgens kunt bouwen
- Leadinname: Webhook → Normaliseren → Slack-melding → Google Spreadsheets toevoegen
- Dagelijkse AI-samenvatting: Cron → Zoek-API → OpenAI-samenvatting → Posten in Notion
- Incidentrouting: GitHub/CI Webhook → Logboeken parseren → Slack/PagerDuty-waarschuwing
- Finance Ops: CSV-import → gegevens opschonen → opslaan in Postgres → e-mailrapport
- Sales Ops: Stripe-evenement → verrijken met CRM → notificeren en taggen in Slack
Elk van deze kan op je Mac starten en later worden geproduceerd met wachtrijen en HTTPS.
Opsommingstekens / Snelle afhaalrestaurants
- Docker + Postgres geeft je een stabiele, productie-achtige n8n op macOS.
- Versleutel inloggegevens met
N8N_ENCRYPTION_KEYen voorkom het plegen van geheimen. - Gebruik Test-URL's tijdens het luisteren; Productie-URL's na activering.
- Maak regelmatig een back-up van
n8n_dataendb_dataof exporteer workflows. - Voeg Redis + werknemers toe wanneer de stromen zwaarder worden; je zult parallellisme verkrijgen.
- Tunnels (ngrok/Cloudflare) maken het testen van externe webhook eenvoudig en veilig.
- Promotie naar een VPS is meestal copy-paste: hetzelfde Compose-bestand, sterkere omtrek.
Oproep tot actie
Als u serieus bezig bent met automatisering, stop dan niet bij ‘Hallo wereld’. Kies één proces (leadintake, uptime-waarschuwingen of een dagelijks AI-rapport) en verzend het vandaag nog. Wilt u een op maat gemaakte startersworkflow (Slack + Sheets of AI-samenvatting → Notion)? Vertel mij uw bestemmingstools en ik zorg voor een importklare JSON die u onmiddellijk kunt uitvoeren.
🤝 Huur/werk met mij:
- 🔗 Fiverr (custom builds, integraties, prestaties): https://www.fiverr.com/s/EgxYmWD
- 🌐 Mejba Persoonlijk Portfolio: https://www.mejba.me
- 🏢 Ramlit Limited: https://www.ramlit.com
- 🎨 ColorPark Creative Agency: https://www.colorpark.io
- 🛡 xCyberSecurity Global Services: https://www.xcybersecurity.io
Veelgestelde vragen
1) Kan ik SQLite gebruiken in plaats van Postgres? Dat kan, maar het is niet ideaal voor iets anders dan snelle experimenten. Postgres is betrouwbaarder, gemakkelijker te back-uppen en aanbevolen voor echt werk.
2) Heb ik HTTPS nodig op mijn Mac? Voor lokale ontwikkeling: nee. Als u webhooks openbaar maakt, gebruik dan een tunnel (ngrok/Cloudflare). Voor productie plaatst u n8n achter een reverse proxy met HTTPS.
3) Hoe houd ik mijn workflows veilig tijdens upgrades?
Exporteer workflows naar JSON, maak een back-up van n8n_data en db_data en upgrade vervolgens. Als er iets kapot gaat, draait u de mappen terug.
4) Waarom werkt mijn test-URL na een minuut niet meer? Test-URL's werken alleen terwijl de editor naar gebeurtenissen luistert. Klik nogmaals op 'Luister naar testgebeurtenis' of gebruik de productie-URL na activering.
5) Kan ik meerdere workflows parallel uitvoeren op mijn Mac? Ja. Schakel over naar wachtrijmodus met Redis en start een of meer werkers.
6) Hoe maak ik verbinding met Slack, Google Spreadsheets of Notion?
Maak inloggegevens aan in Credentials (OAuth of token) en selecteer ze vervolgens in het knooppunt. n8n slaat ze versleuteld op met uw N8N_ENCRYPTION_KEY.
7) Is n8n geschikt voor ondernemingen? Ja, wanneer het op de juiste manier door uzelf wordt gehost met SSO/OIDC, HTTPS, back-ups en op rollen gebaseerde toegang. Uw Mac-installatie weerspiegelt de architectuur die u in de productie gaat gebruiken.
8) Hoe zit het met AI-workflows? n8n kan worden geïntegreerd met OpenAI en andere providers. Voeg functieknooppunten toe voor aangepaste aanwijzingen, of koppel API's aan elkaar (zoeken → samenvatten → publiceren) met nieuwe pogingen en time-outs.
Je bent klaar. Je hebt n8n op je Mac geïnstalleerd met Docker Desktop, webhooks geverifieerd en een productiegerichte manier geleerd om automatiseringen te bouwen waarop je kunt vertrouwen. Zet het nu aan het werk.