Proxy Setup md
This commit is contained in:
199
NGINX_PROXY_SETUP.md
Normal file
199
NGINX_PROXY_SETUP.md
Normal file
@@ -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 <id>` | Container ID (wird als Beschreibung verwendet) | `768736636` |
|
||||
| `--hostname <name>` | Hostname des Containers | `sb-1768736636` |
|
||||
| `--fqdn <domain>` | Vollständiger Domainname | `sb-1768736636.userman.de` |
|
||||
| `--backend-ip <ip>` | IP-Adresse des Backends | `192.168.45.135` |
|
||||
|
||||
### Optionale Parameter
|
||||
|
||||
| Parameter | Beschreibung | Standard |
|
||||
|-----------|--------------|----------|
|
||||
| `--backend-port <port>` | Backend-Port | `5678` |
|
||||
| `--opnsense-host <ip>` | OPNsense IP oder Hostname | `192.168.45.1` |
|
||||
| `--opnsense-port <port>` | OPNsense WebUI/API Port | `4444` |
|
||||
| `--certificate-uuid <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 |
|
||||
152
TODO.md
Normal file
152
TODO.md
Normal file
@@ -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/<hostname>.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 `<hostname>.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]
|
||||
```
|
||||
Reference in New Issue
Block a user