diff --git a/NGINX_PROXY_SETUP.md b/NGINX_PROXY_SETUP.md new file mode 100644 index 0000000..a5e174f --- /dev/null +++ b/NGINX_PROXY_SETUP.md @@ -0,0 +1,199 @@ +# OPNsense NGINX Reverse Proxy Setup + +Dieses Script automatisiert die Konfiguration eines NGINX Reverse Proxys auf OPNsense für n8n-Instanzen. + +## Voraussetzungen + +- OPNsense Firewall mit NGINX Plugin +- API-Zugang zu OPNsense (API Key + Secret) +- Wildcard-Zertifikat für die Domain (z.B. *.userman.de) + +## Installation + +Das Script befindet sich im Repository unter `setup_nginx_proxy.sh`. + +## Verwendung + +### Proxy einrichten + +```bash +# Minimale Konfiguration +bash setup_nginx_proxy.sh \ + --ctid 768736636 \ + --hostname sb-1768736636 \ + --fqdn sb-1768736636.userman.de \ + --backend-ip 192.168.45.135 + +# Mit Debug-Ausgabe +bash setup_nginx_proxy.sh --debug \ + --ctid 768736636 \ + --hostname sb-1768736636 \ + --fqdn sb-1768736636.userman.de \ + --backend-ip 192.168.45.135 + +# Mit benutzerdefiniertem Backend-Port +bash setup_nginx_proxy.sh \ + --ctid 768736636 \ + --hostname sb-1768736636 \ + --fqdn sb-1768736636.userman.de \ + --backend-ip 192.168.45.135 \ + --backend-port 8080 +``` + +### Proxy löschen + +```bash +# Proxy für eine CTID löschen +bash delete_nginx_proxy.sh --ctid 768736636 + +# Mit Debug-Ausgabe +bash delete_nginx_proxy.sh --debug --ctid 768736636 +``` + +### Hilfsfunktionen + +```bash +# API-Verbindung testen +bash setup_nginx_proxy.sh --test-connection --debug + +# Verfügbare Zertifikate auflisten +bash setup_nginx_proxy.sh --list-certificates --debug +``` + +## Parameter + +### Erforderliche Parameter (für Proxy-Setup) + +| Parameter | Beschreibung | Beispiel | +|-----------|--------------|----------| +| `--ctid ` | Container ID (wird als Beschreibung verwendet) | `768736636` | +| `--hostname ` | Hostname des Containers | `sb-1768736636` | +| `--fqdn ` | Vollständiger Domainname | `sb-1768736636.userman.de` | +| `--backend-ip ` | IP-Adresse des Backends | `192.168.45.135` | + +### Optionale Parameter + +| Parameter | Beschreibung | Standard | +|-----------|--------------|----------| +| `--backend-port ` | Backend-Port | `5678` | +| `--opnsense-host ` | OPNsense IP oder Hostname | `192.168.45.1` | +| `--opnsense-port ` | OPNsense WebUI/API Port | `4444` | +| `--certificate-uuid ` | UUID des SSL-Zertifikats | Auto-Detect | +| `--debug` | Debug-Modus aktivieren | Aus | +| `--help` | Hilfe anzeigen | - | + +### Spezielle Befehle + +| Parameter | Beschreibung | +|-----------|--------------| +| `--test-connection` | API-Verbindung testen und beenden | +| `--list-certificates` | Verfügbare Zertifikate auflisten und beenden | + +## Ausgabe + +### Normalmodus (ohne --debug) + +Das Script gibt nur JSON auf stdout aus: + +```json +{ + "success": true, + "ctid": "768736636", + "fqdn": "sb-1768736636.userman.de", + "backend": "192.168.45.135:5678", + "nginx": { + "upstream_server_uuid": "81f5f15b-978c-4839-b794-5ddb9f1c964e", + "upstream_uuid": "5fe99a9f-35fb-4141-9b89-238333604a0d", + "location_uuid": "5c3cc080-385a-4800-964d-ab01f33d45a8", + "http_server_uuid": "946489aa-7212-41b3-93e2-4972f6a26d4e" + } +} +``` + +Bei Fehlern: +```json +{"error": "Fehlerbeschreibung"} +``` + +### Debug-Modus (mit --debug) + +Zusätzlich werden Logs auf stderr ausgegeben: + +``` +[2026-01-18 17:57:04] INFO: Script Version: 1.0.8 +[2026-01-18 17:57:04] INFO: Configuration: +[2026-01-18 17:57:04] INFO: CTID: 768736636 +[2026-01-18 17:57:04] INFO: Hostname: sb-1768736636 +... +``` + +## Erstellte NGINX-Komponenten + +Das Script erstellt folgende Komponenten in OPNsense: + +1. **Upstream Server** - Backend-Server mit IP und Port +2. **Upstream** - Load-Balancer-Gruppe (verweist auf Upstream Server) +3. **Location** - URL-Pfad-Konfiguration mit WebSocket-Support +4. **HTTP Server** - Virtueller Host mit HTTPS und Zertifikat + +### Verknüpfungskette + +``` +HTTP Server (sb-1768736636.userman.de:443) + └── Location (/) + └── Upstream (768736636) + └── Upstream Server (192.168.45.135:5678) +``` + +## Umgebungsvariablen + +Das Script kann auch über Umgebungsvariablen konfiguriert werden: + +```bash +export OPNSENSE_HOST="192.168.45.1" +export OPNSENSE_PORT="4444" +export OPNSENSE_API_KEY="your-api-key" +export OPNSENSE_API_SECRET="your-api-secret" +export CERTIFICATE_UUID="your-cert-uuid" +export DEBUG="1" + +bash setup_nginx_proxy.sh --ctid 768736636 ... +``` + +## Fehlerbehebung + +### API-Verbindungsfehler + +```bash +# Verbindung testen +bash setup_nginx_proxy.sh --test-connection --debug +``` + +### Zertifikat nicht gefunden + +```bash +# Verfügbare Zertifikate auflisten +bash setup_nginx_proxy.sh --list-certificates --debug + +# Zertifikat manuell angeben +bash setup_nginx_proxy.sh --certificate-uuid "695a8b67b35ae" ... +``` + +### Berechtigungsfehler (403) + +Der API-Benutzer benötigt folgende Berechtigungen in OPNsense: +- `NGINX: Settings` +- `NGINX: Service` +- `System: Trust: Certificates` (optional, für Auto-Detect) + +## Versionsverlauf + +| Version | Änderungen | +|---------|------------| +| 1.0.8 | HTTP Server Suche nach servername statt description | +| 1.0.7 | Listen-Adressen auf Port 80/443 gesetzt | +| 1.0.6 | Listen-Adressen hinzugefügt | +| 1.0.5 | verify_client und access_log_format hinzugefügt | +| 1.0.4 | Korrektes API-Format (httpserver statt http_server) | +| 1.0.3 | Vereinfachte HTTP Server Konfiguration | +| 1.0.0 | Initiale Version | diff --git a/TODO.md b/TODO.md new file mode 100644 index 0000000..94e0559 --- /dev/null +++ b/TODO.md @@ -0,0 +1,152 @@ +# n8n Customer Provisioning System + +## Status: ✅ Phase 1 Complete, Phase 2 In Progress + +--- + +# Phase 1: Debug-Option Implementation + +## Status: ✅ Completed (v2 - mit Log-Datei) + +### Schritte: + +- [x] **libsupabase.sh anpassen** + - [x] `DEBUG="${DEBUG:-0}"` Variable hinzufügen + - [x] `info()` nur bei DEBUG=1 ausgeben + - [x] `warn()` nur bei DEBUG=1 ausgeben + - [x] `die()` anpassen: JSON-Fehler auf fd 3 bei DEBUG=0 + - [x] `setup_traps()` anpassen für JSON-Fehlerausgabe auf fd 3 + +- [x] **install.sh anpassen** + - [x] `DEBUG=0` als Default setzen + - [x] `--debug` Option im Argument-Parsing hinzufügen + - [x] `echo off` Zeile entfernen + - [x] Usage-Text aktualisieren + - [x] Log-Verzeichnis erstellen (`logs/`) + - [x] Alle Ausgaben in Log-Datei umleiten + - [x] Log-Datei nach Container-Hostname benennen + - [x] JSON-Ausgabe enthält Pfad zur Log-Datei + +### Erwartetes Verhalten: + +**Ohne `--debug` (Normal-Modus):** +- Alle Ausgaben (apt, docker, etc.) → Log-Datei `logs/.log` +- Nur JSON auf stdout +- Bei Fehlern: JSON mit `{"error": "..."}` + +**Mit `--debug`:** +- Alle Ausgaben auf stderr UND in Log-Datei +- JSON auf stdout (auch im Log) + +### Änderungen: + +**libsupabase.sh:** +- `DEBUG="${DEBUG:-0}"` Variable +- `info()` und `warn()` nur bei `DEBUG=1` +- `die()` und `setup_traps()` geben JSON auf fd 3 aus (falls verfügbar) + +**install.sh:** +- Log-Verzeichnis: `${SCRIPT_DIR}/logs/` +- Temporäre Log-Datei während Installation +- Umbenennung zu `.log` nach Hostname-Generierung +- fd 3 reserviert für JSON-Ausgabe +- JSON enthält `"log_file"` Pfad +- `--debug` Option für Konsolen-Ausgabe + +### JSON-Ausgabe enthält jetzt: +```json +{ + "ctid": ..., + "hostname": "sb-...", + ... + "log_file": "/path/to/logs/sb-....log" +} +``` + +--- + +# Phase 2: NGINX Reverse Proxy Setup + +## Status: 🔄 In Progress + +### Neues Script: `setup_nginx_proxy.sh` + +Konfiguriert automatisch einen NGINX Reverse Proxy auf OPNsense für neue n8n-Instanzen. + +### Verwendung: + +```bash +# Mit Daten aus dem Installer-Output: +bash setup_nginx_proxy.sh \ + --ctid 768736636 \ + --hostname sb-1768736636 \ + --fqdn sb-1768736636.userman.de \ + --backend-ip 192.168.45.135 \ + --backend-port 5678 + +# Mit Debug-Ausgabe: +bash setup_nginx_proxy.sh --debug \ + --ctid 768736636 \ + --hostname sb-1768736636 \ + --fqdn sb-1768736636.userman.de \ + --backend-ip 192.168.45.135 +``` + +### Was das Script macht: + +1. **Upstream Server** erstellen (Backend-Server mit IP:Port) +2. **Upstream** erstellen (Load-Balancer-Gruppe) +3. **Location** erstellen (URL-Pfad-Konfiguration mit WebSocket-Support) +4. **HTTP Server** erstellen (Virtual Host mit HTTPS + ACME/Let's Encrypt) +5. **NGINX neu laden** (Konfiguration anwenden) + +### API-Endpunkte (OPNsense NGINX Plugin): + +- `POST /api/nginx/settings/addUpstreamServer` +- `POST /api/nginx/settings/addUpstream` +- `POST /api/nginx/settings/addLocation` +- `POST /api/nginx/settings/addHttpServer` +- `POST /api/nginx/service/reconfigure` + +### JSON-Ausgabe: + +```json +{ + "success": true, + "ctid": "768736636", + "fqdn": "sb-1768736636.userman.de", + "backend": "192.168.45.135:5678", + "nginx": { + "upstream_server_uuid": "...", + "upstream_uuid": "...", + "location_uuid": "...", + "http_server_uuid": "..." + } +} +``` + +### Noch zu testen: + +- [ ] API-Verbindung zu OPNsense +- [ ] Upstream Server erstellen +- [ ] Upstream erstellen +- [ ] Location erstellen +- [ ] HTTP Server erstellen +- [ ] NGINX Konfiguration anwenden +- [ ] SSL-Zertifikat (Let's Encrypt/ACME) + +--- + +# Phase 3: Integration in n8n Workflow (Geplant) + +### Workflow-Erweiterung: + +1. `install.sh` → LXC + n8n erstellen +2. `setup_nginx_proxy.sh` → Reverse Proxy konfigurieren +3. E-Mail an Kunden mit Zugangsdaten + +### n8n Workflow Nodes: + +``` +[Webhook Trigger] → [SSH: install.sh] → [Parse JSON] → [SSH: setup_nginx_proxy.sh] → [Parse JSON] → [Send Email] +```