Für VPS und migrierte Cloud Server

In diesem Artikel erfahren Sie zunächst, wie Sie das Image Ubuntu 24.04 + n8n auf Ihrem Server installieren. n8n wird im Rahmen der Installation in einem Docker-Container bereitgestellt. Das von IONOS bereitgestellte n8n-Image enthält kein SSL-Zertifikat für die mitgelieferte IP-Adresse, sodass zunächst nur ein Zugriff über das unverschlüsselte HTTP-Protokoll möglich ist. Um über eine verschlüsselte Verbindung auf n8n zugreifen zu können, ist eine manuelle Konfiguration erforderlich. Wie Sie die Konfiguration vorbereiten und n8n konfigurieren, wird im weiteren Verlauf des Artikels erklärt.

Zusammenfassung der erforderlichen Schritte

Im Folgenden sind die erforderlichen Schritte in Kurzform aufgeführt:

  • Image auf dem Server installieren

  • Konfiguration vorbereiten
  • SSH-Verbindung zum Server herstellen
  • SSL-Zertifikatsdateien im Host speichern
  • Fullchain-Datei erstellen
  • n8n für SSL-Verbindung konfigurieren
  • Auf die n8n-Oberfläche zugreifen

Warnung

Wenn Sie auf einem bestehenden Server ein Image neu installieren, werden alle vorhandenen Daten auf dem Server unwiederbringlich gelöscht und durch die Daten des neu installierten Images ersetzt. Dieser Vorgang kann nicht mehr rückgängig gemacht werden. Stellen Sie sicher, dass Sie vor der Installation des Images ein Backup des Servers erstellen. Anderenfalls droht Datenverlust.

Image auf dem Server installieren

Um das Image Ubuntu 24.04 + n8n zu installieren, gehen Sie wie folgt vor:

  • Melden Sie sich in Ihrem IONOS Konto an.
  • Klicken Sie in der Titelleiste auf Menü > Server & Cloud.
    Optional: Wählen Sie den gewünschten Server & Cloud-Vertrag aus.

  • Klicken Sie im Bereich Infrastruktur > Server auf den gewünschten Server.
  • Klicken Sie auf Aktionen.
  • Klicken Sie auf Image neu installieren. Der Bereich Image neu installieren wird angezeigt.
Screenshot: Der Bereich Infrastruktur > Server wird im Cloud Panel angezeigt. In diesem Bereich ist im Menü Aktionen der Menüpunkt Image neu installieren hervorgehoben.
Abbildung: Aktionsmenü mit dem Menüpunkt Image neu installieren im Bereich Infrastruktur > Server
  • Klicken Sie in der Kachel Ubuntu auf den nach unten zeigenden Pfeil.
  • Wählen Sie das Image Ubuntu 24.04 + n8n aus.
  • Klicken Sie auf Image neu installieren. Das Image wird installiert. Dieser Vorgang kann einige Minuten dauern.
  • Notieren Sie die IP-Adresse des Servers. Diese wird im weiteren Verlauf benötigt, um Ihre Domain zu verbinden.

Hinweise

  • Nach der Installation müssen Port 80, Port 443 und Port 5678 in der Firewall freigeschaltet werden. Weitere Informationen hierzu finden Sie im Abschnitt Vorbereitung der Konfiguration.

  • Nach der Installation können Sie Ihre n8n-Instanz unter der IP-Adresse Ihres Servers und Standard-Portnummer von n8n aufrufen: http://IP-ADRESSE_DES_SERVERS:5678 

Konfiguration vorbereiten

Um eine verschlüsselte Verbindung zu n8n herzustellen, wird eine Domain benötigt, auf die zugegriffen werden kann. Darüber hinaus ist hierfür ein SSL-Zertifikat notwendig, das für die Domain ausgestellt wird. 

Domain bestellen

Wenn Sie bisher noch keine Domain für Ihren Server bestellt haben, können Sie diese jederzeit hinzubestellen. Eine Anleitung finden Sie im folgenden Artikel: Domain bestellen als IONOS Kunde

Subdomain erstellen

Erstellen Sie eine Subdomain im folgenden Format: n8n.example.com

