id: open-webui
name: "Open WebUI"
version: "1.0"
description: "KI-Chat-Interface für LLMs (OpenAI-kompatibel)"
category: education

links:
  homepage: "https://openwebui.com/"
  docs: "https://docs.openwebui.com/"
  github: "https://github.com/open-webui/open-webui"

image:
  name: "ghcr.io/open-webui/open-webui"
  tag: "main"

ports:
  - host: 8310
    container: 8080
    protocol: tcp
    description: "Web-UI"

volumes:
  - host: "/opt/appctl/data/open-webui"
    container: "/app/backend/data"
    description: "Datenbank, Uploads, Chat-Verläufe"

global_env:
  - key: "ITBOX_LLM_ENDPOINT"
    description: "IT.Box LLM-Proxy Endpoint"
    required: true
    default: "https://llm.kibox.online/v1"

  - key: "ITBOX_LLM_API_KEY"
    description: "IT.Box LLM API Key"
    required: true

environment:
  - key: "OPENAI_API_BASE_URL"
    value: "${ITBOX_LLM_ENDPOINT}"

  - key: "OPENAI_API_KEY"
    value: "${ITBOX_LLM_API_KEY}"

  - key: "WEBUI_SECRET_KEY"
    value: "${OPEN_WEBUI_SECRET_KEY}"

  - key: "WEBUI_AUTH"
    value: "true"

  - key: "ENABLE_SIGNUP"
    value: "true"

  - key: "WEBUI_URL"
    value: "http://itbox.local:8310"

  - key: "WEBUI_NAME"
    value: "IT.Box KI-Chat"

  # Neue Benutzer automatisch als "user" freischalten (nicht "pending")
  - key: "DEFAULT_USER_ROLE"
    value: "user"

secrets:
  - key: "OPEN_WEBUI_SECRET_KEY"
    description: "Secret Key für JWT-Sessions"
    required: true
    generate: "secret"

optional_secrets:
  - key: "OPENAI_API_KEY_CUSTOM"
    description: "Eigener OpenAI API Key (zusätzlich zu IT.Box LLM)"
    docs: "https://platform.openai.com/api-keys"

  - key: "ANTHROPIC_API_KEY"
    description: "Anthropic API Key für Claude-Modelle"
    docs: "https://console.anthropic.com/"

depends_on: []

# LDAP-Integration (automatisch wenn boxid läuft)
# Open WebUI nutzt Search+Bind: Anonymous Search, dann User-Bind
# Docs: https://docs.openwebui.com/features/ldap
ldap_config:
  supported: true
  required: false
  env_mappings:
    host: "LDAP_SERVER_HOST"
    port: "LDAP_SERVER_PORT"
    users_dn: "LDAP_SEARCH_BASE"
  static_env:
    # LDAP aktivieren
    - key: "ENABLE_LDAP"
      value: "true"
    # Server Label (wird im Login-Dialog angezeigt)
    - key: "LDAP_SERVER_LABEL"
      value: "moin.schule"
    # Anonymous Bind für Suche - boxid erlaubt anonymous search
    # Dummy-Wert damit UI-Validierung zufrieden ist (wird nicht verwendet)
    - key: "LDAP_APP_DN"
      value: "cn=anonymous"
    - key: "LDAP_APP_PASSWORD"
      value: "unused"
    # User-Attribute
    - key: "LDAP_ATTRIBUTE_FOR_USERNAME"
      value: "uid"
    - key: "LDAP_ATTRIBUTE_FOR_MAIL"
      value: "mail"
    # Such-Filter: LEER lassen! OpenWebUI fügt automatisch (uid={input}) hinzu
    # Nur für zusätzliche Filter wie Gruppenmitgliedschaft nutzen:
    # z.B. "(memberOf=cn=allowed-users,ou=groups,dc=itbox,dc=local)"
    - key: "LDAP_SEARCH_FILTER"
      value: ""
    # Kein TLS (lokales Netzwerk)
    - key: "LDAP_USE_TLS"
      value: "false"
    - key: "LDAP_VALIDATE_CERT"
      value: "false"
    # Ciphers leer lassen (Standard verwenden)
    - key: "LDAP_CIPHERS"
      value: ""
  message: "LDAP aktiviert - Login mit moin.schule Zugangsdaten"

post_install:
  messages:
    - "Open WebUI laeuft auf http://itbox.local:8310"
    - "Erster Benutzer wird automatisch Admin"
    - "IT.Box LLM-Proxy ist vorkonfiguriert"
    - "Falls boxid laeuft: Login mit moin.schule Zugangsdaten"
    - "Weitere API-Keys: sudo appctl secrets set OPENAI_API_KEY_CUSTOM"

  ports_info:
    - port: 8310
      protocol: tcp
      description: "Web-UI - Für Tunnel: sudo tnl add open-webui 8310"

resources:
  ram_mb: 512
  cpu_cores: 0.5
  disk_mb: 200

warnings:
  - "ARM64-Support (Raspberry Pi) nicht offiziell dokumentiert"
