Files
ApiCore/deploy/k8s/overlays/encry/configmap-backend.yaml
T
Nick SzaunigandClaude Opus 5.5 c53810b8a6
Backend Image / build-and-push (push) Successful in 5m49s
Frontend Image / build-and-push (push) Successful in 13m3s
Manifests / validate (push) Successful in 17s
Whisper Image / build-and-push (push) Successful in 1m56s
feat: Abschreiben im Cluster mit Whisper-Image und Voice-CronJob (T7 L3 Task 13)
ApiCore-Whisper: transcribe.py liest das Manifest im RAM-Arbeitsordner,
dekodiert mit festem Demuxer je Endung, misst die Länge vor dem
Abschreiben (TOO_LONG > 240 s, DECODE_FAILED bei Länge 0), sperrt das
Netz vor dem Modell-Laden und schreibt nur Zähler auf stdout. Image:
python:3.12-slim per Digest, Nutzer 1000, alle Pakete mit Hash
(faster-whisper 1.2.1, av 18.1.0 wegen Inkompatibilität mit av 19),
Modell faster-whisper-small auf fester Revision mit SHA-256 je Datei.
CI-Workflow nur bei Änderungen unter ApiCore-Whisper/, Actions per SHA.

deploy/k8s/components/voice: CronJob alle 2 Minuten mit fetch, whisper,
ingest (gleiche UID, getrennte /tmp-Volumes, damit der Decoder dem
Container mit den Secrets nichts unterschieben kann; whisper ohne
Secrets und Umgebungsvariablen außer WHISPER_CPU_THREADS), Overlay mit
Platzhalter-Digest, ConfigMap-Werte für Sprache, Policy-Tests (55).
Die Anbindung des Anthropic-Schlüssels bleibt offen (Ruling 9).

Refs #27

Co-Authored-By: Claude Opus 5.5 (1M context) <[email protected]>
2026-10-16 11:12:59 +02:00

38 lines
2.1 KiB
YAML

# Werte fuer den Cluster. Bedeutung der Schluessel:
# base/backend/configmap.example.yaml. Live-Werte (Stand 2026-10-15) aus dem
# Cluster uebernommen (Runbook Schritt 1). Geheimes gehoert ins Secret
# apicore-backend-secret, nie hierher.
apiVersion: v1
kind: ConfigMap
metadata:
name: apicore-backend-config
data:
PORT: "3001"
JWT_ACCESS_EXPIRES_IN: "15m"
JWT_REFRESH_EXPIRES_IN: "7d"
FRONTEND_ORIGIN: "https://apicore.encry.de"
DOCUMENTS_STORAGE_PATH: "/data/documents"
BACKUP_STORAGE_PATH: "/data/backups"
BACKUP_CRON_SCHEDULE: "0 3 * * *"
BACKUP_RETENTION_COUNT: "30"
COOKIE_SECURE: "true"
TRUST_PROXY: "loopback, 10.42.0.0/16, 173.245.48.0/20, 103.21.244.0/22, 103.22.200.0/22, 103.31.4.0/22, 141.101.64.0/18, 108.162.192.0/18, 190.93.240.0/20, 188.114.96.0/20, 197.234.240.0/22, 198.41.128.0/17, 162.158.0.0/15, 104.16.0.0/13, 104.24.0.0/14, 172.64.0.0/13, 131.0.72.0/22, 2400:cb00::/32, 2606:4700::/32, 2803:f800::/32, 2405:b500::/32, 2405:8100::/32, 2a06:98c0::/29, 2c0f:f248::/32"
OIDC_ISSUER_URL: "https://login.microsoftonline.com/30e1c0c9-0295-4074-b45d-c3372140d2a4/v2.0/.well-known/openid-configuration"
# Oeffentliche Client-ID der Entra-App (kein Geheimnis); laeuft live hier.
OIDC_CLIENT_ID: "fe64e5ac-55c4-46dc-8b86-3340797d2451"
OIDC_REDIRECT_URI: "https://apicorebackend.encry.de/api/v1/auth/sso/callback"
WEATHER_HISTORY_SOURCE: "open-meteo"
OPEN_METEO_FORECAST_URL: "https://api.open-meteo.com/v1/forecast"
OPEN_METEO_ARCHIVE_URL: "https://archive-api.open-meteo.com/v1/archive"
# Telegram: Name des Bots (ohne @) fuer den Deep Link. Leer, solange der Bot
# bei BotFather noch nicht angelegt ist (Runbook); dann den Namen eintragen.
# Das Token liegt im Secret apicore-telegram (nur Worker).
TELEGRAM_BOT_USERNAME: ""
# Sprachnotizen (T7). VOICE_RECORDING_ENABLED blendet die Aufnahme in der App
# aus ("false") oder ein ("true"); VOICE_MODEL und VOICE_DAILY_EXTRACTIONS
# gelten fuer die Claude-Auswertung (zurueckgestellt). Den Schluessel
# ANTHROPIC_API_KEY gibt es hier nie: er gehoert ins Secret apicore-anthropic.
VOICE_RECORDING_ENABLED: "false"
VOICE_MODEL: "claude-sonnet-5-5"
VOICE_DAILY_EXTRACTIONS: "60"