Files
customer-installer/WORKFLOW_RELOAD_README.md

257 lines
7.2 KiB
Markdown
Raw Permalink Normal View History

# n8n Workflow Auto-Reload bei LXC-Neustart
## Übersicht
Diese Funktion sorgt dafür, dass der n8n-Workflow bei jedem Neustart des LXC-Containers automatisch neu geladen wird. Dies ist nützlich, um sicherzustellen, dass der Workflow immer im gewünschten Zustand ist, auch nach Updates oder Änderungen am Container.
## Funktionsweise
### Komponenten
1. **Systemd-Service** (`/etc/systemd/system/n8n-workflow-reload.service`)
- Wird beim LXC-Start automatisch ausgeführt
- Wartet auf Docker und n8n-Container
- Führt das Reload-Script aus
2. **Reload-Script** (`/opt/customer-stack/reload-workflow.sh`)
- Liest Konfiguration aus `.env`
- Wartet bis n8n API bereit ist
- Sucht nach bestehendem Workflow
- Löscht alten Workflow (falls vorhanden)
- Importiert Workflow aus Template
- Aktiviert den Workflow
- Loggt alle Aktionen
3. **Workflow-Template** (`/opt/customer-stack/workflow-template.json`)
- Persistente Kopie des Workflows
- Wird bei Installation erstellt
- Wird bei jedem Neustart verwendet
### Ablauf beim LXC-Neustart
```
LXC startet
Docker startet
n8n-Container startet
Systemd-Service startet (nach 10s Verzögerung)
Reload-Script wird ausgeführt
1. Lade Konfiguration aus .env
2. Warte auf n8n API (max. 60s)
3. Login bei n8n
4. Suche nach bestehendem Workflow "RAG KI-Bot (PGVector)"
5. Lösche alten Workflow (falls vorhanden)
6. Suche nach Credentials (PostgreSQL, Ollama)
7. Verarbeite Workflow-Template (ersetze Credential-IDs)
8. Importiere neuen Workflow
9. Aktiviere Workflow
Workflow ist bereit
```
## Installation
Die Auto-Reload-Funktion wird automatisch bei der Installation konfiguriert:
```bash
bash install.sh --debug
```
### Was wird installiert?
1. **Workflow-Template**: `/opt/customer-stack/workflow-template.json`
2. **Reload-Script**: `/opt/customer-stack/reload-workflow.sh`
3. **Systemd-Service**: `/etc/systemd/system/n8n-workflow-reload.service`
4. **Log-Verzeichnis**: `/opt/customer-stack/logs/`
## Logging
Alle Reload-Vorgänge werden geloggt:
- **Log-Datei**: `/opt/customer-stack/logs/workflow-reload.log`
- **Systemd-Journal**: `journalctl -u n8n-workflow-reload.service`
### Log-Beispiel
```
[2024-01-15 10:30:00] =========================================
[2024-01-15 10:30:00] n8n Workflow Auto-Reload gestartet
[2024-01-15 10:30:00] =========================================
[2024-01-15 10:30:00] Konfiguration geladen aus /opt/customer-stack/.env
[2024-01-15 10:30:00] Warte auf n8n API...
[2024-01-15 10:30:05] n8n API ist bereit
[2024-01-15 10:30:05] Login bei n8n als admin@userman.de...
[2024-01-15 10:30:06] Login erfolgreich
[2024-01-15 10:30:06] Suche nach Workflow 'RAG KI-Bot (PGVector)'...
[2024-01-15 10:30:06] Workflow gefunden: ID=abc123
[2024-01-15 10:30:06] Bestehender Workflow gefunden, wird gelöscht...
[2024-01-15 10:30:07] Workflow abc123 gelöscht
[2024-01-15 10:30:07] Suche nach bestehenden Credentials...
[2024-01-15 10:30:07] Suche nach Credential 'PostgreSQL (local)' (Typ: postgres)...
[2024-01-15 10:30:08] Credential gefunden: ID=def456
[2024-01-15 10:30:08] Suche nach Credential 'Ollama (local)' (Typ: ollamaApi)...
[2024-01-15 10:30:09] Credential gefunden: ID=ghi789
[2024-01-15 10:30:09] Verarbeite Workflow-Template...
[2024-01-15 10:30:10] Workflow-Template erfolgreich verarbeitet
[2024-01-15 10:30:10] Importiere Workflow aus /tmp/workflow_processed.json...
[2024-01-15 10:30:11] Workflow importiert: ID=jkl012, Version=v1
[2024-01-15 10:30:11] Aktiviere Workflow jkl012...
[2024-01-15 10:30:12] Workflow jkl012 erfolgreich aktiviert
[2024-01-15 10:30:12] =========================================
[2024-01-15 10:30:12] Workflow-Reload erfolgreich abgeschlossen
[2024-01-15 10:30:12] Workflow-ID: jkl012
[2024-01-15 10:30:12] =========================================
```
## Manuelles Testen
### Service-Status prüfen
```bash
# Im LXC-Container
systemctl status n8n-workflow-reload.service
```
### Manuelles Reload auslösen
```bash
# Im LXC-Container
/opt/customer-stack/reload-workflow.sh
```
### Logs anzeigen
```bash
# Log-Datei
cat /opt/customer-stack/logs/workflow-reload.log
# Systemd-Journal
journalctl -u n8n-workflow-reload.service -f
```
### Service neu starten
```bash
# Im LXC-Container
systemctl restart n8n-workflow-reload.service
```
## Fehlerbehandlung
### Häufige Probleme
1. **n8n API nicht erreichbar**
- Prüfen: `docker ps` - läuft n8n-Container?
- Prüfen: `curl http://127.0.0.1:5678/rest/settings`
- Lösung: Warten oder Docker-Container neu starten
2. **Login fehlgeschlagen**
- Prüfen: Sind die Credentials in `.env` korrekt?
- Prüfen: `cat /opt/customer-stack/.env`
- Lösung: Credentials korrigieren
3. **Credentials nicht gefunden**
- Prüfen: Existieren die Credentials in n8n?
- Lösung: Credentials manuell in n8n erstellen
4. **Workflow-Template nicht gefunden**
- Prüfen: `ls -la /opt/customer-stack/workflow-template.json`
- Lösung: Template aus Backup wiederherstellen
### Service deaktivieren
Falls Sie die Auto-Reload-Funktion deaktivieren möchten:
```bash
# Im LXC-Container
systemctl disable n8n-workflow-reload.service
systemctl stop n8n-workflow-reload.service
```
### Service wieder aktivieren
```bash
# Im LXC-Container
systemctl enable n8n-workflow-reload.service
systemctl start n8n-workflow-reload.service
```
## Technische Details
### Systemd-Service-Konfiguration
```ini
[Unit]
Description=n8n Workflow Auto-Reload Service
After=docker.service
Wants=docker.service
Requires=docker.service
[Service]
Type=oneshot
RemainAfterExit=yes
ExecStartPre=/bin/sleep 10
ExecStart=/bin/bash /opt/customer-stack/reload-workflow.sh
Restart=on-failure
RestartSec=30
[Install]
WantedBy=multi-user.target
```
### Workflow-Verarbeitung
Das Reload-Script verwendet Python, um das Workflow-Template zu verarbeiten:
1. Entfernt Felder: `id`, `versionId`, `meta`, `tags`, `active`, `pinData`
2. Ersetzt PostgreSQL Credential-IDs
3. Ersetzt Ollama Credential-IDs
4. Schreibt verarbeitetes JSON nach `/tmp/workflow_processed.json`
### API-Endpunkte
- **Login**: `POST /rest/login`
- **Workflows auflisten**: `GET /rest/workflows`
- **Workflow löschen**: `DELETE /rest/workflows/{id}`
- **Workflow importieren**: `POST /rest/workflows`
- **Workflow aktivieren**: `POST /rest/workflows/{id}/activate`
- **Credentials auflisten**: `GET /rest/credentials`
## Sicherheit
- Credentials werden aus `.env` gelesen (nicht im Script hardcoded)
- Session-Cookies werden nach Verwendung gelöscht
- Temporäre Dateien werden aufgeräumt
- Logs enthalten keine Passwörter
## Wartung
### Workflow-Template aktualisieren
Wenn Sie den Workflow ändern möchten:
1. Exportieren Sie den Workflow aus n8n UI
2. Kopieren Sie die JSON-Datei nach `/opt/customer-stack/workflow-template.json`
3. Beim nächsten Neustart wird der neue Workflow geladen
### Backup
Wichtige Dateien für Backup:
- `/opt/customer-stack/workflow-template.json`
- `/opt/customer-stack/.env`
- `/opt/customer-stack/logs/workflow-reload.log`
## Support
Bei Problemen:
1. Prüfen Sie die Logs: `/opt/customer-stack/logs/workflow-reload.log`
2. Prüfen Sie den Service-Status: `systemctl status n8n-workflow-reload.service`
3. Führen Sie das Script manuell aus: `/opt/customer-stack/reload-workflow.sh`
4. Prüfen Sie die n8n-Container-Logs: `docker logs n8n`