Ersetzen Sie hierbei den Platzhalter example.com durch die von Ihnen gewählte Domain. Wie Sie in Ihrem IONOS Konto eine Subdomain erstellen, wird im folgenden Artikel erklärt: Subdomain erstellen

SSL-Zertifikat bestellen

Richten Sie ein SSL-Zertifikat für Ihre Subdomain ein. Wenn Sie bereits ein Wildcard-SSL-Zertifikat für die Domain eingerichtet haben, können Sie diesen Schritt überspringen. Wildcard-SSL-Zertifikate sind sowohl für Ihre Domain als auch für Ihre Subdomain gültig.

Wenn Sie ein SSL-Starter-Zertifikat bestellen, können Sie dieses für Ihre Subdomain verwenden. Im folgenden Artikel wird erklärt, wie Sie ein SSL-Zertifikat einrichten: Benutzerverwaltetes SSL-Zertifikat einrichten (SSL Starter / SSL Starter Wildcard)

SSL-Zertifikatsdateien für die manuelle Installation herunterladen

Eine Anleitung, wie Sie die SSL-Zertifikatsdateien für die manuelle Installation herunterladen, finden Sie im folgenden Artikel: SSL-Zertifikatsdateien für manuelle Installation herunterladen

Domain mit der statischen IP-Adresse des Servers verbinden

Eine Anleitung, wie Sie Ihre Domain mit der statischen IP-Adresse Ihres Servers verbinden, finden Sie im folgenden Artikel: Ändern der IPv4/IPv6-Adresse einer Domain (A/AAAA-Record)

Firewall konfigurieren

Stellen Sie sicher, dass in der Firewall-Richtlinie folgende Ports freigeschaltet sind:

Port 80
Port 443
Port 5678

Eine Anleitung finden Sie im folgenden Artikel: Firewall-Richtlinie bearbeiten (VPS und migrierte Cloud Server)

SSH-Verbindung zum Server herstellen

Stellen Sie im nächsten Schritt eine SSH-Verbindung zu Ihrem Server her. Loggen Sie sich hierbei als root ein. Entsprechende Anleitungen finden Sie in den folgenden Artikeln:

Auf einem Computer mit Microsoft Windows eine SSH-Verbindung zu Ihrem Linux-Server aufbauen

Auf einem Linux-Computer eine SSH-Verbindung zu Ihrem Linux-Server aufbauen

SSL-Zertifikatsdateien im Host speichern

Um die SSL-Zertifikatsdateien im Host zu speichern, gehen Sie wie folgt vor:

Zertifikatsdateien befinden sich bereits auf dem Server

  • Erstellen Sie einen Ordner im Verzeichnis /opt/:

    root@ubuntu:~# mkdir -p /opt/certs

  • Kopieren Sie die Dateien in den Ordner. Wenn sich die Zertifikatsdateien bereits auf dem Server befinden, verwenden Sie den folgenden Befehl und passen Sie diesen an:

    root@ubuntu:~# cp /path/to/SSL-Zertifikat_FÜR_DOMAIN.cer /opt/certs/

    root@ubuntu:~# cp /path/to/INTERMEDIATE_ZERTIFIKAT_1.cer /opt/certs/

    root@ubuntu:~# cp /path/to/INTERMEDIATE_ZERTIFIKAT_2.cer /opt/certs/

    root@ubuntu:~# cp /path/to/Private_Key_FÜR_DOMAIN.key /opt/certs/

 

Zertifikatsdateien befinden sich bereits auf einem Computer mit dem Betriebssystem Microsoft Windows

