Zum Inhalt springen

Tutorials

n8n auf eigenem VPS mit Docker Compose installieren

June 14, 2026 · George.M

n8n auf eigenem VPS mit Docker Compose installieren – Schritt-für-Schritt-Anleitung für Anfänger

In dieser Anleitung zeige ich dir, wie du n8n auf einem eigenen VPS mit Docker Compose installierst. Die Anleitung ist so geschrieben, dass auch Anfänger sie nachvollziehen können.

Wir installieren n8n in einem Docker-Container, speichern die Daten dauerhaft in einem Docker Volume und machen n8n anschließend über eine eigene Subdomain erreichbar, zum Beispiel:

https://n8n.deine-domain.de

In diesem Beispiel verwenden wir zusätzlich Nginx Proxy Manager, damit n8n sicher über HTTPS erreichbar ist.


Was ist n8n?

n8n ist ein Automatisierungstool. Damit kannst du verschiedene Dienste miteinander verbinden und eigene Workflows erstellen.

Beispiele:

  • Formular absenden und automatisch eine E-Mail verschicken
  • Daten aus einer API abrufen
  • Leads oder Rechnungen automatisch verarbeiten
  • Google Sheets, Gmail, Webhooks, Datenbanken und andere Tools verbinden
  • eigene Automationen ohne klassische Programmierung bauen

n8n eignet sich sehr gut für Self-Hosting, weil du es auf deinem eigenen Server betreiben kannst.


Warum n8n mit Docker Compose installieren?

Docker Compose macht die Installation und Verwaltung deutlich einfacher. Statt viele Programme direkt auf dem Server zu installieren, läuft n8n in einem eigenen Container.

Die Vorteile:

  • einfache Installation
  • saubere Trennung vom restlichen Server
  • einfache Updates
  • Daten bleiben über Volumes erhalten
  • Konfiguration liegt übersichtlich in einer Datei
  • n8n kann später leicht neu gestartet, gestoppt oder aktualisiert werden

Docker Compose verwendet dafür eine Datei namens:

compose.yaml
1

In dieser Datei steht, welcher Container gestartet wird, welche Ports genutzt werden, welche Umgebungsvariablen gesetzt werden und wo die Daten gespeichert werden.


Voraussetzungen

Du brauchst:

  • einen VPS mit Ubuntu, zum Beispiel Ubuntu 22.04 oder Ubuntu 24.04
  • SSH-Zugang zum Server
  • Root-Zugriff oder einen Benutzer mit sudo-Rechten
  • eine Domain oder Subdomain
  • Docker und Docker Compose
  • optional, aber empfohlen: Nginx Proxy Manager für HTTPS

In dieser Anleitung verwenden wir als Beispiel diese Subdomain:

n8n.deine-domain.de

Du musst sie später durch deine eigene Domain ersetzen.


Schritt 1: Mit dem VPS per SSH verbinden

Öffne dein Terminal und verbinde dich mit deinem Server.

ssh root@DEINE_SERVER_IP

Beispiel:

ssh root@123.123.123.123

Falls du keinen Root-Benutzer verwendest:

ssh benutzername@DEINE_SERVER_IP

Schritt 2: Server aktualisieren

Zuerst aktualisieren wir den Server.

sudo apt update
sudo apt upgrade -y

Danach installieren wir ein paar benötigte Pakete:

sudo apt install -y ca-certificates curl gnupg lsb-release

2

Schritt 3: Docker installieren

Falls Docker bereits installiert ist, kannst du diesen Schritt überspringen.

Zuerst legen wir den Schlüsselordner an:

sudo install -m 0755 -d /etc/apt/keyrings

Jetzt fügen wir den offiziellen Docker-GPG-Key hinzu:

curl -fsSL https://download.docker.com/linux/ubuntu/gpg | sudo gpg --dearmor -o /etc/
apt/keyrings/docker.gpg

Danach setzen wir die richtigen Rechte:

sudo chmod a+r /etc/apt/keyrings/docker.gpg

Jetzt fügen wir das Docker-Repository hinzu:

echo 
"deb [arch=$(dpkg --print-architecture) signed-by=/etc/apt/keyrings/docker.gpg] https://
download.docker.com/linux/ubuntu 
$(. /etc/os-release && echo "$VERSION_CODENAME") stable" | 
sudo tee /etc/apt/sources.list.d/docker.list > /dev/null

Paketliste aktualisieren:

sudo apt update

Docker installieren:

sudo apt install -y docker-ce docker-ce-cli containerd.io docker-buildx-plugin docker
compose-plugin

Schritt 4: Docker prüfen

