Files
customer-installer/wiki/Credentials-Management.md
Wolfgang 1a91f23044 docs: Add comprehensive Wiki documentation
- Add Wiki home page with navigation
- Add Installation guide with all parameters
- Add Credentials-Management documentation
- Add Testing guide with all test suites
- Add Architecture documentation with diagrams
- Add Troubleshooting guide with solutions
- Add FAQ with common questions

Wiki includes:
- Complete installation instructions
- Credentials management workflows
- Testing procedures (40+ tests)
- System architecture diagrams
- Troubleshooting for common issues
- FAQ covering all aspects
- Cross-referenced documentation
2026-01-24 22:48:04 +01:00

9.4 KiB

Credentials-Management

Das Customer Installer System bietet ein umfassendes Credentials-Management-System für die sichere Verwaltung von Zugangsdaten.

📋 Übersicht

Das Credentials-Management-System ermöglicht:

  • Automatisches Speichern von Credentials bei Installation
  • JSON-basierte Speicherung für einfache Verarbeitung
  • Update ohne Container-Neustart (z.B. Ollama-URL)
  • Sichere Speicherung mit .gitignore-Schutz
  • Einfache Wiederverwendung für Automatisierung

📁 Credential-Dateien

Speicherort

credentials/
├── .gitignore                    # Schützt Credentials vor Git
├── example-credentials.json      # Beispiel-Datei
└── sb-<timestamp>.json          # Tatsächliche Credentials

Dateiformat

{
  "ctid": 769276659,
  "hostname": "sb-1769276659",
  "fqdn": "sb-1769276659.userman.de",
  "ip": "192.168.45.45",
  "vlan": 90,
  "urls": {
    "n8n_internal": "http://192.168.45.45:5678/",
    "n8n_external": "https://sb-1769276659.userman.de",
    "postgrest": "http://192.168.45.45:3000",
    "chat_webhook": "https://sb-1769276659.userman.de/webhook/rag-chat-webhook/chat",
    "chat_internal": "http://192.168.45.45:5678/webhook/rag-chat-webhook/chat",
    "upload_form": "https://sb-1769276659.userman.de/form/rag-upload-form",
    "upload_form_internal": "http://192.168.45.45:5678/form/rag-upload-form"
  },
  "postgres": {
    "host": "postgres",
    "port": 5432,
    "db": "customer",
    "user": "customer",
    "password": "HUmMLP8NbW2onmf2A1"
  },
  "supabase": {
    "url": "http://postgrest:3000",
    "url_external": "http://192.168.45.45:3000",
    "anon_key": "eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9...",
    "service_role_key": "eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9...",
    "jwt_secret": "IM9/HRQR9mw63lU/1G7vXPMe7q0n3oLcr35dryv0ToU="
  },
  "ollama": {
    "url": "http://192.168.45.3:11434",
    "model": "ministral-3:3b",
    "embedding_model": "nomic-embed-text:latest"
  },
  "n8n": {
    "encryption_key": "d0c9c0ba0551d25e4ee95b6a4b6bc8d5b64e5e14f7f0972fe50332ca051edab5",
    "owner_email": "admin@userman.de",
    "owner_password": "FAmeVE7t9d1iMIXWA1",
    "secure_cookie": false
  },
  "log_file": "/root/customer-installer/logs/sb-1769276659.log"
}

🔧 Verwendung

1. Automatisches Speichern bei Installation

Credentials werden automatisch gespeichert:

# Installation durchführen
./install.sh --storage local-zfs --bridge vmbr0 --ip dhcp --vlan 90

# Credentials werden automatisch gespeichert
# credentials/sb-<timestamp>.json

2. Manuelles Speichern

Falls Sie Credentials manuell speichern möchten:

# JSON-Output in Datei speichern
./install.sh --storage local-zfs --bridge vmbr0 --ip dhcp --vlan 90 > output.json

