n8n installieren

 

n8n ist ein leistungsstarkes Workflow- und Automatisierungs-Tool. In dieser Anleitung beschreibe ich, wie wir n8n ohne Docker auf einem Ubuntu-Server installiert und betrieben haben – mit Apache als Reverse Proxy und PostgreSQL als Datenbank. Ziel ist, dass n8n dauerhaft als Service läuft und stabil über eine Domain erreichbar ist.

 

1. Voraussetzungen

Bevor ich starte, stelle ich sicher, dass Folgendes vorhanden ist:

  • Ubuntu-Server mit SSH-Zugriff und sudo-Rechten
  • Eine Domain/Subdomain (z. B. n8n.meine-domain.tld), die per DNS auf den Server zeigt
  • Apache installiert (inkl. Proxy-Module) und HTTPS ist möglich (Let’s Encrypt)
  • PostgreSQL installiert oder installierbar
  • Node.js (LTS) + npm

 

2. Benutzer und Verzeichnisse für n8n anlegen

Ich lege einen eigenen System-User für n8n an, damit der Dienst nicht als root läuft:

 

sudo adduser --system --home /opt/n8n --group n8n

 

Dann erstelle ich das n8n-User-Home für Persistenz (Credentials, Settings, etc.):

 

sudo mkdir -p /opt/n8n/.n8n
sudo chown -R n8n:n8n /opt/n8n

 

 

3. Node.js (LTS) installieren

Auf Ubuntu installiere ich Node.js LTS über NodeSource:

 

curl -fsSL deb.nodesource.com/setup_lts.x | sudo -E bash -
sudo apt-get update
sudo apt-get install -y nodejs

 

Danach prüfe ich die Versionen:

 

node -v
npm -v

 

 

4. n8n per npm installieren

Wir installieren n8n global über npm:

 

sudo npm install -g n8n

 

Optional prüfe ich kurz, ob n8n grundsätzlich startet:

 

n8n --version
n8n

 

Anschließend beende ich es wieder (CTRL+C), weil es als systemd-Service laufen soll.

 

5. PostgreSQL einrichten (DB + User)

Falls PostgreSQL noch nicht installiert ist:

 

sudo apt-get install -y postgresql

 

Dann lege ich Datenbank und Benutzer für n8n an (Passwort anpassen):

 

sudo -u postgres psql

 

CREATE USER n8n WITH PASSWORD 'SEHR_STARKES_PASSWORT';
CREATE DATABASE n8n OWNER n8n;
\q

 

 

6. n8n Konfiguration (Environment-Datei)

Wir konfigurieren n8n über eine Environment-Datei, die systemd später lädt:

 

sudo nano /opt/n8n/n8n.env

 

Beispiel-Konfiguration (Domain/Passwörter anpassen):

 

# Basis
NODE_ENV=production
N8N_HOST=n8n.meine-domain.tld
N8N_PORT=5678
N8N_PROTOCOL=https

# Wichtig, damit Webhooks/Links korrekt sind (hinter Apache Reverse Proxy)
WEBHOOK_URL=https://n8n.meine-domain.tld/

# Persistenz
N8N_USER_FOLDER=/opt/n8n/.n8n

# Sicherheit (empfohlen)
N8N_BASIC_AUTH_ACTIVE=true
N8N_BASIC_AUTH_USER=admin
N8N_BASIC_AUTH_PASSWORD=SEHR_STARKES_PASSWORT

# Sehr wichtig: Verschlüsselung der Credentials
N8N_ENCRYPTION_KEY=HIER_EINEN_LANGEN_RANDOM_KEY_EINTRAGEN

# PostgreSQL
DB_TYPE=postgresdb
DB_POSTGRESDB_HOST=127.0.0.1
DB_POSTGRESDB_PORT=5432
DB_POSTGRESDB_DATABASE=n8n
DB_POSTGRESDB_USER=n8n
DB_POSTGRESDB_PASSWORD=SEHR_STARKES_PASSWORT

 

Dann sperre ich die Datei (enthält Secrets):

 

sudo chown root:root /opt/n8n/n8n.env
sudo chmod 600 /opt/n8n/n8n.env

 

Hinweis: Den N8N_ENCRYPTION_KEY unbedingt sicher ablegen. Wenn der Key verloren geht oder geändert wird, sind gespeicherte Credentials nicht mehr lesbar.

 

7. systemd Service für n8n erstellen

Damit n8n nach Reboots automatisch startet, richten wir einen systemd-Service ein:

 

sudo nano /etc/systemd/system/n8n.service

 

Service-Datei (ggf. ExecStart-Pfad anpassen, je nach Installation):

 

[Unit]
Description=n8n workflow automation
After=network.target postgresql.service
Wants=postgresql.service

[Service]
Type=simple
User=n8n
Group=n8n
EnvironmentFile=/opt/n8n/n8n.env
WorkingDirectory=/opt/n8n
ExecStart=/usr/bin/n8n
Restart=on-failure
RestartSec=5

[Install]
WantedBy=multi-user.target

 

Danach aktiviere und starte ich den Service:

 

sudo systemctl daemon-reload
sudo systemctl enable n8n
sudo systemctl start n8n

 

Status und Logs prüfen:

 

sudo systemctl status n8n --no-pager

 

sudo journalctl -u n8n -f

 

 

8. Apache als Reverse Proxy konfigurieren

