257 lines
7.2 KiB
Markdown
257 lines
7.2 KiB
Markdown
|
|
# 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`
|