Skip to content

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.team zeigt auf den Server
  • SSH-Zugriff auf den Kundenserver

Schritt 1: SSL-Zertifikat fuer n8n-Subdomain

bash
ssh root@kundenserver
certbot certonly --nginx -d n8n.kunde.prilog.team --non-interactive --agree-tos --email lase@posteo.com

Schritt 2: Verzeichnisse anlegen

bash
mkdir -p /opt/n8n /opt/n8n/custom-nodes /opt/n8n-sso-proxy

Schritt 3: Auth-Proxy Source kopieren

server.js und Dockerfile aus dem Prilog-Repo /home/lee/n8n-sso-proxy/ kopieren:

bash
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:

yaml
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)

bash
# 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-nodes

Schritt 6: n8n erststarten und Owner-Account anlegen

bash
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:

bash
# 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

  1. Im Browser https://n8n.kunde.prilog.team/ oeffnen
  2. Mit den Credentials aus Schritt 6 einloggen
  3. Settings (oben rechts) → API
  4. Create an API key
  5. Key kopieren

API-Key in Prilog-Datenbank speichern:

bash
# 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:

bash
# 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:

nginx
# 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;
    }
}
bash
nginx -t && systemctl reload nginx

Schritt 10: Krisen-Workflow-Templates deployen

bash
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

  1. Portal oeffnen (portal.prilog.chat)
  2. Anmelden als Customer-Admin der neuen Schule
  3. Zu Ablaeufe → n8n Workflows Tab navigieren
  4. Erwartung: n8n laedt direkt im iframe ohne Login-Formular
  5. Du siehst die 10 Krisen-Workflow-Templates in der linken Sidebar

Onboarding-Checkliste (Kurzfassung)

#SchrittStatus
1SSL-Zertifikat fuer n8n.kunde.prilog.team
2Verzeichnisse anlegen
3Auth-Proxy Source kopieren
4docker-compose.yml mit Platzhalter erstellen
5Custom-Nodes (Prilog) installieren
6n8n starten + Owner-Account erstellen + Passwort notieren
7API-Key generieren + in DB speichern
8Passwort in docker-compose eintragen + Proxy starten
9Nginx-Konfiguration
10Workflow-Templates deployen
11Test: 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.js und prilog.svg zeigen
  • 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

bash
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 ausfuehren

Vor dem Update

  • Backup: docker compose exec n8n n8n export:workflow --all --output=/tmp/backup.json und 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-TypEmpfohlen
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

bash
# 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

bash
# 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.json

Was 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.