n8n Self-Hosted mit Docker Compose: Der ultimative Setup-Guide
Ihr wollt n8n self-hosted betreiben und maximale Kontrolle über eure Workflow-Automation haben? Mit n8n Docker Compose könnt ihr in wenigen Minuten eine produktionsreife Instanz aufsetzen. In diesem Guide zeige ich euch, wie ihr n8n professionell selbst hostet – mit allen wichtigen Konfigurationen, Sicherheits-Best-Practices und Tipps aus der Praxis.
Warum n8n Self-Hosted?
Bevor wir in die technische Umsetzung einsteigen, hier die wichtigsten Gründe für n8n self-hosted:
✅ Volle Datenkontrolle
- Alle Workflow-Daten bleiben auf euren eigenen Servern
- DSGVO-konform ohne Drittanbieter-Abhängigkeiten
- Keine Limits bei sensiblen Daten
✅ Kosteneffizienz
- Keine monatlichen SaaS-Gebühren
- Unbegrenzte Workflows und Executions
- Skalierbar nach Bedarf
✅ Anpassbarkeit
- Custom Nodes und Extensions möglich
- Volle Kontrolle über Updates
- Integration in bestehende Infrastruktur
Voraussetzungen
Für die n8n Docker Compose Installation benötigt ihr:
- Docker (Version 20.10+)
- Docker Compose (Version 2.0+)
- Linux Server (Ubuntu 22.04 empfohlen) oder macOS
- Domain mit SSL-Zertifikat (für Produktiv-Umgebung)
- Mindestens 2GB RAM und 10GB Speicher
n8n Docker Compose Setup: Schritt für Schritt
1. Projektstruktur erstellen
Erstellt zunächst ein dediziertes Verzeichnis für eure n8n-Installation:
mkdir -p ~/n8n-docker
cd ~/n8n-docker
mkdir -p data
2. Docker Compose Datei erstellen
Erstellt eine docker-compose.yml mit folgender Konfiguration:
version: "3.8"
services:
n8n:
image: n8nio/n8n:latest
container_name: n8n
restart: unless-stopped
ports:
- "5678:5678"
environment:
# Basis-Konfiguration
- N8N_HOST=${N8N_HOST}
- N8N_PORT=5678
- N8N_PROTOCOL=${N8N_PROTOCOL}
- NODE_ENV=production
# Datenbank (PostgreSQL empfohlen für Produktion)
- DB_TYPE=postgresdb
- DB_POSTGRESDB_HOST=postgres
- DB_POSTGRESDB_PORT=5432
- DB_POSTGRESDB_DATABASE=${POSTGRES_DB}
- DB_POSTGRESDB_USER=${POSTGRES_USER}
- DB_POSTGRESDB_PASSWORD=${POSTGRES_PASSWORD}
# Authentifizierung
- N8N_BASIC_AUTH_ACTIVE=true
- N8N_BASIC_AUTH_USER=${N8N_BASIC_AUTH_USER}
- N8N_BASIC_AUTH_PASSWORD=${N8N_BASIC_AUTH_PASSWORD}
# Webhook-URL
- WEBHOOK_URL=${WEBHOOK_URL}
# Timezone
- GENERIC_TIMEZONE=Europe/Berlin
- TZ=Europe/Berlin
volumes:
- ./data:/home/node/.n8n
depends_on:
- postgres
networks:
- n8n-network
postgres:
image: postgres:15-alpine
container_name: n8n-postgres
restart: unless-stopped
environment:
- POSTGRES_DB=${POSTGRES_DB}
- POSTGRES_USER=${POSTGRES_USER}
- POSTGRES_PASSWORD=${POSTGRES_PASSWORD}
volumes:
- postgres-data:/var/lib/postgresql/data
networks:
- n8n-network
volumes:
postgres-data:
networks:
n8n-network:
driver: bridge
3. Environment-Variablen konfigurieren
Erstellt eine .env Datei für eure Konfiguration:
# n8n Konfiguration
N8N_HOST=n8n.euredomain.de
N8N_PROTOCOL=https
WEBHOOK_URL=https://n8n.euredomain.de/
# Authentifizierung (ÄNDERN!)
N8N_BASIC_AUTH_USER=admin
N8N_BASIC_AUTH_PASSWORD=IhrSicheresPasswort123!
# PostgreSQL Datenbank
POSTGRES_DB=n8n
POSTGRES_USER=n8n
POSTGRES_PASSWORD=IhrDatenbankPasswort456!
⚠️ Wichtig: Ändert unbedingt die Passwörter vor dem produktiven Einsatz!
4. n8n starten
Startet eure n8n self-hosted Instanz:
docker-compose up -d
Überprüft den Status:
docker-compose ps
docker-compose logs -f n8n
5. Zugriff auf n8n
Öffnet euren Browser und navigiert zu:
- Lokal:
http://localhost:5678 - Produktiv:
https://n8n.euredomain.de
Loggt euch mit den Credentials aus der .env ein.
Produktiv-Setup: SSL & Reverse Proxy
Für den produktiven Einsatz empfehle ich Traefik oder Nginx als Reverse Proxy mit automatischem SSL.
Traefik Integration
Erweitert eure docker-compose.yml:
services:
traefik:
image: traefik:v2.10
container_name: traefik
restart: unless-stopped
command:
- "--api.insecure=true"
- "--providers.docker=true"
- "--entrypoints.web.address=:80"
- "--entrypoints.websecure.address=:443"
- "--certificatesresolvers.letsencrypt.acme.email=info@euredomain.de"
- "--certificatesresolvers.letsencrypt.acme.storage=/letsencrypt/acme.json"
- "--certificatesresolvers.letsencrypt.acme.httpchallenge.entrypoint=web"
ports:
- "80:80"
- "443:443"
volumes:
- /var/run/docker.sock:/var/run/docker.sock:ro
- ./letsencrypt:/letsencrypt
networks:
- n8n-network
n8n:
# ... bestehende Konfiguration
labels:
- "traefik.enable=true"
- "traefik.http.routers.n8n.rule=Host(`n8n.euredomain.de`)"
- "traefik.http.routers.n8n.entrypoints=websecure"
- "traefik.http.routers.n8n.tls.certresolver=letsencrypt"
- "traefik.http.services.n8n.loadbalancer.server.port=5678"
Best Practices für n8n Self-Hosted
1. Regelmäßige Backups
Erstellt ein Backup-Script:
#!/bin/bash
# backup-n8n.sh
BACKUP_DIR="/backups/n8n"
DATE=$(date +%Y%m%d_%H%M%S)
# PostgreSQL Backup
docker exec n8n-postgres pg_dump -U n8n n8n > "$BACKUP_DIR/n8n_db_$DATE.sql"
# n8n Daten Backup
tar -czf "$BACKUP_DIR/n8n_data_$DATE.tar.gz" -C ~/n8n-docker data/
# Alte Backups löschen (älter als 30 Tage)
find $BACKUP_DIR -name "*.sql" -mtime +30 -delete
find $BACKUP_DIR -name "*.tar.gz" -mtime +30 -delete
Automatisiert mit Cron:
0 2 * * * /path/to/backup-n8n.sh
2. Monitoring & Logging
Integriert Monitoring mit Prometheus und Grafana:
services:
prometheus:
image: prom/prometheus:latest
volumes:
- ./prometheus.yml:/etc/prometheus/prometheus.yml
networks:
- n8n-network
grafana:
image: grafana/grafana:latest
ports:
- "3000:3000"
networks:
- n8n-network
3. Ressourcen-Limits
Begrenzt CPU und RAM in der docker-compose.yml:
services:
n8n:
# ... bestehende Konfiguration
deploy:
resources:
limits:
cpus: "2"
memory: 2G
reservations:
cpus: "1"
memory: 1G
4. Updates durchführen
Regelmäßige Updates sind wichtig:
# Images aktualisieren
docker-compose pull
# Container neu starten
docker-compose up -d
# Alte Images aufräumen
docker image prune -a
Erweiterte Konfiguration
Custom Nodes installieren
Erstellt ein Dockerfile für Custom Nodes:
FROM n8nio/n8n:latest
USER root
# Custom Node installieren
RUN cd /usr/local/lib/node_modules/n8n && \
npm install n8n-nodes-custom-package
USER node
Aktualisiert die docker-compose.yml:
services:
n8n:
build: .
# statt: image: n8nio/n8n:latest
Mehrere n8n Instanzen (Queue Mode)
Für High-Availability Setup:
services:
n8n-main:
# Main Instance
environment:
- EXECUTIONS_MODE=queue
- QUEUE_BULL_REDIS_HOST=redis
n8n-worker:
# Worker Instance
command: worker
environment:
- EXECUTIONS_MODE=queue
- QUEUE_BULL_REDIS_HOST=redis
redis:
image: redis:7-alpine
Troubleshooting
Problem: Container startet nicht
# Logs prüfen
docker-compose logs n8n
# Container neu erstellen
docker-compose down
docker-compose up -d --force-recreate
Problem: Webhooks funktionieren nicht
Überprüft die WEBHOOK_URL in der .env:
WEBHOOK_URL=https://n8n.euredomain.de/
Problem: Datenbank-Verbindung fehlgeschlagen
# PostgreSQL Container prüfen
docker-compose logs postgres
# Datenbank-Verbindung testen
docker exec -it n8n-postgres psql -U n8n -d n8n
Performance-Optimierung
1. PostgreSQL Tuning
Erstellt postgres.conf:
# Für 2GB RAM Server
shared_buffers = 512MB
effective_cache_size = 1536MB
maintenance_work_mem = 128MB
checkpoint_completion_target = 0.9
wal_buffers = 16MB
default_statistics_target = 100
random_page_cost = 1.1
effective_io_concurrency = 200
work_mem = 2621kB
min_wal_size = 1GB
max_wal_size = 4GB
2. n8n Execution Settings
In der .env:
# Execution Limits
EXECUTIONS_TIMEOUT=300
EXECUTIONS_TIMEOUT_MAX=600
EXECUTIONS_DATA_SAVE_ON_ERROR=all
EXECUTIONS_DATA_SAVE_ON_SUCCESS=all
EXECUTIONS_DATA_SAVE_MANUAL_EXECUTIONS=true
Kosten-Vergleich: Self-Hosted vs. Cloud
| Aspekt | n8n Cloud | n8n Self-Hosted |
|---|---|---|
| Monatliche Kosten | ab 20€/Monat | Server: ~5-20€/Monat |
| Workflows | Limitiert | Unbegrenzt |
| Executions | Limitiert | Unbegrenzt |
| Datenkontrolle | Bei n8n | 100% bei euch |
| Wartungsaufwand | Keine | Gering (Updates, Backups) |
| Skalierung | Automatisch | Manuell |
Fazit: Ab ~5 Workflows lohnt sich n8n self-hosted finanziell.
Fazit: n8n Docker Compose lohnt sich
Mit n8n Docker Compose habt ihr in wenigen Minuten eine produktionsreife Workflow-Automation-Plattform am Laufen. Die Vorteile:
✅ Volle Kontrolle über Daten und Infrastruktur
✅ Kosteneffizient bei regelmäßiger Nutzung
✅ Skalierbar nach euren Anforderungen
✅ DSGVO-konform durch Self-Hosting
✅ Professionell mit PostgreSQL und SSL
Der initiale Setup-Aufwand von 1-2 Stunden zahlt sich schnell aus. Mit den Best Practices aus diesem Guide habt ihr eine stabile, sichere und wartbare n8n-Installation.
Nächste Schritte
Ihr wollt n8n self-hosted produktiv einsetzen, aber euch fehlt die Zeit oder Expertise für Setup und Wartung? Wir bei Vinspire helfen euch:
- Managed n8n Hosting auf eurer Infrastruktur
- Custom Workflow-Entwicklung für eure Prozesse
- Integration in bestehende Systeme (CRM, ERP, etc.)
- Training & Support für euer Team
Kostenloses Erstgespräch: Kontakt aufnehmen
Habt ihr Fragen zum n8n Self-Hosting? Schreibt uns oder hinterlasst einen Kommentar!
Weitere Artikel:
Lasst uns über eure Zukunft sprechen
Habt ihr eine Idee, ein Projekt oder einfach eine Frage? Wir freuen uns auf eure Nachricht und melden uns innerhalb von 24 Stunden bei euch.