Dokumentaion in READ.me
This commit is contained in:
303
README.md
303
README.md
@@ -1,12 +1,297 @@
|
||||
# customer-installer
|
||||
# Customer LXC Installer – Proxmox + n8n + PostgreSQL (pgvector)
|
||||
|
||||
Installationsskripte für Kunden-Deployments (Docker / LXC).
|
||||
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.
|
||||
|
||||
## Usage
|
||||
1. `.env.example` nach `.env` kopieren
|
||||
2. Variablen setzen
|
||||
3. Installer ausführen
|
||||
---
|
||||
|
||||
## Notes
|
||||
- Secrets gehören ausschließlich in `.env`
|
||||
- Repo ist für private Nutzung gedacht
|
||||
## 🧱 Ziel des Projekts
|
||||
|
||||
- **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)**
|
||||
|
||||
---
|
||||
|
||||
## 🏗 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
|
||||
|
||||
### 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`
|
||||
|
||||
### 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
|
||||
|
||||
---
|
||||
|
||||
## 🚀 Installation (aktueller Stand)
|
||||
|
||||
```bash
|
||||
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
|
||||
|
||||
Proxmox Umgebung prüfen
|
||||
|
||||
Debian 12 Template sicherstellen
|
||||
|
||||
Schritt 5: LXC erstellen
|
||||
|
||||
CTID = Unixzeit − 1.000.000.000
|
||||
|
||||
Hostname:
|
||||
|
||||
sb-<unixzeit>
|
||||
|
||||
|
||||
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
|
||||
|
||||
Reference in New Issue
Block a user