Prüfe, ob Docker installiert wurde:

docker --version

Prüfe Docker Compose:

docker compose version

Wenn beide Befehle eine Version anzeigen, ist Docker korrekt installiert.

Beispielausgabe:

3
Docker version 29.2.1
Docker Compose version v5.1.0

Schritt 5: Docker testen

Starte einen Test-Container:

sudo docker run hello-world

Wenn Docker funktioniert, bekommst du eine Erfolgsmeldung.


Schritt 6: Projektordner für n8n erstellen

Jetzt erstellen wir einen eigenen Ordner für n8n.

mkdir -p ~/n8n-compose
cd ~/n8n-compose

In diesem Ordner werden später die Konfigurationsdateien liegen.


Schritt 7: .env-Datei erstellen

Die .env-Datei enthält wichtige Einstellungen wie Domain, Subdomain und Zeitzone.

Erstelle die Datei:

nano .env

Füge diesen Inhalt ein:

DOMAIN_NAME=deine-domain.de
SUBDOMAIN=n8n
GENERIC_TIMEZONE=Europe/Berlin

Passe deine-domain.de an deine echte Domain an.

Beispiel:

DOMAIN_NAME=example.com
SUBDOMAIN=n8n
GENERIC_TIMEZONE=Europe/Berlin

Speichern in Nano:

CTRL + O
Enter
CTRL + X
4

Schritt 8: Ordner für lokale Dateien erstellen

n8n kann Dateien verarbeiten. Dafür erstellen wir einen lokalen Ordner, der später in den Container eingebunden wird.

mkdir -p local-files

Schritt 9: compose.yaml für n8n erstellen

Jetzt erstellen wir die Docker-Compose-Datei.

nano compose.yaml

Füge diesen Inhalt ein:

services: n8n: image: n8nio/n8n:latest container_name: n8n restart: unless-stopped ports: 
"127.0.0.1:5678:5678" environment: - N8N_HOST=${SUBDOMAIN}.${DOMAIN_NAME} - N8N_PORT=5678- N8N_PROTOCOL=https - NODE_ENV=production - WEBHOOK_URL=https://${SUBDOMAIN}.$
{DOMAIN_NAME}/ - GENERIC_TIMEZONE=${GENERIC_TIMEZONE} volumes: - n8n_data:/home/
node/.n8n - ./local-files:/files
volumes: n8n_data:

Speichern:

CTRL + O
Enter
CTRL + X

Erklärung der Compose-Datei

Image

image: n8nio/n8n:latest

Damit wird das offizielle n8n Docker Image verwendet.

Container-Name

container_name: n8n

Der Container bekommt den Namen n8n. Dadurch kannst du später einfach Logs anzeigen:

docker logs n8n -f
5

Automatischer Neustart

restart: unless-stopped

Wenn der Server neu startet, startet auch n8n automatisch wieder.

Port

ports:
• 
"127.0.0.1:5678:5678"

n8n läuft intern auf Port 5678.

Durch 127.0.0.1 ist n8n nicht direkt öffentlich über die Server-IP erreichbar. Das ist sicherer, wenn du einen Reverse Proxy wie Nginx Proxy Manager verwendest.

Domain und HTTPS

- N8N_HOST=${SUBDOMAIN}.${DOMAIN_NAME}
• 
• 
N8N_PROTOCOL=https
WEBHOOK_URL=https://${SUBDOMAIN}.${DOMAIN_NAME}/

Diese Werte sorgen dafür, dass n8n später korrekt mit deiner HTTPS-Domain arbeitet.

Beispiel:

https://n8n.example.com

Daten speichern

volumes:
• 
n8n_data:/home/node/.n8n

Hier speichert n8n seine Daten dauerhaft.

Wichtig: Ohne Volume könnten Daten verloren gehen, wenn der Container gelöscht wird.


Schritt 10: n8n starten

Starte n8n mit Docker Compose:

docker compose up -d

Der Parameter -d bedeutet, dass n8n im Hintergrund gestartet wird.

6

Schritt 11: Status prüfen

Prüfe, ob der Container läuft:

docker compose ps

Oder:

docker ps

Du solltest ungefähr so etwas sehen:

NAMES IMAGE STATUS PORTS n8n n8nio/n8n:latest Up 127.0.0.1:5678->5678/tcp

Schritt 12: Logs prüfen

Wenn du sehen möchtest, was n8n macht:

docker logs n8n -f

Oder mit Docker Compose:

docker compose logs -f

Mit dieser Tastenkombination verlässt du die Log-Ansicht:

CTRL + C

Schritt 13: DNS-Eintrag für n8n setzen