Damit n8n über die Domain erreichbar ist, konfigurieren wir Apache als Reverse Proxy auf den lokalen n8n-Port 5678.

Zuerst stelle ich sicher, dass die benötigten Module aktiv sind:

 

sudo a2enmod proxy proxy_http proxy_wstunnel rewrite headers ssl
sudo systemctl restart apache2

 

Dann erstelle ich eine Apache VirtualHost-Konfiguration (Beispielname):

 

sudo nano /etc/apache2/sites-available/n8n.conf

 

Beispiel (HTTP; HTTPS kommt im nächsten Schritt über Let’s Encrypt):

 

<VirtualHost *:80>
    ServerName n8n.meine-domain.tld

    ProxyPreserveHost On
    RequestHeader set X-Forwarded-Proto "http"

    ProxyPass        / 127.0.0.1
    ProxyPassReverse / 127.0.0.1

    # WebSocket Support (für n8n UI/Realtime)
    ProxyPass        /ws/ ws://127.0.0.1:5678/ws/
    ProxyPassReverse /ws/ ws://127.0.0.1:5678/ws/
</VirtualHost>

 

Site aktivieren und Apache neu laden:

 

sudo a2ensite n8n.conf
sudo apache2ctl configtest
sudo systemctl reload apache2

 

 

9. HTTPS (Let’s Encrypt) aktivieren

Ich installiere Certbot für Apache und hole mir ein Zertifikat:

 

sudo apt-get update
sudo apt-get install -y certbot python3-certbot-apache
sudo certbot --apache -d n8n.meine-domain.tld

 

Certbot ergänzt/erstellt dann typischerweise automatisch den HTTPS-VHost. Wichtig ist, dass n8n selbst weiterhin lokal auf 127.0.0.1:5678 läuft und Apache nach außen HTTPS terminiert.

Nach dem HTTPS-Setup stelle ich sicher, dass der Forwarded-Proto Header korrekt ist (oft setzt Certbot das schon). Falls nötig, ergänze ich im SSL-VHost:

 

RequestHeader set X-Forwarded-Proto "https"

 

 

10. Funktionstest

Zum Abschluss teste ich:

  • UI erreichbar: n8n.meine-domain.tld
  • Basic Auth greift (falls aktiviert)
  • Webhooks funktionieren (Test-Workflow mit Webhook-Node)
  • Service läuft stabil:
    • sudo systemctl status n8n
    • sudo journalctl -u n8n -f

 

Fazit

Unsere n8n-Installation auf Ubuntu ohne Docker besteht im Wesentlichen aus:

  • ✅ Node.js LTS installieren
  • ✅ n8n per npm installieren
  • ✅ PostgreSQL DB/User anlegen und n8n darauf konfigurieren
  • ✅ Betrieb als systemd-Service
  • ✅ Apache als Reverse Proxy + Let’s Encrypt für HTTPS

 

 

Recent Posts

 

n8n ist ein leistungsstarkes Workflow- und Automatisierungs-Tool. In dieser Anleitung beschreibe ich, wie wir n8n ohne Docker auf einem Ubuntu-Serve…

Weiterlesen

 

Die Agency-Extension von NITSAN ist ein leistungsstarkes Template für TYPO3-Websites. In diesem Artikel beschreibe ich, wie diese Extension korrekt…

Weiterlesen

 

Wichtiger Hinweis: PHP 8.3 enthält signifikante Änderungen gegenüber früheren Versionen. Bitte prüf vor dem Update die Kompatibilität deiner…

Weiterlesen

Mein Thunderbird zickte plötzlich unerklärlicherweise herum: Es erinnerte mich an längst abgelaufene Termine, Aufgaben und Geburtstage – und das jeden…

Weiterlesen

Wichtiger Hinweis zu Beginn: Ich mache mir eine Kopie von der Webseite, die ich nach Composer migrieren will. Wie man eine Webseite für eine Kopie…

Weiterlesen

Adminer ist die Alternative zu phpMyAdmin

Weiterlesen

Voraussetzungen

• Ubuntu 22.04 Server

• SSH-Root-Zugang

• Apache2

• MySQL

• PHP8.2 PHP

 

Für Typo3 12.4 sollten außerdem folgende PHP-Module…

Weiterlesen

Extensions aktualisieren

Bei einem Upgrade eine Typo3-Installation ist als erstes eine Sicherung der Datenbank inklusive der Document Root Pflicht.…

Weiterlesen

Ich hatte auf einem frischen Ubuntu-Server 22.04 Typo3 12.2 und anschließend auch 11.5 mit Composer installiert. Als ich mich ins Backend einloggen…

Weiterlesen

Ich habe auf meinem Ubuntu-Mailserver Roundcube 1.4.11 am Start und möchte auf die aktuelle Version upgraden. Dazu gehe ich auf die Webseite von…

Weiterlesen

Kategorien

Kommentare und Antworten

×

Name ist erforderlich!

Geben Sie einen gültigen Namen ein

Gültige E-Mail ist erforderlich!

Gib eine gültige E-Mail Adresse ein

Kommentar ist erforderlich!

Captcha Code Kann das Bild nicht gelesen werden? Klicken Sie hier, um zu aktualisieren

Captcha ist erforderlich!

Code stimmt nicht überein!

* Diese Felder sind erforderlich.

Sei der Erste, der kommentiert!