# Mit save_credentials.sh speichern
./save_credentials.sh output.json

3. Credentials laden

# Credentials laden
CREDS=$(cat credentials/sb-1769276659.json)

# Einzelne Werte extrahieren
CTID=$(echo "$CREDS" | jq -r '.ctid')
IP=$(echo "$CREDS" | jq -r '.ip')
N8N_PASSWORD=$(echo "$CREDS" | jq -r '.n8n.owner_password')

🔄 Credentials aktualisieren

Ollama-URL aktualisieren

Häufiger Use-Case: Ollama-URL von IP zu Hostname ändern

# Von IP zu Hostname
./update_credentials.sh \
  --ctid 769276659 \
  --ollama-url http://ollama.local:11434

# Mit Credentials-Datei
./update_credentials.sh \
  --credentials credentials/sb-1769276659.json \
  --ollama-url http://ollama.local:11434

Ollama-Modell ändern

# Chat-Modell ändern
./update_credentials.sh \
  --ctid 769276659 \
  --ollama-model llama2:latest

# Embedding-Modell ändern
./update_credentials.sh \
  --ctid 769276659 \
  --embedding-model all-minilm:latest

# Beide gleichzeitig
./update_credentials.sh \
  --ctid 769276659 \
  --ollama-model llama2:latest \
  --embedding-model all-minilm:latest

Alle Optionen

./update_credentials.sh \
  --ctid 769276659 \
  --ollama-url http://ollama.local:11434 \
  --ollama-model llama2:latest \
  --embedding-model all-minilm:latest \
  --n8n-email admin@userman.de \
  --n8n-password "NewPassword123"

📝 update_credentials.sh Optionen

Parameter Beschreibung Beispiel
--ctid <id> Container-ID --ctid 769276659
--credentials <file> Credentials-Datei --credentials credentials/sb-*.json
--ollama-url <url> Ollama Server URL --ollama-url http://ollama.local:11434
--ollama-model <model> Chat-Modell --ollama-model llama2:latest
--embedding-model <model> Embedding-Modell --embedding-model all-minilm:latest
--n8n-email <email> n8n Admin-Email --n8n-email admin@example.com
--n8n-password <pass> n8n Admin-Passwort --n8n-password "NewPass123"

🔐 Sicherheit

Git-Schutz

Credentials werden automatisch von Git ausgeschlossen:

# credentials/.gitignore
*.json
!example-credentials.json

Berechtigungen

