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:
3Docker 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.
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 -fOder mit Docker Compose:
docker compose logs -fMit 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 StandardBeispiel:
Typ: A Name: n8n Wert: 123.123.123.123 TTL: 300Wenn deine Domain
7example.comist, zeigt danach diese Adresse auf deinen Server:n8n.example.comDie 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.deFalls
dignicht installiert ist:sudo apt install -y dnsutilsDann erneut prüfen:
dig n8n.deine-domain.deDie 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:
- Gehe zu Hosts
- Klicke auf Proxy Hosts
- Klicke auf Add Proxy Host
Trage ein:
Domain Names: n8n.deine-domain.de Scheme: http Forward Hostname / IP: 127.0.0.1 Forward Port: 5678Aktiviere außerdem:
Websockets Support Block Common ExploitsDanach speichern.
8
Wichtiger Hinweis bei Docker-Netzwerken
Wenn Nginx Proxy Manager ebenfalls in Docker läuft, kann es sein, dass
127.0.0.1nicht funktioniert, weil127.0.0.1dann 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 lsWenn dein Nginx Proxy Manager zum Beispiel im Netzwerk
nginx-proxy_defaultläuft, kannst du n8n mit diesem Netzwerk verbinden.Öffne deine
compose.yaml:nano compose.yamlErsetze 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: trueDanach n8n neu starten:
docker compose down docker compose up -dDann kannst du in Nginx Proxy Manager als Forward Hostname verwenden:
n8nUnd als Port:
5678
Schritt 16: SSL-Zertifikat aktivieren
9Im Nginx Proxy Manager öffnest du den Proxy Host für n8n.
Gehe zum Tab SSL.
Wähle:
Request a new SSL CertificateAktiviere:
Force SSL HTTP/2 SupportTrage 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.deBeim 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-composen8n starten
docker compose up -dn8n stoppen
10docker compose stopn8n neu starten
docker compose restartStatus anzeigen
docker compose psLogs anzeigen
docker logs n8n -fOder:
docker compose logs -fn8n aktualisieren
cd ~/n8n-compose docker compose pull docker compose up -dDamit wird das neue n8n-Image geladen und der Container neu gestartet.
n8n stoppen und Container entfernen
docker compose downDie 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 -vDer Parameter
-ventfernt 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 lsFür ein einfaches Backup kannst du zum Beispiel den n8n-Ordner sichern:
11tar -czvf n8n-compose-backup.tar.gz ~/n8n-composeFü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.deDie Domain muss auf die IP deines VPS zeigen.
Dann prüfe, ob n8n läuft:
docker compose psDann prüfe die Logs:
docker logs n8n -fFehler: 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.deWenn 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.1problematisch sein.Nutze dann am besten ein gemeinsames Docker-Netzwerk.
Prüfe Netzwerke:
docker network lsVerbinde n8n mit dem Netzwerk von Nginx Proxy Manager oder trage das externe Netzwerk direkt in der
compose.yamlein.
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 -y5. n8n regelmäßig aktualisieren
cd ~/n8n-compose docker compose pull docker compose up -d6. Backups einrichten
13Vor 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.
