From 588e0cdef5c257e8b655f771f559556fc9446325 Mon Sep 17 00:00:00 2001 From: Wolfgang Date: Mon, 12 Jan 2026 08:41:47 +0100 Subject: [PATCH] =?UTF-8?q?Dokumentaion=20vervollst=C3=A4ndigt=20in=20READ?= =?UTF-8?q?.me?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- README.md | 352 +++++++++++++----------------------------------------- 1 file changed, 80 insertions(+), 272 deletions(-) diff --git a/README.md b/README.md index dda6b80..6c47ab7 100644 --- a/README.md +++ b/README.md @@ -1,297 +1,105 @@ -# Customer LXC Installer – Proxmox + n8n + PostgreSQL (pgvector) +# Customer Installer – Proxmox LXC n8n Stack -Automatisierter Installer zur Erstellung **kundengetrennter LXC-Container** auf **Proxmox VE**. -Jede LXC enthält einen **Docker-Stack mit n8n + PostgreSQL (pgvector)** und ist für den späteren Betrieb hinter einer **OPNsense (NGINX Reverse Proxy)** vorbereitet. +## Ü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 +- 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. --- -## 🧱 Ziel des Projekts +## Architektur -- **Pro Kunde eine eigene LXC** -- **Kein Shared State** zwischen Kunden -- **DSGVO-konform** (LXC löschen = Daten weg) -- **Automatisierbar & reproduzierbar** -- **Skalierbar im Proxmox-Cluster** -- **Vorbereitung für externe Automatisierung (n8n, API, OPNsense)** +``` +Internet + │ +OPNsense (os-nginx, TLS, Wildcard-Zertifikat) + │ +VLAN 90 + │ +Proxmox LXC (Debian 12) + ├── Docker + │ ├── n8n + │ └── PostgreSQL (pgvector) + └── Kunden-Daten (isoliert) +``` --- -## 🏗 Architektur (Ist-Zustand) - -Proxmox VE Cluster -│ -├── LXC (Customer) -│ ├── Debian 12 -│ ├── Docker -│ ├── docker-compose -│ │ ├── n8n -│ │ └── PostgreSQL 16 + pgvector -│ ├── VLAN (z. B. VLAN 90) -│ ├── internes HTTP (Port 5678) -│ └── vorbereitet für Reverse Proxy (HTTPS extern) -│ -└── OPNsense -├── os-nginx (Port 443) -├── Wildcard-Zertifikat -└── Reverse Proxy (manuell / später API-gesteuert) - - ---- - -## ⚙ Voraussetzungen +## Voraussetzungen ### Proxmox Host -- Proxmox VE 8.x / 9.x -- `pct`, `pveam`, `pvesm`, `pvesh` -- Storage: - - `local` (Templates) - - `local-zfs` (RootFS) -- Netzwerk: - - Bridge z. B. `vmbr0` - - VLAN z. B. `90` +- Proxmox VE (Clusterfähig) +- Zugriff auf: + - `pct` + - `pvesm` + - `pveam` +- Storage für LXCs (z. B. `local-zfs`) +- Bridge (z. B. `vmbr0`) +- VLAN‑fähiges Netzwerk -### Infrastruktur -- **APT-Cacher NG** - - z. B. `http://192.168.45.2:3142` -- **Docker Registry Mirror** - - z. B. `http://192.168.45.2:5000` -- **OPNsense** - - GUI auf Port `4444` - - os-nginx auf Port `443` - - Wildcard-Zertifikat vorhanden +### Netzwerk / Infrastruktur +- OPNsense Firewall +- VLAN (Standard: **VLAN 90**) +- Wildcard‑Zertifikat auf OPNsense +- os‑nginx Plugin aktiv +- Apt‑Cacher NG: + - HTTP: `http://192.168.45.2:3142` +- Docker Registry Mirror: + - `http://192.168.45.2:5000` --- -## 🚀 Installation (aktueller Stand) +## Projektstruktur + +``` +customer-installer/ +├── install.sh +├── libsupabase.sh +├── setupowner.sh +├── templates/ +│ └── docker-compose.yml +└── README.md +``` + +--- + +## Installation ```bash -bash install.sh \ - --storage local-zfs \ - --bridge vmbr0 \ - --ip dhcp \ - --vlan 90 +bash install.sh --storage local-zfs --bridge vmbr0 --ip dhcp --vlan 90 +``` -Unterstützte Optionen -Option Beschreibung ---ctid Optional. Wenn nicht gesetzt: CTID = date +%s - 1000000000 ---cores CPU-Kerne (Default: 2) ---memory RAM in MB (Default: 4096) ---swap Swap in MB (Default: 512) ---disk Disk in GB (Default: 50) ---bridge Proxmox Bridge (Default: vmbr0) ---vlan VLAN-ID (Default: 90) ---ip dhcp oder CIDR ---storage RootFS Storage (Default: local-zfs) -🧩 Was der Installer macht -Schritt 1–4: Preflight +--- -Argumente validieren +## Automatisierte Schritte -Proxmox Umgebung prüfen +1. Template-Download (Debian 12) +2. CTID-Generierung (Unix-Zeit - 1.000.000.000) +3. LXC-Erstellung + VLAN +4. Docker + Compose Installation +5. APT & Docker Proxy Konfiguration +6. n8n + PostgreSQL Stack +7. Ausgabe aller Zugangsdaten als JSON -Debian 12 Template sicherstellen +--- -Schritt 5: LXC erstellen +## Status -CTID = Unixzeit − 1.000.000.000 +✅ produktiv einsetzbar +🟡 Reverse Proxy Automatisierung ausgelagert +🟡 Workflow & Credential Import separat -Hostname: +--- -sb- +## Lizenz / Hinweis - -Netzwerk: - -Bridge - -VLAN - -DHCP - -Unprivileged Container - -LXC wird gestartet - -IP wird automatisch ermittelt - -Schritt 6: Provisionierung - -Im Container: - -Locale setzen (de_DE.UTF-8) - -APT-Proxy konfigurieren: - -Acquire::http::Proxy "http://192.168.45.2:3142"; - - -Docker installieren - -Docker Registry Mirror konfigurieren: - -{ - "registry-mirrors": ["http://192.168.45.2:5000"] -} - - -Docker-Dienst neu starten - -Schritt 7: Customer Stack - -docker-compose.yml generieren - -.env erzeugen mit: - -PostgreSQL Credentials - -n8n Settings - -Telemetrie deaktiviert - -Volumes anlegen - -Fix für n8n Permission Bug: - -chown -R 1000:1000 /opt/customer-stack/volumes/n8n-data - - -Stack starten - -Healthchecks abwarten - -🐘 PostgreSQL (pgvector) - -Image: pgvector/pgvector:pg16 - -Extensions: - -vector - -uuid-ossp - -Nur intern erreichbar (Docker-Netz) - -🔁 n8n - -Image: n8nio/n8n:latest - -Port intern: 5678 - -Extern geplant via: - -https://sb-.userman.de - - -Telemetrie deaktiviert: - -N8N_DIAGNOSTICS_ENABLED=false -N8N_VERSION_NOTIFICATIONS_ENABLED=false -N8N_TEMPLATES_ENABLED=false - -👤 Owner Account - -Owner wird automatisiert per API angelegt (Workaround, da ENV-Variablen nicht zuverlässig greifen). - -Erstellung erfolgt über separates Script (setupowner.sh) gegen: - -POST /rest/owner/setup - - -Ergebnis: - -Owner existiert - -Initial-Setup-Screen verschwindet - -Login möglich - -📤 Installer-Ausgabe (JSON) - -Am Ende gibt der Installer maschinenlesbares JSON aus, z. B.: - -{ - "ctid": 768138201, - "hostname": "sb-1768138201", - "fqdn": "sb-1768138201.userman.de", - "ip": "192.168.45.53", - "n8n_internal": "http://192.168.45.53:5678", - "n8n_external": "https://sb-1768138201.userman.de", - "postgres": { - "db": "customer", - "user": "customer", - "password": "********" - }, - "n8n_encryption_key": "********" -} - - -➡ Kann direkt von n8n / API / Skripten weiterverarbeitet werden. - -🚧 Bewusst ausgelagert / Nächste Schritte - -Nicht im Installer (absichtlich): - -Reverse Proxy via OPNsense API - -DNS-Automation - -Workflow-Import - -Credential-Anlage (DB, Ollama) - -Webhook-Freigaben - -➡ Diese Schritte werden separat umgesetzt: - -als eigenes Skript - -oder über n8n selbst (empfohlen) - -🧠 Design-Entscheidungen (klar & ehrlich) - -Clusterweite CTID-Abfrage verworfen - -Zu fehleranfällig - -Zeitbasierte IDs sind deterministisch & konfliktfrei - -Reverse Proxy nicht im Installer - -Installer bleibt lokal & sicher - -Alles idempotent - -Mehrfaches Starten kein Problem - -Kein ACME - -Wildcard-Zertifikat liegt auf OPNsense - -✅ Status - -✔ Installer stabil - -✔ Mehrfach parallel ausführbar - -✔ Proxy & Caching aktiv - -✔ n8n + PostgreSQL laufen stabil - -✔ Bereit für Automatisierung - -📌 Nächste geplante Schritte - -Separates OPNsense-API-Skript - -n8n: - -DB Credential anlegen - -Ollama Credential anlegen - -Workflow importieren & aktivieren - -Vollständige End-to-End-Automation - -Stand: Januar 2026 -Autor: Wolfgang Metz - MediaMetz Networks / Projekt BotKonzept +Internes Projekt – kein Public Release.