Damit n8n über eine Subdomain erreichbar ist, brauchst du einen DNS-A-Record.

Gehe zu deinem Domain-Anbieter und erstelle diesen Eintrag:

Typ: A Name: n8n Wert: DEINE_SERVER_IP TTL: 300 oder Standard

Beispiel:

Typ: A Name: n8n Wert: 123.123.123.123 TTL: 300

Wenn deine Domain example.com ist, zeigt danach diese Adresse auf deinen Server:

7
n8n.example.com

Die DNS-Änderung kann ein paar Minuten dauern.


Schritt 14: DNS prüfen

Auf dem Server kannst du prüfen, ob die Subdomain korrekt aufgelöst wird:

dig n8n.deine-domain.de

Falls dig nicht installiert ist:

sudo apt install -y dnsutils

Dann erneut prüfen:

dig n8n.deine-domain.de

Die angezeigte IP sollte die IP deines VPS sein.

Alternativ:

nslookup n8n.deine-domain.de

Schritt 15: Nginx Proxy Manager einrichten

Wenn du bereits Nginx Proxy Manager verwendest, legst du dort einen neuen Proxy Host an.

Öffne Nginx Proxy Manager im Browser.

Dann:

  1. Gehe zu Hosts
  2. Klicke auf Proxy Hosts
  3. Klicke auf Add Proxy Host

Trage ein:

Domain Names: n8n.deine-domain.de Scheme: http Forward Hostname / IP: 127.0.0.1
Forward Port: 5678

Aktiviere außerdem:

Websockets Support Block Common Exploits

Danach speichern.

8

Wichtiger Hinweis bei Docker-Netzwerken

Wenn Nginx Proxy Manager ebenfalls in Docker läuft, kann es sein, dass 127.0.0.1 nicht funktioniert, weil 127.0.0.1 dann innerhalb des Nginx-Proxy-Manager-Containers liegt.

Dann ist es oft besser, n8n mit demselben Docker-Netzwerk wie Nginx Proxy Manager zu verbinden.

Prüfe zuerst die vorhandenen Netzwerke:

docker network ls

Wenn dein Nginx Proxy Manager zum Beispiel im Netzwerk nginx-proxy_default läuft, kannst du n8n mit diesem Netzwerk verbinden.

Öffne deine compose.yaml:

nano compose.yaml

Ersetze den Inhalt durch diese Variante:

services: n8n: image: n8nio/n8n:latest container_name: n8n restart: unless-stopped
networks: - nginx-proxy_default ports: - "127.0.0.1:5678:5678" environment: - N8N_HOST=$
{SUBDOMAIN}.${DOMAIN_NAME} - N8N_PORT=5678 - N8N_PROTOCOL=https - NODE_ENV=production 
WEBHOOK_URL=https://${SUBDOMAIN}.${DOMAIN_NAME}/ - GENERIC_TIMEZONE=$
{GENERIC_TIMEZONE} volumes: - n8n_data:/home/node/.n8n - ./local-files:/files
volumes: n8n_data:
networks: nginx-proxy_default: external: true

Danach n8n neu starten:

docker compose down docker compose up -d

Dann kannst du in Nginx Proxy Manager als Forward Hostname verwenden:

n8n

Und als Port:

5678

Schritt 16: SSL-Zertifikat aktivieren

9

Im Nginx Proxy Manager öffnest du den Proxy Host für n8n.

Gehe zum Tab SSL.

Wähle:

Request a new SSL Certificate

Aktiviere:

Force SSL HTTP/2 Support

Trage deine E-Mail-Adresse ein und akzeptiere die Let’s-Encrypt-Bedingungen.

Danach speichern.

Wenn alles korrekt ist, ist n8n danach über HTTPS erreichbar:

https://n8n.deine-domain.de

Schritt 17: n8n im Browser öffnen

Öffne jetzt deine Subdomain:

https://n8n.deine-domain.de

Beim ersten Aufruf erscheint der n8n-Einrichtungsassistent.

Dort legst du dein erstes Benutzerkonto an.

Wichtig: Wähle ein starkes Passwort.


Wichtige Befehle für n8n

In den n8n-Ordner wechseln

cd ~/n8n-compose

n8n starten

docker compose up -d

n8n stoppen

docker compose stop
10

n8n neu starten

docker compose restart

Status anzeigen

docker compose ps

Logs anzeigen

docker logs n8n -f

Oder:

docker compose logs -f

n8n aktualisieren

cd ~/n8n-compose docker compose pull docker compose up -d

Damit wird das neue n8n-Image geladen und der Container neu gestartet.

