HowTo: n8n bei Hetzner installieren (mit Nginx Proxy Manager)

n8n ist ein immer beliebter werdendes Tool. Mit n8n können verschiedene Dienste miteinander kombiniert werden und Arbeitsschritte in sogenannten Workflows automatisiert werden. So gibt es die verschiedenste Workflows: z.B. E-Mails anhand des Inhalts automatisch in Ordner verschieben / mit Labels versehen, Webseiten überwachen und Preisänderungen erfassen usw.

Hier eine Anleitung, wie man n8n auf einem Hetzner vServer* installieren kann.

Voraussetzung:
-Debian / Ubuntu
-ca. 2 Kerne, mind. 4 GB SSD, 2 GB RAM (anhängig von den der Anzahl aktiver Workflows) – z.B. von Hetzner*
-eine Domain (z.B. aus dem Webhosting-Paket bei All-Inkl*)

1 .Schritt

Zunächst registrierst du dich bei Hetzner und buchst einen virtuellen Server. Nutze dafür gerne diesen Link*, dann erhältst du ein Guthaben von 20 Euro. Grundsätzlich kannst du aber einen der vielen anderen vServer-Angebote von anderen Anbietern nutzen.

In meinem Fall nehme ich einen vServer auf ARM-Basis „CAX11“ in Falkenstein. Dieser hat 2 VCPUS und 4GB, sowie 40 GB RAM. Für den Anfang reicht das mit Sicherheit. Für 4,51 Euro kann man da nichts falsch machen. Falls später noch mehr Leistung benötigt werden sollte, ist ein Upgrade leicht und ohne Neuinstallation möglich.

Nachdem du den Server mit der App „Docker-CE“ angelegt hast, logge dich per SSH als „root“ ein. Falls du noch keine SSH-Software hast, kann ich Termius (Windows/Mac) empfehlen. Komplett kostenlos ist auch Putty für Windows sehr beliebt.

Nach dem Login updaten wir erst einmal Ubuntu:

apt-get update && apt-get upgrade -y

danach starten wir den Server mit

reboot

neu.

2. Schritt

Falls du nicht einen Server mit vorinstalliertem Docker wählst, installiere zunächst docker und docker-compose:

3. Schritt

Gehe in das home-Verzeichnis mit

cd ..

und wechsle mit

cd home

und erstelle ein Verzeichnis und wechsle rein:

mkdir npm
cd npm

Erstelle dann eine yml.-Datei

nano docker-compose.yml

und füge folgenden Text ein

services:
  app:
    image: 'jc21/nginx-proxy-manager:latest'
    restart: unless-stopped
    ports:
      # These ports are in format <host-port>:<container-port>
      - '80:80' # Public HTTP Port
      - '443:443' # Public HTTPS Port
      - '81:81' # Admin Web Port
      # Add any other Stream port you want to expose
      # - '21:21' # FTP
    environment:
      # Mysql/Maria connection parameters:
      DB_MYSQL_HOST: "db"
      DB_MYSQL_PORT: 3306
      DB_MYSQL_USER: "npm"
      DB_MYSQL_PASSWORD: "npm"
      DB_MYSQL_NAME: "npm"
      # Uncomment this if IPv6 is not enabled on your host
      # DISABLE_IPV6: 'true'
    volumes:
      - ./data:/data
      - ./letsencrypt:/etc/letsencrypt
    depends_on:
      - db

  db:
    image: 'jc21/mariadb-aria:latest'
    restart: unless-stopped
    environment:
      MYSQL_ROOT_PASSWORD: 'npm'
      MYSQL_DATABASE: 'npm'
      MYSQL_USER: 'npm'
      MYSQL_PASSWORD: 'npm'
      MARIADB_AUTO_UPGRADE: '1'
    volumes:
      - ./mysql:/var/lib/mysql

Nun ist der Proxy Manager mit GUI installiert. Test den Zugriff, indem du die auf den Server gerichtete Domain oder die IP-Adresse in den Browser folgendermaßen eingibst: http://IP_oder_DOMAIN:81

Ggf. musst du dem Browser bestätigen, dass du eine ungesicherte Verbindung nutzen möchtest, da noch das SSL-Zertifikat fehlt.

