n8n Provisioning fuer neue Kundenserver
Diese Seite beschreibt die manuellen Schritte, die beim Einrichten eines neuen Kundenservers fuer n8n und SSO noetig sind. Mittelfristiges Ziel: Diese Schritte ins Provisioning-Skript des Prilog-Admin integrieren.
Architektur-Hintergrund: n8n SSO-Integration
Voraussetzungen
- Kundenserver mit Docker installiert
- Synapse + Web-Client laufen bereits
- Nginx mit SSL fuer die Hauptdomain (z.B.
kunde.prilog.team) - DNS-Eintrag fuer
n8n.kunde.prilog.teamzeigt auf den Server - SSH-Zugriff auf den Kundenserver
Schritt 1: SSL-Zertifikat fuer n8n-Subdomain
ssh root@kundenserver
certbot certonly --nginx -d n8n.kunde.prilog.team --non-interactive --agree-tos --email lase@posteo.comSchritt 2: Verzeichnisse anlegen
mkdir -p /opt/n8n /opt/n8n/custom-nodes /opt/n8n-sso-proxySchritt 3: Auth-Proxy Source kopieren
server.js und Dockerfile aus dem Prilog-Repo /home/lee/n8n-sso-proxy/ kopieren:
scp /home/lee/n8n-sso-proxy/{server.js,Dockerfile} root@kundenserver:/opt/n8n-sso-proxy/Schritt 4: docker-compose.yml fuer n8n + Auth-Proxy
Datei /opt/n8n/docker-compose.yml auf dem Kundenserver:
services:
n8n:
image: docker.n8n.io/n8nio/n8n:1.123.30
container_name: prilog-n8n
restart: unless-stopped
ports:
- '127.0.0.1:5678:5678'
environment:
- N8N_HOST=0.0.0.0
- N8N_PORT=5678
- N8N_PROTOCOL=https
- N8N_DIAGNOSTICS_ENABLED=false
- N8N_TEMPLATES_ENABLED=true
- N8N_HIDE_USAGE_PAGE=true
- WEBHOOK_URL=https://n8n.kunde.prilog.team/
- N8N_EDITOR_BASE_URL=https://n8n.kunde.prilog.team/
- GENERIC_TIMEZONE=Europe/Berlin
- PRILOG_API_URL=https://api.prilog.chat
- N8N_CUSTOM_EXTENSIONS=/home/node/.n8n/custom
# Future-proofing: aktiviere die kommenden Defaults
- N8N_RUNNERS_ENABLED=true
- N8N_GIT_NODE_DISABLE_BARE_REPOS=true
- N8N_BLOCK_ENV_ACCESS_IN_NODE=true
volumes:
- n8n_data:/home/node/.n8n
- /opt/n8n/custom-nodes:/home/node/.n8n/custom
networks:
- n8n-network
n8n-sso-proxy:
build: /opt/n8n-sso-proxy
container_name: prilog-n8n-sso-proxy
restart: unless-stopped
ports:
- '127.0.0.1:5679:5679'
environment:
- PORT=5679
- N8N_INTERNAL_URL=http://prilog-n8n:5678
- N8N_ADMIN_EMAIL=admin@prilog.team
- N8N_ADMIN_PASSWORD=PASSWORT_HIER_EINSETZEN
- PRILOG_API_URL=https://api.prilog.chat
networks:
- n8n-network
depends_on:
- n8n
networks:
n8n-network:
driver: bridge
volumes:
n8n_data:n8n-Admin Passwort
Das Passwort wird in Schritt 6 gesetzt. Erst dann kannst du es hier eintragen und Docker starten.
Schritt 5: Custom-Nodes installieren (Prilog-Node)
# Custom-Nodes-Verzeichnis vorbereiten
mkdir -p /opt/n8n/custom-nodes/n8n-nodes-prilog
scp -r /home/lee/n8n-nodes-prilog/{package.json,index.js,dist} \
root@kundenserver:/opt/n8n/custom-nodes/n8n-nodes-prilog/
# Wrapper package.json fuer n8n-Discovery
cat > /opt/n8n/custom-nodes/package.json << 'JSON'
{
"name": "n8n-custom-extensions",
"version": "1.0.0",
"private": true,
"dependencies": {
"n8n-nodes-prilog": "file:./n8n-nodes-prilog"
}
}
JSON
# Permissions fuer n8n-User (UID 1000)
chown -R 1000:1000 /opt/n8n/custom-nodesSchritt 6: n8n erststarten und Owner-Account anlegen
cd /opt/n8n && docker compose up -d n8n
sleep 10
docker exec prilog-n8n sh -c 'cd /home/node/.n8n/custom && npm install'Owner-Account via API erstellen:
# Sicheres Passwort generieren (mit Grossbuchstaben, Zahlen)
PASSWORD="PrilogN8n$(openssl rand -hex 8 | tr 'a-z' 'A-Z')"
echo "n8n Admin Passwort: $PASSWORD"
curl -X POST http://127.0.0.1:5678/rest/owner/setup \
-H 'Content-Type: application/json' \
-d "{
\"email\": \"admin@prilog.team\",
\"firstName\": \"Prilog\",
\"lastName\": \"Admin\",
\"password\": \"$PASSWORD\"
}"Passwort speichern
Notiere das Passwort sofort im Prilog-Admin unter dem entsprechenden ServerOrder. Es wird in Schritt 4 (docker-compose.yml) und im Backend benoetigt.
Schritt 7: API-Key generieren
- Im Browser
https://n8n.kunde.prilog.team/oeffnen - Mit den Credentials aus Schritt 6 einloggen
- Settings (oben rechts) → API
- Create an API key
- Key kopieren
API-Key in Prilog-Datenbank speichern:
# Auf api.prilog.chat ausfuehren:
ssh lee@91.99.30.243 "cd /var/www/backend-api && node -e \"
const { PrismaClient } = require('@prisma/client');
const p = new PrismaClient();
p.serverOrder.updateMany({
where: { matrixDomain: 'kunde.prilog.team' },
data: {
n8nBaseUrl: 'https://n8n.kunde.prilog.team',
n8nApiKey: 'PASTE_API_KEY_HERE',
},
}).then(r => console.log('Updated:', r.count));
\""Schritt 8: Auth-Proxy starten
Jetzt das Passwort in /opt/n8n/docker-compose.yml eintragen (Schritt 4) und den Proxy starten:
# Passwort einsetzen
sed -i "s/PASSWORT_HIER_EINSETZEN/$PASSWORD/" /opt/n8n/docker-compose.yml
cd /opt/n8n && docker compose up -d --build
sleep 5
curl http://127.0.0.1:5679/sso/health
# Erwartete Antwort: {"status":"ok"}Schritt 9: Nginx konfigurieren
/etc/nginx/sites-enabled/prilog um diesen Server-Block ergaenzen:
# n8n Workflow Engine
server {
listen 443 ssl http2;
server_name n8n.kunde.prilog.team;
ssl_certificate /etc/letsencrypt/live/n8n.kunde.prilog.team/fullchain.pem;
ssl_certificate_key /etc/letsencrypt/live/n8n.kunde.prilog.team/privkey.pem;
ssl_protocols TLSv1.2 TLSv1.3;
ssl_ciphers HIGH:!aNULL:!MD5;
# SSO Auth-Proxy fuer Portal-Integration
location /sso {
proxy_pass http://127.0.0.1:5679;
proxy_set_header X-Forwarded-For $remote_addr;
proxy_set_header X-Forwarded-Proto https;
proxy_set_header Host $host;
}
# n8n Editor + API
location / {
proxy_pass http://127.0.0.1:5678;
proxy_set_header X-Forwarded-For $remote_addr;
proxy_set_header X-Forwarded-Proto https;
proxy_set_header Host $host;
proxy_http_version 1.1;
proxy_set_header Upgrade $http_upgrade;
proxy_set_header Connection "upgrade";
proxy_read_timeout 300s;
proxy_hide_header X-Frame-Options;
proxy_hide_header Content-Security-Policy;
}
}nginx -t && systemctl reload nginxSchritt 10: Krisen-Workflow-Templates deployen
ssh lee@91.99.30.243 "cd /var/www/backend-api && node -e \"
const { PrismaClient } = require('@prisma/client');
const p = new PrismaClient();
p.serverOrder.findFirst({
where: { matrixDomain: 'kunde.prilog.team' },
select: { tenantId: true },
}).then(async (order) => {
const { deployTemplatesForTenant } = require('./dist/modules/crisis-management/n8n-template-deployer.js');
const result = await deployTemplatesForTenant(order.tenantId);
console.log('Deployed:', JSON.stringify(result));
await p.\\\$disconnect();
});
\""Schritt 11: Test
- Portal oeffnen (
portal.prilog.chat) - Anmelden als Customer-Admin der neuen Schule
- Zu Ablaeufe → n8n Workflows Tab navigieren
- Erwartung: n8n laedt direkt im iframe ohne Login-Formular
- Du siehst die 10 Krisen-Workflow-Templates in der linken Sidebar
Onboarding-Checkliste (Kurzfassung)
| # | Schritt | Status |
|---|---|---|
| 1 | SSL-Zertifikat fuer n8n.kunde.prilog.team | ☐ |
| 2 | Verzeichnisse anlegen | ☐ |
| 3 | Auth-Proxy Source kopieren | ☐ |
| 4 | docker-compose.yml mit Platzhalter erstellen | ☐ |
| 5 | Custom-Nodes (Prilog) installieren | ☐ |
| 6 | n8n starten + Owner-Account erstellen + Passwort notieren | ☐ |
| 7 | API-Key generieren + in DB speichern | ☐ |
| 8 | Passwort in docker-compose eintragen + Proxy starten | ☐ |
| 9 | Nginx-Konfiguration | ☐ |
| 10 | Workflow-Templates deployen | ☐ |
| 11 | Test: SSO im Portal funktioniert | ☐ |
Troubleshooting
"SSO-Token konnte nicht erstellt werden" im Portal
- Prilog-Backend pruefen: ist die Customer-Auth aktiv?
- Redis erreichbar von api.prilog.chat?
iframe zeigt n8n-Login-Formular trotz SSO
- Auth-Proxy laeuft?
curl https://n8n.kunde.prilog.team/sso/health - n8n-Admin Credentials in docker-compose korrekt?
- Logs pruefen:
docker logs prilog-n8n-sso-proxy
Token-Validierung schlaegt fehl (401)
- Backend-Endpoint erreichbar?
curl -X POST https://api.prilog.chat/api/customer/n8n/validate-sso-token -H "Content-Type: application/json" -d '{"token":"test"}' - Sollte 401 zurueckgeben (Token ungueltig) — wenn 404, ist die Route nicht registriert
Custom-Nodes (Prilog-Node) erscheinen nicht
docker exec prilog-n8n ls /home/node/.n8n/custom/node_modules/n8n-nodes-prilog/dist/nodes/Prilog/- Sollte
Prilog.node.jsundprilog.svgzeigen - n8n nach Aenderungen neu starten
n8n-Version aktuell halten
n8n veroeffentlicht regelmaessig neue Versionen mit Features und Sicherheits-Fixes. Wir pinnen bewusst auf eine spezifische Version im docker-compose statt latest zu verwenden — so bleibt das Verhalten reproduzierbar und Updates passieren kontrolliert.
Aktuell empfohlene Version
Die im Repo dokumentierte Version ist die zum Zeitpunkt der Doku letzte stabile. Pruefe vor jedem Update die n8n Release Notes auf Breaking Changes.
Aktuelle Empfehlung: 1.123.30 (April 2026)
Update-Prozess
ssh root@kundenserver
# 1. Versionsnummer in docker-compose.yml updaten
nano /opt/n8n/docker-compose.yml
# Aendere: image: docker.n8n.io/n8nio/n8n:NEUE_VERSION
# 2. Neue Version pullen und Container neu starten
cd /opt/n8n
docker compose pull n8n
docker compose up -d n8n
# 3. Migrations laufen automatisch — Logs pruefen
sleep 10
docker logs prilog-n8n 2>&1 | tail -30
# 4. Health-Check
curl http://127.0.0.1:5678/healthz
# Erwartete Antwort: {"status":"ok"}
# 5. Funktionstest: SSO-Login + Workflow ausfuehrenVor dem Update
- Backup:
docker compose exec n8n n8n export:workflow --all --output=/tmp/backup.jsonund Datei sichern - Major-Versionen pruefen: n8n hat selten Breaking Changes, aber bei v2.x kommen welche
- Custom-Nodes testen: nach jedem Update den Prilog-Node und die SSO-Pipeline durchgehen
- n8n-Workflows neu speichern: in seltenen Faellen muessen Workflows nach Major-Updates manuell ueberprueft werden
Update-Frequenz
| Update-Typ | Empfohlen |
|---|---|
| Patch (1.123.30 → 1.123.31) | Bei Sicherheits-Fix sofort |
| Minor (1.123 → 1.124) | Quartalsweise |
| Major (1.x → 2.x) | Mit Vorlaufzeit + Tests |
Aktuelle Version nachschauen
# Auf dem Kundenserver
docker exec prilog-n8n n8n --version
# oder
curl -s https://hub.docker.com/v2/repositories/n8nio/n8n/tags/?page_size=1 | python3 -c "import json,sys; print(json.load(sys.stdin)['results'][0]['name'])"Rollback bei Problemen
# Auf alte Version zurueck
sed -i 's|n8nio/n8n:NEUE|n8nio/n8n:ALTE|' /opt/n8n/docker-compose.yml
docker compose up -d n8n
# Falls Datenbank-Migration nicht rueckwaerts kompatibel ist:
docker compose exec n8n n8n import:workflow --input=/tmp/backup.jsonWas bei der Migration auf n8n Enterprise wegfaellt
Sollte irgendwann auf die kostenpflichtige Version gewechselt werden:
- Auth-Proxy (Schritt 8) entfaellt — n8n Enterprise hat eingebautes SAML/OIDC SSO
- Shared Admin-Account entfaellt — jeder Portal-User bekommt seinen eigenen n8n-Account
- Backend SSO-Token-Endpoints entfallen — Authentication direkt zwischen Portal und n8n
- Bessere Audit-Logs — pro User in n8n nachvollziehbar
Bis dahin ist diese Loesung pragmatisch, sicher genug fuer den Anwendungsfall, und voll funktionsfaehig.