Dokumentaion vervollständigt in READ.me

This commit is contained in:
2026-01-12 08:41:47 +01:00
parent b32495859c
commit 588e0cdef5

352
README.md
View File

@@ -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 **DSGVOkonformer KundenLXCs** auf einem **ProxmoxCluster**.
Pro Kunde wird **eine eigene LXC** erstellt, inklusive:
- Debian 12
- Docker + Docker Compose Plugin
- PostgreSQL + pgvector
- n8n
- Vorbereitung für Reverse Proxy (OPNsense / NGINX)
- VLANAnbindung
- APT & DockerProxy (AptCacher NG)
Ziel: **reproduzierbare, schnelle und saubere KundenSetups**, 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`)
- VLANfä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**)
- WildcardZertifikat auf OPNsense
- osnginx Plugin aktiv
- AptCacher 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 14: 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-<unixzeit>
## 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-<id>.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.