n8n auf Hetzner Cloud selbst hosten: Vollständiges Docker-Setup-Tutorial
Workflow-Automatisierung ist für moderne Unternehmen unverzichtbar geworden, aber SaaS-Lösungen können mit wachsenden Teams teuer werden. Wir zeigen Ihnen, wie Sie Ihre eigene n8n-Instanz auf Hetzner Cloud für etwa 6 EUR/Monat zuzüglich Domain-Kosten (Stand: Oktober 2026) einrichten und damit unbegrenzte Workflows und vollständige Kontrolle über Ihre Automatisierungsplattform erhalten.
Was Sie einrichten werden
Am Ende dieses Tutorials haben Sie:
- Eine vollständig funktionsfähige n8n-Installation mit HTTPS
- Automatische SSL-Zertifikate über Let's Encrypt
- E-Mail-Integration für Benutzerkonten
- Automatischen Start nach Serverneustarts
- Eine solide Basis für den professionellen Einsatz, die Sie für den Produktivbetrieb weiter absichern können
Monatliche Kosten: 5,99 EUR (CX23-Server, zzgl. USt., inkl. einer primären IPv4-Adresse, Stand: Oktober 2026) + Domain-Kosten
Voraussetzungen
- Domainname, der auf Ihre Server-IP verweist
- Grundlegende Kommandozeilenkenntnisse
- Hetzner-Cloud-Konto
Schritt 1: Server-Einrichtung
Hetzner-Cloud-Server erstellen
- Melden Sie sich in der Hetzner Cloud Console an
- Erstellen Sie ein neues Projekt
- Fügen Sie einen Server mit diesen Spezifikationen hinzu:
- Image: Ubuntu 24.04 LTS
- Typ: CX23 (2 vCPU, 4 GB RAM, 40 GB Festplatte); Hetzner hat den CX11 im September 2024 für Neubestellungen eingestellt. Die Verfügbarkeit der kostenoptimierten Tarife variiert je nach Standort
- Standort: Wählen Sie den Standort, der Ihren Nutzern am nächsten liegt
- SSH-Key: Fügen Sie Ihren öffentlichen Schlüssel hinzu
Erste Serverkonfiguration
Verbinden Sie sich mit Ihrem Server:
ssh root@YOUR_SERVER_IP
Aktualisieren Sie das System:
apt update && apt upgrade -y
Schritt 2: Docker installieren
Installieren Sie Docker und Docker Compose:
# Install dependencies
apt install apt-transport-https ca-certificates curl software-properties-common gnupg -y
# Add Docker GPG key
curl -fsSL https://download.docker.com/linux/ubuntu/gpg | gpg --dearmor -o /usr/share/keyrings/docker-archive-keyring.gpg
# Add Docker repository
echo "deb [arch=$(dpkg --print-architecture) signed-by=/usr/share/keyrings/docker-archive-keyring.gpg] https://download.docker.com/linux/ubuntu $(lsb_release -cs) stable" | tee /etc/apt/sources.list.d/docker.list > /dev/null
# Install Docker
apt update
apt install docker-ce docker-ce-cli containerd.io docker-buildx-plugin docker-compose-plugin -y
# Create Docker network for our services
docker network create proxy
Docker-Installation überprüfen:
docker --version
docker compose version
Schritt 3: Traefik als Reverse Proxy konfigurieren
Verzeichnisstruktur erstellen:
mkdir -p /opt/traefik/data
cd /opt/traefik
Traefik-Konfigurationsdatei erstellen:
nano /opt/traefik/data/traefik.yml
Folgende Konfiguration hinzufügen:
api:
dashboard: false
entryPoints:
http:
address: ":80"
http:
redirections:
entryPoint:
to: https
scheme: https
https:
address: ":443"
providers:
docker:
endpoint: "unix:///var/run/docker.sock"
exposedByDefault: false
certificatesResolvers:
letsencrypt:
acme:
email: [email protected] # Change this!
storage: acme.json
httpChallenge:
entryPoint: http
Datei acme.json für SSL-Zertifikate erstellen:
touch /opt/traefik/data/acme.json
chmod 600 /opt/traefik/data/acme.json
Traefik-Docker-Compose-Datei erstellen:
nano /opt/traefik/docker-compose.yml
Folgende Konfiguration hinzufügen:
version: '3'
services:
traefik:
image: traefik:v3.4
container_name: traefik
restart: always
ports:
- "80:80"
- "443:443"
networks:
- proxy
volumes:
- /var/run/docker.sock:/var/run/docker.sock:ro
- ./data/traefik.yml:/etc/traefik/traefik.yml
- ./data/acme.json:/acme.json
labels:
- "traefik.enable=true"
networks:
proxy:
external: true
Schritt 4: SMTP-Relay einrichten (optional, aber empfohlen)
Mailserver-Verzeichnis erstellen:
mkdir -p /opt/mailserver
cd /opt/mailserver
Docker-Compose-Datei erstellen:
nano /opt/mailserver/docker-compose.yml
Folgende Konfiguration hinzufügen:
version: '3'
services:
mailserver:
image: bytemark/smtp
restart: always
networks:
- proxy
environment:
- RELAY_HOST=smtp.gmail.com # Change to your SMTP provider
- RELAY_PORT=587
- [email protected] # Change this
- RELAY_PASSWORD=your-app-password # Change this
- MAILNAME=mail.yourdomain.com # Change this
networks:
proxy:
external: true
Hinweis: n8n erreicht das Relay über das gemeinsame Netzwerk proxy. Das Relay veröffentlicht daher keinen Port. Von Docker veröffentlichte Ports umgehen UFW-Regeln; fügen Sie einen Port daher nur hinzu, wenn ein anderer Host über das Relay senden muss. MAILNAME legt den Mail-Hostnamen des Relays fest. Für Gmail müssen Sie:
- Zwei-Faktor-Authentifizierung aktivieren
- Ein App-Passwort generieren
- Das App-Passwort verwenden (nicht Ihr reguläres Passwort)
Schritt 5: n8n konfigurieren
Erstellen Sie das n8n-Verzeichnis. Der n8n-Container läuft als Benutzer node (UID 1000). Stellen Sie daher sicher, dass dieser Benutzer in den per Bind-Mount eingebundenen Ordner data schreiben kann, zum Beispiel mit mkdir -p /opt/n8n/data && chown -R 1000:1000 /opt/n8n/data:
mkdir -p /opt/n8n
cd /opt/n8n
Docker-Compose-Datei erstellen:
nano /opt/n8n/docker-compose.yml
Folgende Konfiguration hinzufügen:
version: '3'
services:
n8n:
image: n8nio/n8n:1.95.2
restart: always
environment:
- N8N_HOST=n8n.yourdomain.com # Change this!
- NODE_ENV=production
- N8N_PROTOCOL=https
- N8N_PORT=5678
- N8N_EDITOR_BASE_URL=https://n8n.yourdomain.com # Change this!
# Email configuration
- N8N_EMAIL_MODE=smtp
- N8N_SMTP_HOST=mailserver
- N8N_SMTP_PORT=25
- N8N_SMTP_SSL=false
- N8N_SMTP_USER=
- N8N_SMTP_PASS=
- [email protected] # Change this!
# Important fixes for proxy setup
- N8N_PROXY_HOPS=1
- N8N_RUNNERS_ENABLED=true
volumes:
- ./data:/home/node/.n8n
networks:
- proxy
labels:
- "traefik.enable=true"
- "traefik.http.routers.n8n.rule=Host(`n8n.yourdomain.com`)" # Change this!
- "traefik.http.routers.n8n.entrypoints=https"
- "traefik.http.routers.n8n.tls.certresolver=letsencrypt"
- "traefik.http.services.n8n.loadbalancer.server.port=5678"
networks:
proxy:
external: true
Schritt 6: Systemd-Dienste für automatischen Start erstellen
Traefik-Dienst
nano /etc/systemd/system/traefik-docker.service
Folgende Konfiguration hinzufügen:
[Unit]
Description=Traefik Docker Compose
Requires=docker.service
After=docker.service
[Service]
Type=oneshot
RemainAfterExit=yes
WorkingDirectory=/opt/traefik
ExecStart=/usr/bin/docker compose up -d
ExecStop=/usr/bin/docker compose down
[Install]
WantedBy=multi-user.target
Mailserver-Dienst
nano /etc/systemd/system/mailserver-docker.service
Folgende Konfiguration hinzufügen:
[Unit]
Description=Mailserver Docker Compose
Requires=docker.service
After=docker.service
Before=n8n-docker.service
[Service]
Type=oneshot
RemainAfterExit=yes
WorkingDirectory=/opt/mailserver
ExecStart=/usr/bin/docker compose up -d
ExecStop=/usr/bin/docker compose down
[Install]
WantedBy=multi-user.target
n8n-Dienst
nano /etc/systemd/system/n8n-docker.service
Folgende Konfiguration hinzufügen:
[Unit]
Description=n8n Docker Compose
Requires=docker.service
After=docker.service traefik-docker.service mailserver-docker.service
Wants=network-online.target
[Service]
Type=oneshot
RemainAfterExit=yes
WorkingDirectory=/opt/n8n
ExecStartPre=/bin/bash -c 'until docker container inspect traefik > /dev/null 2>&1; do sleep 2; done'
ExecStart=/usr/bin/docker compose up -d
ExecStop=/usr/bin/docker compose down
Restart=on-failure
RestartSec=30
TimeoutStartSec=180
[Install]
WantedBy=multi-user.target
Dienste aktivieren und starten
# Reload systemd daemon
systemctl daemon-reload
# Enable services to start on boot
systemctl enable traefik-docker.service
systemctl enable mailserver-docker.service
systemctl enable n8n-docker.service
# Start services
systemctl start traefik-docker.service
sleep 10
systemctl start mailserver-docker.service
sleep 10
systemctl start n8n-docker.service
Schritt 7: DNS-Konfiguration
Verweisen Sie Ihre Domain auf Ihren Server:
- Gehen Sie zu Ihrem Domain-Registrar/DNS-Anbieter
- Erstellen Sie einen A-Eintrag:
- Name: n8n
- Typ: A
- Wert: YOUR_SERVER_IP
- TTL: 300 (oder das Minimum)
Warten Sie auf die DNS-Propagierung (kann bis zu 24 Stunden dauern, ist aber in der Regel deutlich schneller).
Schritt 8: Ihre Installation testen
Prüfen Sie, ob die Dienste laufen:
docker ps
Sie sollten drei laufende Container sehen: traefik, mailserver und n8n.
Besuchen Sie Ihre n8n-Instanz:
https://n8n.yourdomain.com
Sie sollten die n8n-Einrichtungsseite über HTTPS sehen, wobei Ihr Browser ein gültiges Zertifikat anzeigt.
Häufige Probleme beheben
SSL-Zertifikat funktioniert nicht
Prüfen Sie die Traefik-Logs:
docker logs traefik
Häufige Ursachen:
- DNS verweist nicht auf den Server
- Firewall blockiert Ports 80/443
- Falsche Domain in der Konfiguration
n8n nicht erreichbar
Prüfen Sie die n8n-Logs:
docker logs n8n-n8n-1
Häufige Lösungen:
- Überprüfen Sie, ob die Domain-Konfiguration in allen Dateien übereinstimmt
- Prüfen Sie, ob alle Container im selben Netzwerk sind
- Wenn die Logs
ERR_ERL_UNEXPECTED_X_FORWARDED_FORanzeigen, prüfen Sie, obN8N_PROXY_HOPS=1wie in der obigen Konfiguration gesetzt ist; n8n dokumentiert diese Einstellung für den Betrieb hinter einem Reverse Proxy
E-Mail funktioniert nicht
Prüfen Sie die Mailserver-Logs:
docker logs mailserver-mailserver-1
Überprüfen Sie SMTP-Zugangsdaten und -Einstellungen.
Dienste starten nicht nach Neustart
Prüfen Sie den Dienststatus:
systemctl status traefik-docker.service
systemctl status n8n-docker.service
Bei Bedarf neu starten:
systemctl restart traefik-docker.service
systemctl restart n8n-docker.service
Wartung und Updates
Regelmäßige Wartung
Wöchentliche Prüfungen:
# Check container status
docker ps
# Check disk space
df -h
# Check logs for errors
docker logs n8n-n8n-1 | grep -i error
Monatliche Updates:
# Update container images
cd /opt/n8n && docker compose pull && docker compose up -d
cd /opt/traefik && docker compose pull && docker compose up -d
cd /opt/mailserver && docker compose pull && docker compose up -d
# Clean up old images
docker system prune -f
Ihre Daten sichern
Erstellen Sie ein Backup-Skript. Die standardmäßig verwendete SQLite-Datenbank wird kopiert, während n8n läuft. Stoppen Sie n8n daher kurz oder führen Sie das Backup in einer Phase mit geringer Aktivität aus, um eine inkonsistente Kopie zu vermeiden. Testen Sie eine Wiederherstellung, bevor Sie sich darauf verlassen:
nano /opt/backup-n8n.sh
Folgenden Inhalt hinzufügen:
#!/bin/bash
mkdir -p /opt/backups
tar -czf /opt/backups/n8n-backup-$(date +%Y%m%d).tar.gz /opt/n8n/data
find /opt/backups -name "n8n-backup-*.tar.gz" -mtime +30 -delete
Ausführbar machen und zu Cron hinzufügen:
chmod +x /opt/backup-n8n.sh
# Add to crontab (daily backup at 2 AM)
crontab -e
# Add this line:
0 2 * * * /opt/backup-n8n.sh
Sicherheitshärtung
Firewall konfigurieren
# Install UFW
apt install ufw
# Set defaults
ufw default deny incoming
ufw default allow outgoing
# Allow SSH
ufw allow 22
# Allow HTTP/HTTPS
ufw allow 80
ufw allow 443
# Enable firewall
ufw enable
SSH absichern
SSH-Konfiguration bearbeiten:
nano /etc/ssh/sshd_config
Folgende Änderungen vornehmen:
PermitRootLogin prohibit-password
PasswordAuthentication no
PubkeyAuthentication yes
SSH neu starten:
systemctl restart ssh
Fail2Ban einrichten
apt install fail2ban
# Copy default configuration
cp /etc/fail2ban/jail.conf /etc/fail2ban/jail.local
# Enable and start
systemctl enable fail2ban
systemctl start fail2ban
Kostenaufstellung
Monatliche Kosten:
- Hetzner CX23-Server: 5,99 EUR (zzgl. USt., inkl. einer primären IPv4-Adresse, Stand: Oktober 2026)
- Domain (jährlich, variiert): ca. 10-15 EUR/Jahr
- Gesamt: ca. 7 EUR/Monat
Vergleich mit n8n Cloud:
- n8n Starter: 20 EUR/Monat bei jährlicher Abrechnung (2.500 Ausführungen, Stand: Oktober 2026)
- n8n Pro: 50 EUR/Monat bei jährlicher Abrechnung (10.000 Ausführungen)
- Einsparungen: etwa 150–520 EUR/Jahr
Ihr Setup skalieren
Mehrere n8n-Instanzen
Sie können mehrere isolierte n8n-Instanzen für verschiedene Teams betreiben:
Erstellen Sie /opt/n8n-team2/docker-compose.yml:
version: '3'
services:
n8n-team2:
image: n8nio/n8n:1.95.2
restart: always
environment:
- N8N_HOST=team2.yourdomain.com
# ... rest of configuration
volumes:
- ./data:/home/node/.n8n
networks:
- proxy
labels:
- "traefik.enable=true"
- "traefik.http.routers.n8n-team2.rule=Host(`team2.yourdomain.com`)"
- "traefik.http.routers.n8n-team2.entrypoints=https"
- "traefik.http.routers.n8n-team2.tls.certresolver=letsencrypt"
- "traefik.http.services.n8n-team2.loadbalancer.server.port=5678"
networks:
proxy:
external: true
Serverressourcen aufrüsten
Wenn Sie mehr Leistung benötigen, rüsten Sie Ihren Hetzner-Server auf:
- CX33: 4 vCPU, 8 GB RAM (8,99 EUR/Monat zzgl. USt., inkl. einer primären IPv4-Adresse, Stand: Oktober 2026)
- CX43: 8 vCPU, 16 GB RAM (16,49 EUR/Monat zzgl. USt., inkl. einer primären IPv4-Adresse)
Fazit
Sie haben jetzt eine funktionierende n8n-Installation, die nur einen Bruchteil gehosteter Lösungen kostet und Ihnen gleichzeitig vollständige Kontrolle gibt. Das Setup umfasst automatisches HTTPS, E-Mail-Funktionalität und zuverlässige Dienstverwaltung.
Hauptvorteile dieses Ansatzes:
- Kosteneffizient: Hunderte Euro jährlich gegenüber n8n Cloud sparen
- Vollständige Kontrolle: Keine Ausführungskontingente; Grenzen ergeben sich aus Ihren Serverressourcen und der Sustainable Use License von n8n
- Datenschutz: Workflow- und Ausführungsdaten bleiben auf Ihrem Server, ausgenommen Daten, die Ihre Workflows an externe Dienste senden
- Anpassbar: Nach Bedarf modifizieren und erweitern
Wir haben diese Konfiguration im Produktivbetrieb eingesetzt. Die Beispiele für n8n und Traefik verwenden feste Image-Versionen; erhöhen Sie für ein Update diese Tags in der jeweiligen docker-compose.yml, bevor Sie die Update-Befehle ausführen. Für geschäftskritische Anwendungen sollten Sie die Wiederherstellung Ihrer Backups testen und Monitoring ergänzen.
Über tva
tva übernimmt das umfassende Infrastrukturmanagement für Datenbanksysteme, Cloud-Umgebungen und globale Lieferketten. Unser methodischer Ansatz verbindet strenge Sicherheitsprotokolle mit Leistungsoptimierung. Unsere strategische Beratung ermöglicht die präzise Koordination digitaler Fähigkeiten und physischer Ressourcen. Dabei halten wir in allen Kundenprojekten höchste Standards für betriebliche Exzellenz und Compliance ein.
Besuchen Sie tva.sg für weitere Informationen über unsere Dienstleistungen.
Weiterführende Beiträge
Weiterführende Beiträge
Windmill auf Ubuntu selbst betreiben: Vollständiges Docker-Setup-Tutorial mit PostgreSQL-Fehlerbehebung
Hetzner Cloud Ende 2026: Tarife und Preise für das Self-Hosting von n8n, Windmill, Twenty und Ollama
Fehlerbehebung für selbst betriebenes n8n 2025: Zu große Ausführungsdaten und Webhook-Probleme mit Traefik lösen