Wenn sich die Zertifikatsdateien auf einem Computer mit dem Betriebssystem Microsoft Windows befinden, gehen Sie wie folgt vor:

  • Geben Sie in die Suchleiste, die sich in der Taskleiste befindet, den Befehl cmd ein.
  • Doppelklicken Sie auf Eingabeaufforderung.
  • Verwenden Sie den scp-Befehl, um die Dateien von Windows auf das Linux-System zu kopieren. Im folgenden Beispiel nehmen wir an, dass sich die Zertifikatsdateien im Ordner C:\SSL-Zertifikat befinden. Ersetzen Sie vor der Eingabe:

    username: mit Ihrem tatsächlichen Benutzernamen auf dem Server.
    remote-server-ip mit der IP-Adresse oder dem Hostnamen Ihres Servers.
    SSL-Zertifikat_FÜR_DOMAIN.cer und Private_Key_FÜR_DOMAIN.key mit den tatsächlichen Dateinamen.
    INTERMEDIATE_ZERTIFIKAT_1.cer und INTERMEDIATE_ZERTIFIKAT_2.cer mit den tatsächlichen Dateinamen.

    scp C:\SSL-Zertifikat\SSL-Zertifikat_FÜR_DOMAIN.cer username@remote-server-ip:/opt/certs/

    scp C:\SSL-Zertifikat\INTERMEDIATE_ZERTIFIKAT_1.cer username@remote-server-ip:/opt/certs/

    scp C:\SSL-Zertifikat\INTERMEDIATE_ZERTIFIKAT_2.cer username@remote-server-ip:/opt/certs/

    scp C:\SSL-Zertifikat\Private_Key_FÜR_DOMAIN.key username@remote-server-ip:/opt/certs/

Alternativ können Sie  die Dateien mit dem Programm WinSCP einfach und bequem übertragen. WinSCP ist ein grafischer Open-Source-SFTP und FTP-Client für Windows. Sie können das Programm auf der folgenden Seite des Anbieters herunterladen: WinSCP Download

Leserechte zuteilen

Wechseln Sie in das Verzeichnis, in dem sich die SSL-Zertifikate befinden. Beispiel:

root@ubuntu:~# cd /opt/certs

Damit die Dateien gelesen werden können, geben Sie auf dem VPS die folgenden Befehle ein:

sudo chmod 755 /path/to
sudo chmod 644 /path/to

Beispiel:

