# Customer Installer – Proxmox LXC n8n Stack ## Überblick Dieses Projekt automatisiert die Bereitstellung **DSGVO‑konformer Kunden‑LXCs** auf einem **Proxmox‑Cluster**. Pro Kunde wird **eine eigene LXC** erstellt, inklusive: - Debian 12 - Docker + Docker Compose Plugin - PostgreSQL + pgvector - n8n (mit automatisch importiertem RAG-Workflow) - PostgREST (Supabase-kompatible REST API) - Vorbereitung für Reverse Proxy (OPNsense / NGINX) - VLAN‑Anbindung - APT‑ & Docker‑Proxy (Apt‑Cacher NG) Ziel: **reproduzierbare, schnelle und saubere Kunden‑Setups**, vollständig skriptgesteuert. --- ## Architektur ``` Internet │ OPNsense (os-nginx, TLS, Wildcard-Zertifikat) │ VLAN 90 │ Proxmox LXC (Debian 12) ├── Docker │ ├── n8n │ ├── PostgreSQL (pgvector) │ └── PostgREST └── Kunden-Daten (isoliert) ``` --- ## Voraussetzungen ### Proxmox Host - Proxmox VE (Clusterfähig) - Zugriff auf: `pct`, `pvesm`, `pveam`, `pvesh` - Storage für LXCs (z. B. `local-zfs`) - Bridge (z. B. `vmbr0`) - VLAN‑fähiges Netzwerk ### Netzwerk / Infrastruktur - OPNsense Firewall (API auf Port 4444) - VLAN (Standard: **VLAN 90**) - Wildcard‑Zertifikat auf OPNsense - os‑nginx Plugin aktiv - Ollama: `http://192.168.45.3:11434` - Apt‑Cacher NG (optional): `http://192.168.45.2:3142` - Docker Registry Mirror: `http://192.168.45.2:5000` --- ## Projektstruktur ``` installer/ ├── install.sh # Haupt-Installer ├── libsupabase.sh # Gemeinsame Bibliothek (Proxmox, n8n API, Generatoren) ├── setup_nginx_proxy.sh # OPNsense NGINX-Proxy einrichten ├── delete_nginx_proxy.sh # OPNsense NGINX-Proxy löschen ├── RAGKI-BotPGVector.json # Standard n8n RAG-Workflow-Template ├── templates/ │ ├── docker-compose.yml # Referenz-Template │ ├── reload-workflow.sh # Wird in CT deployed; lädt Workflow bei Neustart neu │ └── n8n-workflow-reload.service # Systemd-Unit für Auto-Reload ├── sql/ │ ├── init_pgvector.sql # pgvector-Extension, documents-Tabelle, PostgREST-Rollen │ └── botkonzept_schema.sql ├── credentials/ # Generierte Zugangsdaten pro Kunde (.json) └── logs/ # Install-Logs pro Kunde (.log) ``` --- ## Installation ```bash # Minimal bash install.sh --storage local-zfs --bridge vmbr0 --ip dhcp --vlan 90 # Mit allen Optionen bash install.sh \ --storage local-zfs \ --bridge vmbr0 \ --ip dhcp \ --vlan 90 \ --base-domain userman.de \ --n8n-owner-email admin@userman.de \ --workflow-file RAGKI-BotPGVector.json \ --debug # OPNsense NGINX-Proxy einrichten bash setup_nginx_proxy.sh \ --ctid \ --hostname sb- \ --fqdn sb-.userman.de \ --backend-ip \ --backend-port 5678 \ [--certificate-uuid ] # Verfügbare Zertifikate auflisten bash setup_nginx_proxy.sh --list-certificates --debug # API-Verbindung testen bash setup_nginx_proxy.sh --test-connection --debug # NGINX-Proxy für eine Instanz löschen bash delete_nginx_proxy.sh --ctid [--dry-run] [--debug] ``` ### Ausgabe Im Normalbetrieb (`DEBUG=0`) gibt `install.sh` ein kompaktes JSON auf stdout aus und schreibt alle Logs in `logs/.log`. Mit `--debug` erscheinen Logs auf stderr und das JSON wird formatiert ausgegeben. --- ## Automatisierte Schritte 1. Preflight-Prüfung (Proxmox-Tools, Storage, Bridge) 2. Debian-12-Template herunterladen (falls nicht vorhanden) 3. CTID-Generierung: `unix_timestamp - 1.000.000.000` → Hostname: `sb-` 4. LXC erstellen + starten + IP ermitteln 5. Docker + Compose Plugin installieren, Locales setzen 6. Secrets generieren (Passwörter, JWT, Encryption Key) 7. `.env`, `docker-compose.yml` und SQL-Init-Skripte in CT schreiben 8. Stack starten (`postgres` + `postgrest` + `n8n`) 9. n8n Owner-Account anlegen 10. n8n-Credentials + RAG-Workflow importieren und aktivieren 11. Workflow-Auto-Reload via systemd einrichten 12. OPNsense NGINX Reverse Proxy konfigurieren (falls `setup_nginx_proxy.sh` vorhanden) 13. JSON-Ausgabe + Zugangsdaten in `credentials/.json` speichern --- ## Status ✅ produktiv einsetzbar ✅ RAG-Workflow (Chat + PDF-Upload) automatisch deployed ✅ Workflow-Auto-Reload bei LXC-Neustart ✅ OPNsense NGINX Reverse Proxy vollständig automatisiert --- ## Lizenz / Hinweis Internes Projekt – kein Public Release.