n8n stoppen und Container entfernen

docker compose down

Die Daten im Volume bleiben dabei normalerweise erhalten.

Achtung: n8n inklusive Daten löschen

Diesen Befehl nur ausführen, wenn du wirklich alles löschen willst:

docker compose down -v

Der Parameter -v entfernt auch Volumes. Dadurch können deine n8n-Daten verloren gehen.


Backup erstellen

n8n speichert wichtige Daten im Docker Volume n8n_data.

Prüfe deine Volumes:

docker volume ls

Für ein einfaches Backup kannst du zum Beispiel den n8n-Ordner sichern:

11
tar -czvf n8n-compose-backup.tar.gz ~/n8n-compose

Für ein vollständiges Backup solltest du zusätzlich die Docker Volumes sichern.


Häufige Fehler und Lösungen

Fehler: Port 80 oder 443 ist bereits belegt

Wenn du bereits Nginx Proxy Manager verwendest, sind Port 80 und 443 schon belegt.

Prüfen kannst du das mit:

sudo ss -tulpn | grep -E ':80|:443'

Wenn dort bereits ein Dienst läuft, solltest du keinen zweiten Reverse Proxy wie Traefik oder Caddy direkt auf Port 80/443 starten.

Nutze dann besser den vorhandenen Nginx Proxy Manager.

Fehler: n8n ist nicht über die Domain erreichbar

Prüfe zuerst DNS:

dig n8n.deine-domain.de

Die Domain muss auf die IP deines VPS zeigen.

Dann prüfe, ob n8n läuft:

docker compose ps

Dann prüfe die Logs:

docker logs n8n -f

Fehler: SSL-Zertifikat schlägt fehl

Ein SSL-Zertifikat kann nur erstellt werden, wenn die Subdomain korrekt auf deinen Server zeigt.

Prüfe:

dig n8n.deine-domain.de

Wenn keine richtige IP angezeigt wird, musst du den DNS-Eintrag korrigieren und etwas warten. 12

Fehler: Nginx Proxy Manager erreicht n8n nicht

Wenn Nginx Proxy Manager in Docker läuft, kann 127.0.0.1 problematisch sein.

Nutze dann am besten ein gemeinsames Docker-Netzwerk.

Prüfe Netzwerke:

docker network ls

Verbinde n8n mit dem Netzwerk von Nginx Proxy Manager oder trage das externe Netzwerk direkt in der compose.yaml ein.


Sicherheitstipps

1. n8n nicht direkt öffentlich öffnen

Veröffentliche n8n nicht unnötig direkt über die Server-IP.

Besser:

ports:
• 
"127.0.0.1:5678:5678"

Dann ist n8n nur lokal auf dem Server erreichbar und wird kontrolliert über Nginx Proxy Manager veröffentlicht.

2. HTTPS immer aktivieren

Nutze immer HTTPS, besonders wenn du Logins, Webhooks oder sensible Automationen verwendest.

3. Starkes Passwort verwenden

Beim ersten Login solltest du ein starkes Passwort setzen.

4. Server regelmäßig aktualisieren

sudo apt update
sudo apt upgrade -y

5. n8n regelmäßig aktualisieren

cd ~/n8n-compose docker compose pull docker compose up -d

6. Backups einrichten

13

Vor Updates solltest du ein Backup erstellen. Besonders wichtig sind:

  • n8n Docker Volume
  • compose.yaml
  • .env
  • Reverse-Proxy-Konfiguration
  • eventuell externe Datenbanken

Beispiel für die fertige Projektstruktur

Nach der Installation sieht dein n8n-Ordner ungefähr so aus:

/root/n8n-compose/ ├── .env ├── compose.yaml └── local-files/

Die .env enthält deine Domain-Einstellungen.

Die compose.yaml enthält die Docker-Konfiguration.

Der Ordner local-files kann für Dateien genutzt werden, die n8n lesen oder schreiben soll.


Fazit

n8n lässt sich sehr gut auf einem eigenen VPS mit Docker Compose installieren. Die Installation bleibt übersichtlich, die Daten werden dauerhaft gespeichert und Updates sind später mit wenigen Befehlen möglich.

Besonders praktisch ist die Kombination aus:

n8n + Docker Compose + Nginx Proxy Manager + Let’s Encrypt SSL

Damit läuft n8n sauber isoliert in Docker und ist trotzdem bequem über eine eigene HTTPS Subdomain erreichbar.

Wenn du mehrere Dienste auf deinem VPS betreibst, ist Docker Compose eine sehr gute Grundlage, um alles strukturiert zu verwalten.


Quellen

14