# Credentials-Verzeichnis schützen
chmod 700 credentials/
chmod 600 credentials/*.json

Passwort-Richtlinien

Automatisch generierte Passwörter erfüllen:

  • Mindestens 14 Zeichen
  • Groß- und Kleinbuchstaben
  • Zahlen
  • Keine Sonderzeichen (für bessere Kompatibilität)

🔄 Workflow

Typischer Workflow

# 1. Installation
./install.sh --storage local-zfs --bridge vmbr0 --ip dhcp --vlan 90

# 2. Credentials werden automatisch gespeichert
# credentials/sb-<timestamp>.json

# 3. Später: Ollama-URL aktualisieren
./update_credentials.sh \
  --credentials credentials/sb-*.json \
  --ollama-url http://ollama.local:11434

# 4. Credentials für Automatisierung verwenden
CTID=$(jq -r '.ctid' credentials/sb-*.json)
IP=$(jq -r '.ip' credentials/sb-*.json)

Automatisierung

#!/bin/bash
# Beispiel: Automatische Deployment-Pipeline

# Installation
OUTPUT=$(./install.sh --storage local-zfs --bridge vmbr0 --ip dhcp --vlan 90)

# Credentials extrahieren
CTID=$(echo "$OUTPUT" | jq -r '.ctid')
IP=$(echo "$OUTPUT" | jq -r '.ip')
N8N_URL=$(echo "$OUTPUT" | jq -r '.urls.n8n_external')

# Credentials-Datei finden
CREDS_FILE=$(ls -t credentials/sb-*.json | head -1)

# Ollama-URL aktualisieren
./update_credentials.sh \
  --credentials "$CREDS_FILE" \
  --ollama-url http://ollama.local:11434

# Tests durchführen
./test_complete_system.sh "$CTID" "$IP" "$(basename "$CREDS_FILE" .json)"

# Monitoring einrichten
# ...

📊 Credential-Typen

PostgreSQL Credentials

"postgres": {
  "host": "postgres",
  "port": 5432,
  "db": "customer",
  "user": "customer",
  "password": "HUmMLP8NbW2onmf2A1"
}

Verwendung:

# Verbindung zur Datenbank
pct exec <ctid> -- docker exec customer-postgres \
  psql -U customer -d customer

Supabase/PostgREST Credentials

"supabase": {
  "url": "http://postgrest:3000",
  "url_external": "http://192.168.45.45:3000",
  "anon_key": "eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9...",
  "service_role_key": "eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9...",
  "jwt_secret": "IM9/HRQR9mw63lU/1G7vXPMe7q0n3oLcr35dryv0ToU="
}

Verwendung:

# API-Zugriff mit anon_key
curl http://192.168.45.45:3000/documents \
  -H "apikey: ${ANON_KEY}" \
  -H "Authorization: Bearer ${ANON_KEY}"

# API-Zugriff mit service_role_key (volle Rechte)
curl http://192.168.45.45:3000/documents \
  -H "apikey: ${SERVICE_KEY}" \
  -H "Authorization: Bearer ${SERVICE_KEY}"

n8n Credentials

"n8n": {
  "encryption_key": "d0c9c0ba0551d25e4ee95b6a4b6bc8d5b64e5e14f7f0972fe50332ca051edab5",
  "owner_email": "admin@userman.de",
  "owner_password": "FAmeVE7t9d1iMIXWA1",
  "secure_cookie": false
}

Verwendung:

# n8n API Login
curl -X POST http://192.168.45.45:5678/rest/login \
  -H "Content-Type: application/json" \
  -d "{\"emailOrLdapLoginId\":\"${N8N_EMAIL}\",\"password\":\"${N8N_PASSWORD}\"}"

Ollama Credentials

"ollama": {
  "url": "http://192.168.45.3:11434",
  "model": "ministral-3:3b",
  "embedding_model": "nomic-embed-text:latest"
}

Verwendung:

# Ollama-Modelle auflisten
curl http://192.168.45.3:11434/api/tags

# Chat-Completion
curl -X POST http://192.168.45.3:11434/api/generate \
  -H "Content-Type: application/json" \
  -d "{\"model\":\"ministral-3:3b\",\"prompt\":\"Hello\"}"

🔍 Troubleshooting

Credentials-Datei nicht gefunden

# Alle Credentials-Dateien auflisten
ls -la credentials/

# Nach Hostname suchen
ls credentials/sb-*.json

Update schlägt fehl

# n8n-Container prüfen
pct exec <ctid> -- docker ps | grep n8n

# n8n-Logs prüfen
pct exec <ctid> -- docker logs n8n

# Manuell in n8n einloggen und prüfen
curl -X POST http://<ip>:5678/rest/login \
  -H "Content-Type: application/json" \
  -d '{"emailOrLdapLoginId":"admin@userman.de","password":"..."}'

Credentials wiederherstellen

# Aus Log-Datei extrahieren
grep "JSON_OUTPUT" logs/sb-*.log

# Oder aus Container extrahieren
pct exec <ctid> -- cat /opt/customer-stack/.env

📚 Weiterführende Dokumentation


Best Practices:

  1. Credentials-Dateien regelmäßig sichern
  2. Passwörter nicht in Scripts hardcoden
  3. Service-Role-Key nur für administrative Aufgaben verwenden
  4. Credentials-Verzeichnis mit restriktiven Berechtigungen schützen