Einführung
Automatisierung sollte weder schwierig noch riskant sein. Wenn Sie jemals versucht haben, Tools mit benutzerdefinierten Skripten oder kostenpflichtigen SaaS-Zaps zusammenzufügen, kennen Sie die Probleme: fragile Logik, Anbieterbindung und steigende Kosten. n8n behebt das. Es handelt sich um eine selbsthostbare Open-Source-Automatisierungsplattform, die Ihre Apps und APIs mit einem übersichtlichen, visuellen Builder verbindet – und Ihnen gleichzeitig die volle Kontrolle gibt.
In dieser Anleitung erfahren Sie, wie Sie n8n auf macOS mit Docker Desktop richtig installieren**: persistenter Speicher, PostgreSQL (nicht SQLite), verschlüsselte Anmeldeinformationen, sichere Webhooks und saubere Upgrade-/Backup-Routinen. Wir sorgen dafür, dass die Dinge schnell und einsteigerfreundlich sind, ohne auf produktionstaugliche Details zu verzichten. Am Ende verfügen Sie über einen zuverlässigen lokalen Automatisierungs-Hub, den Sie für echte Arbeit nutzen können – zum Testen von Webhooks, zum Erstellen von Lead-Erfassungsabläufen oder zum Orchestrieren von KI-Pipelines – und dann sicher auf einen Server hochstufen können.
Was Sie bauen werden
- Eine lokale n8n-Instanz, die in Docker-Containern ausgeführt wird
- PostgreSQL-Datenbank für dauerhafte Speicherung
- Ein aufgeräumter Projektordner mit Volumes für Backups und Git-freundliche Exporte
- Ein funktionierender Webhook und eine einfache Automatisierung, die Sie überall wiederverwenden können
- Optionale Extras (Redis Queue Worker, HTTPS, Tunnel für öffentliche Webhooks)
Für wen dieser Leitfaden gedacht ist
- Entwickler, die eine sichere lokale Umgebung zum Erstellen und Testen von Automatisierungen wünschen
- Macher und Vermarkter, die Workflows im Zapier-Stil ohne monatliche Rechnung benötigen
- Teams, die planen, n8n später selbst zu hosten, aber noch heute auf einem Mac starten möchten
Voraussetzungen
- macOS (Apple Silicon oder Intel)
- Docker Desktop installiert und ausgeführt
- Grundlegender Terminalkomfort
- (Optional) Homebrew zur Installation von Extras wie Ngrok oder Cloudflare Tunnel
Das große Ganze (Warum Docker + Postgres)
Warum Docker? Konsistenz. Sie erhalten lokal und in der Produktion die gleiche Umgebung – kein „funktioniert auf meinem Rechner“-Drama. Warum PostgreSQL? Es ist robust und wird in der Produktion bevorzugt. SQLite eignet sich gut für schnelle Tests, aber Postgres sorgt dafür, dass Ihre Arbeitsabläufe, Ausführungsprotokolle und Anmeldeinformationen solide und wiederherstellbar sind. Warum zuerst lokal? Sie können sicher iterieren. Sobald Ihr Workflow stabil ist, können Sie die genaue Einrichtung nahezu ohne Änderungen auf einen VPS übertragen.
Schritt 1: Erstellen Sie ein sauberes Projekt
Öffnen Sie Terminal und erstellen Sie einen speziellen Ordner:
„Bash mkdir -p ~/n8n-stack/{n8n_data,db_data} cd ~/n8n-stack „
n8n_dataspeichert n8n-Konfiguration, Anmeldeinformationen und Exporte- „db_data“ speichert Ihre PostgreSQL-Datenbankdateien
- Wenn Sie sie nebeneinander aufbewahren, werden Backups einfacher (kopieren Sie einfach den Ordner).
Schritt 2: Umgebungsvariablen hinzufügen
Erstellen Sie eine „.env“-Datei in „~/n8n-stack“. Diese Werte konfigurieren Ihre Container und halten Geheimnisse außerhalb der Versionskontrolle.
# ---- n8n-Kern ----
N8N_HOST=localhost
N8N_PORT=5678
N8N_PROTOCOL=http
NODE_ENV=Produktion
# Verwenden Sie eine lange Zufallszeichenfolge (speichern Sie sie in Ihrem Passwort-Manager).
N8N_ENCRYPTION_KEY=CHANGE_ME_TO_A_LONG_RANDOM_64_CHAR_STRING
# Datenschutz- und UX-Einstellungen
N8N_USER_MANAGEMENT_DISABLED=false
N8N_DIAGNOSTICS_ENABLED=false
N8N_PERSONALIZATION_ENABLED=false
# Execution Housekeeping (hält DB schlank)
EXECUTIONS_DATA_PRUNE=true
EXECUTIONS_DATA_MAX_AGE=336 # Stunden (14 Tage)
EXECUTIONS_DATA_PRUNE_MAX_COUNT=10000
# ---- Datenbank ----
DB_TYPE=postgresdb
DB_POSTGRESDB_HOST=db
DB_POSTGRESDB_PORT=5432
DB_POSTGRESDB_DATABASE=n8n
DB_POSTGRESDB_USER=n8n_user
DB_POSTGRESDB_PASSWORD=CHANGE_THIS_STRONG_PASSWORD
# ---- Warteschlangenmodus (optional) ----
N8N_EXECUTIONS_MODE=regulär
QUEUE_BULL_REDIS_HOST=redis
QUEUE_BULL_REDIS_PORT=6379
„
**Profi-Tipp:** Generieren Sie einen sicheren Schlüssel direkt im Terminal:
„Bash
python3 - <<'PY'
Geheimnisse importieren, Zeichenfolge
alphabet = string.ascii_letters + string.digits + string.punctuation
print(''.join(secrets.choice(alphabet) for _ in range(80)))
PY
„
Fügen Sie die Ausgabe in „N8N_ENCRYPTION_KEY“ ein.
---
# Schritt 3: Erstellen Sie die Docker Compose-Datei
Fügen Sie eine „docker-compose.yml“ im selben Ordner hinzu:
„yaml
Version: „3.8“
Dienstleistungen:
n8n:
Bild: n8nio/n8n:latest
Neustart: sofern nicht gestoppt
env_file: .env
Häfen:
- „5678:5678“
Umgebung:
- WEBHOOK_URL=${N8N_PROTOCOL}://${N8N_HOST}:${N8N_PORT}/
Bände:
- ./n8n_data:/home/node/.n8n
hängt davon ab:
- db
Datenbank:
Bild: postgres:15
Neustart: sofern nicht gestoppt
Umgebung:
- POSTGRES_USER=${DB_POSTGRESDB_USER}
- POSTGRES_PASSWORD=${DB_POSTGRESDB_PASSWORD}
- POSTGRES_DB=${DB_POSTGRESDB_DATABASE}
Bände:
- ./db_data:/var/lib/postgresql/data
# Optional: Später für parallele/in der Warteschlange befindliche Ausführungen aktivieren
# redis:
# Bild: redis:7-alpine
# Neustart: sofern nicht gestoppt
„
**Warum dieses Layout funktioniert:**
* Der n8n-Container speichert alles Wichtige in „./n8n_data“.
* Postgres-Daten befinden sich in „./db_data“.
* „env_file“ hält Geheimnisse außerhalb von YAML und außerhalb von Git
---
# Schritt 4: Starten Sie n8n
Von „~/n8n-stack“:
„Bash
Docker komponieren -d
Öffnen Sie http://localhost:5678
„
Sie sehen den Bildschirm **Eigentümer-Setup**. Erstellen Sie Ihr Administratorkonto mit einem sicheren Passwort.
---
# Schritt 5: Sperren Sie Ihre Basiseinstellungen
Gehen Sie zu **Einstellungen → Allgemein** und bestätigen Sie:
* **Zeitzone**: Stellen Sie Ihre Ortszeit ein
* **Webhook-URL**: „http://localhost:5678/“ für lokale Tests
* **Ausführungen**: Bereinigung aktiviert (bereits über „.env“ eingestellt)
Änderungen speichern.
---
# Schritt 6: Testen Sie einen Webhook (Ihre erste Automatisierung)
1. Klicken Sie auf **Workflow erstellen → Von vorne beginnen**
2. Fügen Sie den Knoten **Webhook** hinzu
* HTTP-Methode: „POST“.
* Pfad: „Hallo“ (oder verlassen Sie den automatischen Pfad)
3. Fügen Sie den Knoten **Auf Webhook antworten** hinzu
* Antwort: JSON
* Körper:
„json
{ "ok": true, "received": "{{$json.body.ping || 'pong'}}" }
„
4. Verbinden Sie **Webhook → Auf Webhook antworten**
5. Klicken Sie auf dem Webhook-Knoten auf **Auf Testereignis warten**
6. Im Terminal:
„Bash
curl -X POST "http://localhost:5678/webhook-test/<your-id>" \
-H „Inhaltstyp: application/json“ \
-d '{"ping":"pong"}'
„
Sie werden sehen, dass die Anfrage in der Knotenausgabe eintrifft und eine JSON-Antwort „200“ erhält.
Klicken Sie auf **Aktivieren**, um eine Produktions-URL zu erhalten, die Sie auch dann aufrufen können, wenn der Redakteur nicht zuhört.
---
# Schritt 7: Machen Sie Ihren Webhook öffentlich verfügbar (optional, praktisch)
Wenn Sie Webhooks von externen Diensten (Formulare, Stripe, GitHub) testen möchten, verwenden Sie einen sicheren Tunnel.
**Option A – ngrok**
„Bash
brew installiere ngrok/ngrok/ngrok
ngrok http http://localhost:5678
„
**Option B – Cloudflare Tunnel (kostenlos, stabil)**
„Bash
brew installiere cloudflare/cloudflare/cloudflared
cloudflared tunnel --url http://localhost:5678
„
Kopieren Sie die HTTPS-URL, die Sie erhalten. Legen Sie in n8n **Einstellungen → Allgemein** die **Webhook-URL** vorübergehend auf diesen Wert fest, damit Ihre Produktions-URLs HTTPS verwenden.
---
# Schritt 8: Erstellen Sie eine einfache, aber aussagekräftige Automatisierung
Hier ist ein echter, nützlicher Starter: **Uptime & Error Watchdog**.
* Alle 5 Minuten: Pingen Sie eine Liste mit URLs an
* Wenn einer „>= 400“ zurückgibt, senden Sie eine Slack-Benachrichtigung mit der URL und dem Statuscode
Importieren Sie den folgenden Workflow (n8n → Importieren → JSON einfügen). Bearbeiten Sie dann die URL-Liste und den Slack-Kanal.
„json
{
„name“: „Betriebszeit- und Fehlerüberwachung“,
"Knoten": [
{
"Parameter": {
"triggerTimes": { "item": [ { "mode": "everyX", "unit": "minutes", "value": 5 } ] }
},
„id“: „Cron“,
„name“: „Cron (alle 5 m)“,
„type“: „n8n-nodes-base.cron“,
„typeVersion“: 1,
„Position“: [220, 280]
},
{
"Parameter": {
"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“: „Seed“,
„name“: „Seed-URLs“,
„type“: „n8n-nodes-base.function“,
"typeVersion": 2,
„Position“: [440, 280]
},
{
"Parameter": {
„url“: „={{$json.url}}“,
„responseFormat“: „string“,
„options“: { „ignoreResponseCode“: true, „timeout“: 10000 }
},
„id“: „HTTP“,
„name“: „HTTP-Prüfung“,
„type“: „n8n-nodes-base.httpRequest“,
"typeVersion": 4,
„Position“: [660, 280]
},
{
"Parameter": {
"Bedingungen": {
„number“: [ { „value1“: „={{$json.statusCode}}“, „operation“: „largerEqual“, „value2“: 400 } ]
}
},
„id“: „WENN“,
„name“: „IF-Fehler (>=400)“,
„type“: „n8n-nodes-base.if“,
„typeVersion“: 1,
„Position“: [880, 280]
},
{
"Parameter": {
„channel“: „#alerts“,
„text“: „Verfügbarkeitswarnung: {{$json.url}} hat HTTP {{$json.statusCode}} zurückgegeben“
},
„id“: „Slack“,
„name“: „Slack-Alarm“,
„type“: „n8n-nodes-base.slack“,
„typeVersion“: 1,
„Position“: [1100, 240],
"credentials": { "slackApi": { "id": "replace-in-ui" } }
}
],
„Verbindungen“: {
„Cron (alle 5 m)“: { „main“: [ [ { „node“: „Seed URLs“, „type“: „main“, „index“: 0 } ] ] },
„Seed URLs“: { „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 } ], [] ] }
}
}
„
**Warum das wertvoll ist:** Sie erkennen Ausfallzeiten oder Routingfehler schnell – bevor es Kunden tun. Erweitern Sie es, indem Sie Fehler in Google Sheets oder Notion protokollieren.
---
# Schritt 9: Anmeldeinformationen, Datenschutz und Sicherheitsgrundlagen
Gehen Sie auch vor Ort vorsichtig mit Geheimnissen um:
* Speichern Sie API-Tokens in **Anmeldeinformationen** (sie werden mit Ihrem „N8N_ENCRYPTION_KEY“ verschlüsselt).
* Fügen Sie für eingehende Webhooks einen **geheimen Header** hinzu (z. B. „X-Webhook-Secret“) und überprüfen Sie ihn mit einem Funktionsknoten.
* Lassen Sie **Diagnose und Personalisierung aus Datenschutzgründen deaktiviert**.
* Verwenden Sie einen Passwort-Manager, um Ihre „.env“-Geheimnisse zu speichern – übermitteln Sie sie nicht an Git.
---
# Schritt 10: Backups und Workflow-Exporte
Ihre wichtigsten Vermögenswerte befinden sich an zwei Orten:
* `~/n8n-stack/n8n_data` (n8n-Konfigurations- und Anmeldeinformationsspeicher)
* `~/n8n-stack/db_data` (Postgres-Daten)
**Schnelle manuelle Sicherung:**
* Container stoppen: „Docker Compose Down“.
* Kopieren Sie den gesamten Ordner „~/n8n-stack“ auf ein sicheres Laufwerk oder S3
* Starten Sie erneut: „docker compose up -d“.
**Workflows in eine einzelne JSON-Datei exportieren (ideal für Git):**
„Bash
docker exec -it $(docker ps --filter name=n8n -q) \
n8n export:workflow --all --output=/home/node/.n8n/exports.json
# Die Datei wird in ./n8n_data angezeigt
„
---
# Schritt 11: n8n sicher aktualisieren
1. Exportieren Sie Ihre Workflows („exports.json“)
2. Erstellen Sie eine schnelle Kopie der Ordner „n8n_data“ und „db_data“.
3. Rufen Sie das neueste Image ab und erstellen Sie es neu:
„Bash
Docker Compose Pull
Docker komponieren -d
„
Wenn etwas nicht stimmt, können Sie ein Rollback durchführen, indem Sie Ihre Backup-Ordner wieder austauschen.
---
# Schritt 12: Optionaler Leistungsschub (Workers + Redis)
Wenn Arbeitsabläufe schwerfällig werden (KI-Aufrufe, Datei-Uploads, langsame APIs), wechseln Sie in den **Warteschlangenmodus** und starten Sie Worker.
* Kommentieren Sie den Dienst „redis“ in „docker-compose.yml“ aus
* In „.env“ eingestellt:
„
N8N_EXECUTIONS_MODE=Warteschlange
„
* Dienste und einen Arbeiter starten:
„Bash
Docker komponieren -d
Docker Compose Run --no-deps --name n8n-worker-1 \
-e N8N_EXECUTIONS_MODE=Warteschlange \
-e QUEUE_BULL_REDIS_HOST=redis \
n8n n8n Arbeiter
„
Sie können mehrere Worker zur parallelen Ausführung ausführen.
---
# Schritt 13: Vom Mac zur Produktion (wenn Sie bereit sind)
Das Schöne an Docker ist, dass die Werbung einfach ist. Auf einem VPS (oder in Kubernetes):
* Verwenden Sie die **gleichen** Bilder und Umgebungsvariablen wieder
* Setzen Sie n8n mit HTTPS (Let’s Encrypt) hinter **Caddy/Nginx**
* Fügen Sie **Cloudflare Access** oder Ihr SSO für eine sichere Admin-Benutzeroberfläche hinzu
* Planen Sie **regelmäßige Backups** der Postgres-Datenbank und „n8n_data“.
Ihre lokalen Erkenntnisse bewegen sich mit Ihnen – kein Neuaufbau erforderlich.
---
## Häufige Fallstricke (und schnelle Lösungen)
**„Port bereits verwendet.“**
Ändern Sie „N8N_PORT“ in „.env“ und die „Ports“-Zuordnung in „docker-compose.yml“, dann „docker compose up -d“.
**„Berechtigung verweigert“ für Volumes.**
Besitz/Berechtigungen korrigieren:
„Bash
chmod -R 775 ~/n8n-stack/n8n_data ~/n8n-stack/db_data
„
**Webhook-Test-URL-Fehler.**
* Verwenden Sie die **Test-URL** nur, während „Auf Testereignis warten“ aktiv ist.
* Nachdem Sie auf **Aktivieren** geklickt haben, verwenden Sie die **Produktions-URL**.
**Großes Datenbankwachstum.**
* Beschneiden weiterhin aktiviert (bereits konfiguriert).
* Vermeiden Sie das Speichern großer Binärdaten in Knoten. Verwenden Sie nach Möglichkeit S3/Drive.
---
## Vergleiche: Warum n8n vs. Zapier/Make?
* **Kostenkontrolle:** n8n ist Open Source und selbst hostbar – Skalierung ohne Nachteile pro Zap.
* **Flexibilität:** Logik auf Codeebene über Funktionsknoten; Erstellen Sie bei Bedarf benutzerdefinierte Knoten.
* **Datenkontrolle:** läuft auf Ihrer Hardware; sich an Compliance- oder Kundenanforderungen orientieren.
* **Portabilität:** Das Docker-Setup spiegelt die Produktion wider – Umgebungen können einfach geändert werden.
---
## Anwendungsfälle aus der realen Welt, die Sie als Nächstes erstellen können
* **Lead-Aufnahme:** Webhook → Normalisieren → Slack-Benachrichtigung → Google Sheets anhängen
* **Daily AI Digest:** Cron → Such-API → OpenAI-Zusammenfassung → Auf Notion posten
* **Incident Routing:** GitHub/CI Webhook → Protokolle analysieren → Slack/PagerDuty-Warnung
* **Finance Ops:** CSV-Import → bereinigte Daten → Speicherung in Postgres → E-Mail-Bericht
* **Sales Ops:** Stripe-Event → mit CRM anreichern → benachrichtigen und in Slack taggen
Jedes davon kann auf Ihrem Mac gestartet und später mit Warteschlangen und HTTPS produziert werden.
---
## Aufzählungspunkte / Schnelle Erkenntnisse
* Docker + Postgres bietet Ihnen ein **stabiles, produktionsähnliches** n8n unter macOS.
* **Anmeldeinformationen verschlüsseln** mit „N8N_ENCRYPTION_KEY“ und die Weitergabe von Geheimnissen vermeiden.
* Verwenden Sie beim Zuhören **Test-URLs**; **Produktions-URLs** nach der Aktivierung.
* Sichern Sie „n8n_data“ und „db_data“ oder exportieren Sie regelmäßig Workflows.
* Fügen Sie **Redis + Worker** hinzu, wenn die Flüsse stärker werden; Sie werden Parallelität gewinnen.
* Tunnel (ngrok/Cloudflare) machen externe Webhook-Tests einfach und sicher.
* Die Beförderung zu einem VPS erfolgt meist durch **Kopieren und Einfügen**: gleiche Compose-Datei, stärkerer Umfang.
---
## Aufruf zum Handeln
Wenn Sie es mit der Automatisierung ernst meinen, hören Sie nicht bei „Hallo Welt“ auf. Wählen Sie einen Prozess aus – Lead-Aufnahme, Verfügbarkeitswarnungen oder einen täglichen KI-Bericht – und versenden Sie ihn noch heute. Möchten Sie einen maßgeschneiderten Starter-Workflow (Slack + Sheets oder AI-Zusammenfassung → Notion)? Teilen Sie mir Ihre Zieltools mit und ich stelle Ihnen ein importfähiges JSON zur Verfügung, das Sie sofort ausführen können.
---
## 🤝 Stellen Sie ein / arbeiten Sie mit mir zusammen:
* 🔗 Fiverr (benutzerdefinierte Builds, Integrationen, Leistung): https://www.fiverr.com/s/EgxYmWD
* 🌐 Persönliches Mejba-Portfolio: https://www.mejba.me
* 🏢 Ramlit Limited: https://www.ramlit.com
* 🎨 Kreativagentur ColorPark: https://www.colorpark.io
* 🛡 xCyberSecurity Global Services: https://www.xcybersecurity.io
---
## FAQ
**1) Kann ich SQLite anstelle von Postgres verwenden?**
Das ist möglich, aber für alles andere als für schnelle Experimente ist es nicht ideal. Postgres ist zuverlässiger, einfacher zu sichern und für echte Arbeit zu empfehlen.
**2) Benötige ich HTTPS auf meinem Mac?**
Für die lokale Entwicklung, nein. Wenn Sie Webhooks öffentlich verfügbar machen, verwenden Sie einen Tunnel (ngrok/Cloudflare). Platzieren Sie n8n für die Produktion hinter einem Reverse-Proxy mit HTTPS.
**3) Wie halte ich meine Arbeitsabläufe während Upgrades sicher?**
Workflows nach JSON exportieren, „n8n_data“ und „db_data“ sichern und dann aktualisieren. Wenn etwas kaputt geht, setzen Sie die Ordner zurück.
**4) Warum funktioniert meine Test-URL nach einer Minute nicht?**
Test-URLs funktionieren nur, während der Editor auf Ereignisse wartet. Klicken Sie erneut auf „Auf Testereignis warten“ oder verwenden Sie nach der Aktivierung die Produktions-URL.
**5) Kann ich mehrere Arbeitsabläufe parallel auf meinem Mac ausführen?**
Ja. Wechseln Sie mit Redis in den **Warteschlangenmodus** und starten Sie einen oder mehrere Worker.
**6) Wie verbinde ich mich mit Slack, Google Sheets oder Notion?**
Erstellen Sie Anmeldeinformationen in **Anmeldeinformationen** (OAuth oder Token) und wählen Sie sie dann im Knoten aus. n8n speichert sie verschlüsselt mit Ihrem „N8N_ENCRYPTION_KEY“.
**7) Ist n8n für Unternehmen geeignet?**
Ja – bei ordnungsgemäßer Selbsthostung mit SSO/OIDC, HTTPS, Backups und rollenbasiertem Zugriff. Ihr Mac-Setup spiegelt die Architektur wider, die Sie in der Produktion verwenden werden.
**8) Was ist mit KI-Workflows?**
n8n lässt sich in OpenAI und andere Anbieter integrieren. Fügen Sie Funktionsknoten für benutzerdefinierte Eingabeaufforderungen hinzu oder verketten Sie APIs (Suchen → Zusammenfassen → Veröffentlichen) mit Wiederholungsversuchen und Zeitüberschreitungen.
---
**Sie sind fertig.** Sie haben n8n mit Docker Desktop auf Ihrem Mac installiert, Webhooks überprüft und eine produktionsorientierte Methode zum Erstellen vertrauenswürdiger Automatisierungen kennengelernt. Setzen Sie es jetzt in die Tat um.