4. Schritt

Als nächstes installieren wir n8n.

Wechsle dazu wieder in das home-Verzeichnis, erstelle das n8n-Verzeichnis und wechsle hinein:

cd ..
mkdir n8n
cd n8n

Nun müssen drei Dateien erstellt werden.

nano .env

mit folgendem Inhalt:

POSTGRES_USER=changeUser
POSTGRES_PASSWORD=changePassword
POSTGRES_DB=n8n

POSTGRES_NON_ROOT_USER=changeUser
POSTGRES_NON_ROOT_PASSWORD=changePassword

Ersetze die Passwörter nach eigenem Wunsch. Erstelle

nano docker-compose.yml

mit dem Inhalt

version: '3.8'

volumes:
  db_storage:
  n8n_storage:

services:
  postgres:
    image: postgres:16
    restart: always
    environment:
      - POSTGRES_USER
      - POSTGRES_PASSWORD
      - POSTGRES_DB
      - POSTGRES_NON_ROOT_USER
      - POSTGRES_NON_ROOT_PASSWORD
    volumes:
      - db_storage:/var/lib/postgresql/data
      - ./init-data.sh:/docker-entrypoint-initdb.d/init-data.sh
    healthcheck:
      test: ['CMD-SHELL', 'pg_isready -h localhost -U ${POSTGRES_USER} -d ${POSTGRES_DB}']
      interval: 5s
      timeout: 5s
      retries: 10

  n8n:
    image: docker.n8n.io/n8nio/n8n
    restart: always
    environment:
      - DB_TYPE=postgresdb
      - DB_POSTGRESDB_HOST=postgres
      - DB_POSTGRESDB_PORT=5432
      - DB_POSTGRESDB_DATABASE=${POSTGRES_DB}
      - DB_POSTGRESDB_USER=${POSTGRES_NON_ROOT_USER}
      - DB_POSTGRESDB_PASSWORD=${POSTGRES_NON_ROOT_PASSWORD}
    ports:
      - 5678:5678
    links:
      - postgres
    volumes:
      - n8n_storage:/home/node/.n8n
    depends_on:
      postgres:
        condition: service_healthy

und die Datei

nano init-data.sh

mit dem Inhalt

#!/bin/bash
set -e;


if [ -n "${POSTGRES_NON_ROOT_USER:-}" ] && [ -n "${POSTGRES_NON_ROOT_PASSWORD:-}" ]; then
	psql -v ON_ERROR_STOP=1 --username "$POSTGRES_USER" --dbname "$POSTGRES_DB" <<-EOSQL
		CREATE USER ${POSTGRES_NON_ROOT_USER} WITH PASSWORD '${POSTGRES_NON_ROOT_PASSWORD}';
		GRANT ALL PRIVILEGES ON DATABASE ${POSTGRES_DB} TO ${POSTGRES_NON_ROOT_USER};
		GRANT CREATE ON SCHEMA public TO ${POSTGRES_NON_ROOT_USER};
	EOSQL
else
	echo "SETUP INFO: No Environment variables given!"
fi

Führe die Installation von n8n aus mit

docker-compose up -d

Nach der Installation ist der n8n-Server unter Port 5678 erreichbar. Jedoch erlaubt n8n nicht, dass man die GUI über die IP-Adresse besucht. Daher verknüpfen wir über den Proxy Manager eine Domain mit n8n.

Dazu erstellen wir einen Proxyhost. Z.B. n8n.domain.de. Gerichtet an localhost mit Port 5678 im Schema http. Im Reiter Details aktivieren wir alle Häckchen. Im SSL-Reiter stellen wir „Force SSL“ und „HTTP/2-Support“ an. Zudem muss eine E-Mail-Adresse eingegeben werden. Nach dem Absenden wird ein SSL-Zertifikat erstellt. n8n sollte nun unter der neu erstellten Domain erreichbar sein.

Bei Fragen schreibt mir gerne in die Kommentare. Demnächst erstelle ich ein Video dazu, welches ich hier ebenso verlinke.

Kommentare

Schreibe einen Kommentar

Deine E-Mail-Adresse wird nicht veröffentlicht. Erforderliche Felder sind mit * markiert