tva
← Insights

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 unter 5 EUR/Monat einrichten und damit unbegrenzte Workflows und vollständige Kontrolle über Ihre Automatisierungsplattform erhalten.

Was Sie aufbauen werden

Am Ende dieses Tutorials haben Sie:

  • Eine voll funktionsfähige n8n-Installation mit HTTPS
  • Automatische SSL-Zertifikate über Let's Encrypt
  • E-Mail-Integration für Benutzerkonten
  • Automatischen Start nach Serverneustartes
  • Ein produktionsreifes Setup für den professionellen Einsatz

Monatliche Kosten: 4,51 EUR (CX11-Server) + Domain-Kosten

Voraussetzungen

  • Domainname, der auf Ihre Server-IP verweist
  • Grundlegende Kommandozeilenkenntnisse
  • Hetzner-Cloud-Konto

Schritt 1: Server-Einrichtung

Hetzner-Cloud-Server erstellen

  1. Melden Sie sich in der Hetzner Cloud Console an
  2. Erstellen Sie ein neues Projekt
  3. Fügen Sie einen Server mit diesen Spezifikationen hinzu:
    • Image: Ubuntu 24.04 LTS
    • Typ: CX11 (1 vCPU, 4 GB RAM, 20 GB Festplatte)
    • Standort: Wählen Sie den nächstgelegenen zu Ihren Benutzern
    • SSH-Key: Fügen Sie Ihren öffentlichen Schlüssel hinzu

Initiale Server-Konfiguration

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 verifizieren:

docker --version
docker compose version

Schritt 3: Traefik 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: your-email@example.com  # Change this!
      storage: acme.json
      httpChallenge:
        entryPoint: http

acme.json-Datei 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:latest
    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
      - RELAY_USERNAME=your-email@gmail.com  # Change this
      - RELAY_PASSWORD=your-app-password     # Change this
      - MAIL_DOMAIN=yourdomain.com           # Change this
    ports:
      - "25:25"

networks:
  proxy:
    external: true

Hinweis: Für Gmail müssen Sie:

  1. Zwei-Faktor-Authentifizierung aktivieren
  2. Ein App-Passwort generieren
  3. Das App-Passwort verwenden (nicht Ihr reguläres Passwort)

Schritt 5: n8n konfigurieren

n8n-Verzeichnis erstellen:

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:latest
    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=
      - N8N_SMTP_SENDER=noreply@yourdomain.com  # Change this!
      
      # Important fixes for proxy setup
      - N8N_TRUST_PROXY_HEADER=true
      - 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:

  1. Gehen Sie zu Ihrem Domain-Registrar/DNS-Anbieter
  2. 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 mit einem grünen Schloss-Symbol sehen (HTTPS funktioniert).

Fehlerbehebung häufiger Probleme

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

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

Backup-Skript erstellen:

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 CX11-Server: 4,51 EUR
  • Domain (jährlich, variiert): ca. 10-15 EUR/Jahr
  • Gesamt: ca. 5-6 EUR/Monat

Vergleich mit n8n Cloud:

  • n8n Starter: 20 $/Monat
  • n8n Pro: 50 $/Monat
  • Einsparungen: 180-540 $/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:latest
    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:

  • CX21: 2 vCPU, 8 GB RAM (8,46 EUR/Monat)
  • CX31: 2 vCPU, 16 GB RAM (16,07 EUR/Monat)

Fazit

Sie haben jetzt eine produktionsreife 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 robustes Service-Management.

Hauptvorteile dieses Ansatzes:

  • Kosteneffizient: Hunderte Dollar jährlich sparen
  • Vollständige Kontrolle: Keine Nutzungslimits oder Einschränkungen
  • Datenschutz: Ihre Daten bleiben auf Ihrer Infrastruktur
  • Anpassbar: Nach Bedarf modifizieren und erweitern

Diese Konfiguration wurde in Produktionsumgebungen getestet und bietet Zuverlässigkeit auf Enterprise-Niveau zu einem Bruchteil der Kosten.

Über tva

tva gewährleistet umfassendes Infrastrukturmanagement von Datenbanksystemen, Cloud-Umgebungen und globalen Lieferketten. Unser methodischer Ansatz verbindet rigorose Sicherheitsprotokolle mit Leistungsoptimierung, während strategische Beratungsdienste eine präzise Koordination sowohl digitaler Fähigkeiten als auch physischer Vermögenswerte ermöglichen – unter Einhaltung höchster Standards operativer Exzellenz und Compliance in allen Engagements.

Besuchen Sie tva.sg für weitere Informationen über unsere Dienstleistungen.