sudo chmod 755 /opt/certs
sudo chmod 644 /opt/certs/*

Fullchain-Datei erstellen

Um die Intermediate-Zertifikate einzubinden, müssen Sie eine einzige Zertifikatsdatei erstellen, die die gesamte "Vertrauenskette" (chain of trust) enthält. Gehen Sie hierzu wie folgt vor:

  • Wechseln Sie in das Verzeichnis /opt/certs:

    root@ubuntu:~# cd /opt/certs

  • Erstellen Sie mit dem folgenden Befehl eine "fullchain"-Datei. Der cat-Befehl hängt die Dateien in der richtigen Reihenfolge aneinander. Ersetzen Sie den Platzhalter SSL-Zertifikat_FÜR_DOMAIN.cer durch das SSL-Zertifikat für Ihre Domain und die Platzhalter für die Intermediate-Zertifikate. Stellen Sie hierbei sicher, dass die Dateinamen korrekt sind.

    root@ubuntu:/opt/certs# cat SSL-Zertifikat_FÜR_DOMAIN.cer intermediate1.cer intermediate2.cer > n8n.fullchain.cer

    Die "fullchain"-Datei wird erstellt.

n8n für SSL-Verbindung konfigurieren

Achtung

Mit diesen Schritten wird die installierte, ungesicherte Instanz deaktiviert und eine neue, mit einem SSL-Zertifikat von IONOS gesicherte n8n-Instanz installiert. Wenn Sie diese Schritte ausführen, nachdem Sie bereits einige Zeit mit der ungesicherten Instanz gearbeitet haben, empfehlen wir Ihnen, eventuell erstellte Workflows und andere Inhalte zunächst zu exportieren, damit Sie diese in die neue Instanz importieren können. Wie das funktioniert, erfahren Sie hier in der n8n-Dokumentation: Exporting and importing workflows | n8n Docs

  • Um auf Ihrem Server ein neues Verzeichnis namens n8n-compose zu erstellen, geben Sie den folgenden Befehl ein:

    root@ubuntu:~# mkdir n8n-compose

  • Um im neu erstellten Verzeichnis weiterzuarbeiten, wechseln Sie in das neue Verzeichnis:

    root@ubuntu:~# cd n8n-compose

  • Erstellen Sie in diesem Verzeichnis mit dem Editor vi eine Datei mit der Dateiendung .env.  Diese Datei wird verwendet, um Umgebungsvariablen zu definieren, die in der Docker Compose-Datei verwendet werden.

    root@ubuntu:~/n8n-compose# vi .env

Hinweise

Der Editor vi verfügt über einen Einfügemodus und einen Befehls- oder Kommandomodus. Den Einfügemodus können Sie mit der Taste [i] aufrufen. In diesem Modus werden die eingegebenen Zeichen sofort in den Text eingefügt. Um den Einfügemodus zu verlassen und den Befehlsmodus aufzurufen, drücken Sie anschließend [ESC]. Wenn Sie den Befehlsmodus nutzen, werden Ihre Tastatureingaben als Befehl interpretiert.

  • Fügen Sie in die Datei .env die unten stehenden Informationen ein und ersetzen Sie den Platzhalter example.com sowie den Platzhalter für die Zeitzone. Diese Variablen werden in einem späteren Schritt in der compose.yaml-Datei referenziert und dienen dazu, Domäneneinstellungen und den gewünschten Zeitzonenstandard festzulegen.

    # DOMAIN_NAME and SUBDOMAIN together determine where n8n will be reachable from
    # The top level domain to serve from
    DOMAIN_NAME=example.com

    # The subdomain to serve from
    SUBDOMAIN=n8n

    # The above example serves n8n at: https://n8n.example.com

    # Optional timezone to set which gets used by Cron and other scheduling nodes
    GENERIC_TIMEZONE=Europe/Berlin

  • Drücken Sie die Taste [ESC].
  • Um vi zu beenden und die Datei zu speichern, geben Sie den folgenden Befehl ein und drücken Sie anschließend die Eingabetaste:

    :wq

  • Erstellen Sie mit dem folgenden Befehl die Datei traefik.yaml:

    root@ubuntu:~/n8n-compose# vi traefik.yaml

  • Fügen Sie die folgenden Informationen ein und achten Sie hierbei auf die Einrückungen:

    # Statische Traefik-Konfiguration (traefik.yaml)
    api:
       insecure: true # Erlaubt das Traefik-Dashboard (optional)
    providers:
      docker:
        exposedByDefault: false # Nur Container mit 'traefik.enable=true' werden beachtet
      file:
        directory: /etc/traefik/dynamic # Pfad *im Container*
        watch: true # Auf Änderungen achten

    entryPoints:
      web:
        address: ":80"
        # Automatische Weiterleitung von HTTP zu HTTPS
        http:
          middlewares:
            - redirect-to-https@file
      websecure:
        address: ":443"
        http:
          tls: {} # TLS für diesen Entrypoint global aktivieren

  • Drücken Sie die Taste [ESC].
  • Um vi zu beenden und die Datei zu speichern, geben Sie den folgenden Befehl ein und drücken Sie anschließend die Eingabetaste:

    :wq

  • Erstellen Sie ein neues Verzeichnis mit dem Namen dynamic:

    root@ubuntu:~/n8n-compose# mkdir dynamic

  • Erstellen Sie eine dynamische Zertifikatsdatei:

    root@ubuntu:~/n8n-compose# vi dynamic/certificates.yaml

  • Fügen Sie die folgenden Informationen ein und ersetzen Sie den Platzhalter Private_Key_FÜR_DOMAIN.key. Achten Sie hierbei auf die Einrückungen:

    # Dynamische Konfiguration: Zertifikate
    tls:
      certificates:
        # Pfad *innerhalb des Containers* zur Kette
        - certFile: /opt/certs/n8n.fullchain.cer
          keyFile: /opt/certs/Private_Key_FÜR_DOMAIN.key

    # Dynamische Konfiguration: Globale HTTP-zu-HTTPS-Weiterleitung
    http:
      middlewares:
        redirect-to-https:
          redirectScheme:
            scheme: https
            permanent: true

  • Prüfen Sie die Pfade in den Zeilen certFile und keyFile und passen Sie diese ggf. an.
  • Drücken Sie die Taste [ESC].
  • Um vi zu beenden und die Datei zu speichern, geben Sie den folgenden Befehl ein und drücken Sie anschließend die Eingabetaste:

    :wq

  • Erstellen Sie ein Verzeichnis mit dem Namen local-files. Dieses wird als Bind-Mount genutzt, um den Zugriff auf Dateien aus dem Container heraus zu ermöglichen. Geben Sie hierzu den folgenden Befehl ein:

    root@ubuntu:~/n8n-compose# mkdir local-files

  • Um die erforderliche Docker-Compose-Datei zu erstellen, geben Sie den folgenden Befehl ein:

    root@ubuntu:~/n8n-compose# vi compose.yaml

  • Fügen Sie die unten stehenden Informationen ein und achten Sie darauf, dass die Einträge im Abschnitt # Definition der Security-Header-Middleware (Name: n8n-secure-headers) in einer Zeile stehen.

    services:
      traefik:
        image: "traefik:v2.11" # Feste Version für Stabilität
        restart: always
        command:
          - "--configFile=/etc/traefik/traefik.yaml"
        ports:
          - "80:80"
          - "443:443"
          - "127.0.0.1:8080:8080"
        volumes:
          - traefik_data:/data # Interner Speicher für Traefik (z.B. ACME-Infos, falls genutzt)
          - /var/run/docker.sock:/var/run/docker.sock:ro
          # Mounten der Zertifikate (wie zuvor)
          - /opt/certs:/opt/certs:ro
          # Mounten der neuen statischen Config-Datei
          - ./traefik.yaml:/etc/traefik/traefik.yaml:ro
          # Mounten des neuen dynamischen Config-Ordners
          - ./dynamic:/etc/traefik/dynamic:ro

      n8n:
        image: docker.n8n.io/n8nio/n8n
        restart: always
        ports:
          - "127.0.0.1:5678:5678"
        labels:
          - traefik.enable=true
          - traefik.http.routers.n8n.rule=Host(`${SUBDOMAIN}.${DOMAIN_NAME}`)
          # Der Router lauscht nur noch auf 'websecure' (HTTPS)
          - traefik.http.routers.n8n.entrypoints=websecure
          # Sagt dem Router, dass er TLS verwenden soll
          - traefik.http.routers.n8n.tls=true

          # Definition der Security-Header-Middleware (Name: n8n-secure-headers)
          - traefik.http.middlewares.n8n-secure-headers.headers.STSSeconds=315360000
          - traefik.http.middlewares.n8n-secure-headers.headers.browserXSSFilter=true
          - traefik.http.middlewares.n8n-secure-headers.headers.contentTypeNosniff=true
          - traefik.http.middlewares.n8n-secure-headers.headers.forceSTSHeader=true
          - traefik.http.middlewares.n8n-secure-headers.headers.SSLHost=${DOMAIN_NAME}
          - traefik.http.middlewares.n8n-secure-headers.headers.STSIncludeSubdomains=true
          - traefik.http.middlewares.n8n-secure-headers.headers.STSPreload=true

          # Zuweisung der Middleware zum Router
          - traefik.http.routers.n8n.middlewares=n8n-secure-headers@docker

        environment:
          # Diese Umgebungsvariablen verwenden die .env-Datei
          - N8N_ENFORCE_SETTINGS_FILE_PERMISSIONS=true
          - N8N_HOST=${SUBDOMAIN}.${DOMAIN_NAME}
          - N8N_PORT=5678
          - N8N_PROTOCOL=https
          - N8N_RUNNERS_ENABLED=true
          - NODE_ENV=production
          - WEBHOOK_URL=https://${SUBDOMAIN}.${DOMAIN_NAME}/
          - GENERIC_TIMEZONE=${GENERIC_TIMEZONE}
          - TZ=${GENERIC_TIMEZONE}
        volumes:
          - n8n_data:/home/node/.n8n
          - ./local-files:/files

    volumes:
      n8n_data:
      traefik_data:

  • Drücken Sie die Taste [ESC].
  • Um vi zu beenden und die Datei zu speichern, geben Sie den folgenden Befehl ein und drücken Sie anschließend die Eingabetaste:

    :wq

  • Um herauszufinden, welcher Prozess Port 5678 verwendet, geben Sie den folgenden Befehl ein:

    root@ubuntu:~/n8n-compose# sudo lsof -i :5678

  • Um einen Prozess zu beenden passen Sie den folgenden Befehl an und geben Sie diesen ein:

    root@ubuntu:~/n8n-compose# sudo kill PID_HIER_EINSETZEN

  • Nach der Anpassung geben Sie den folgenden Befehl ein, um die alten Container zu stoppen:

    root@ubuntu:~/n8n-compose# docker compose down

  • Um die im compose.yaml definierten Container als Daemons im Hintergrund zu starten, geben Sie den unten stehenden Befehl ein. Durch diesen Befehl werden die Traefik- und n8n-Instanzen gestartet und konfiguriert.

    root@ubuntu:~/n8n-compose# docker compose up -d

  • Um zu prüfen, ob die Container laufen, geben Sie den folgenden Befehl ein:

    root@ubuntu:~/n8n-compose# docker ps

  • Stellen Sie sicher, dass die folgenden 2 Container laufen und deren Status “UP” lautet. Geben Sie hierzu die folgenden Befehle ein.

    root@ubuntu:~/n8n-compose# n8n-compose-traefik-1
    root@ubuntu:~/n8n-compose# n8n-compose-n8n-1

Hilfe im Problemfall

  • Falls einer der Container nicht  Status "Up" hat (z. B. "Restarting" oder "Exited"), ist das der Fehler. Prüfen Sie in diesem Fall die Log-Einträge von Traefik.  Geben Sie hierzu den folgenden Befehl ein:

    root@ubuntu:~/n8n-compose# docker logs n8n-compose-traefik-1

  • Suchen Sie anschließend nach  Fehlermeldungen, wie z. B.:

    certificate not found
    unable to read
    permission denied (dies würde auf ein chmod-Problem hinweisen)
    router not found for domain

  • Prüfen Sie die Firewall-Einstellungen im Cloud Panel und stellen Sie sicher, dass der eingehende Traffic für Port 80 (TCP) und Port 443 (TCP) erlaubt ist.
  • Prüfen Sie die Erreichbarkeit der Subdomain.
  • Prüfen Sie die Einrückungen der .yaml-Dateien.

Auf die n8n-Oberfläche zugreifen

Nachdem die Docker-Dienste (Container) erfolgreich gestartet wurden, wird der Zugriff auf n8n durch den Traefik-Proxy verwaltet. Traefik sorgt für die SSL-Verschlüsselung und leitet Anfragen an Ihre n8n-Instanz weiter. Der Zugriff erfolgt nun ausschließlich über die Domain, die Sie zuvor in der .env-Datei konfiguriert haben.

Hinweis

Der direkte Zugriff über http://SERVER-IP:5678 ist nicht mehr möglich. Die Konfiguration in der compose.yaml (unter ports: - "127.0.0.1:5678:5678") sorgt dafür, dass n8n nur "intern" (für Traefik) erreichbar ist, aber nicht öffentlich über die Server-IP.

  • Öffnen Sie Ihren Browser.
  • Geben Sie die vollständige, gesicherte URL ein, die sich aus den Variablen SUBDOMAIN und DOMAIN_NAME Ihrer .env-Datei zusammensetzt. Beispiel:
    https://n8n.example.com
  • Beim ersten Aufruf wird das Fenster Set up owner account angezeigt. Geben Sie im Feld E-Mail-Adresse die gewünschte E-Mail-Adresse ein.
  • Geben Sie im Feld First Name und Last Name den gewünschten Vor- und Nachnamen ein.
  • Geben Sie im Feld Password ein Passwort ein.
  • Klicken Sie auf Next. Das Fenster Customize n8n to you öffnet sich.
Screenshot: Das Fenster Setup owner account wird angezeigt. In diesem Fenster ist die Schaltfläche Next hervorgehoben.
Abbildung: Schaltfläche Next im Fenster Setup owner account
  • Beantworten Sie die Fragen im Fenster Customize n8n to you und klicken Sie auf Get started. Anschließend können Sie n8n nutzen.
Screenshot: Das Fenster Customize n8n to you wird angezeigt. In diesem Fenster ist die Schaltfläche Get started hervorgehoben.
Abbildung: Schaltfläche Get started im Fenster Customize n8n to you