feat(openwebui): añadir stack de interfaz web para modelos de IA
Open WebUI conectado al gateway LiteLLM, con autenticación delegada a Authentik mediante trusted headers (X-Authentik-Email/Name). Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
This commit is contained in:
@@ -0,0 +1,41 @@
|
||||
# Open WebUI — Interfaz web para LLMs
|
||||
|
||||
Open WebUI conectado al stack de Ollama. Expone una UI de chat accesible en `chat.sherlockhomeless.net`, protegida por CrowdSec. Tiene su propio sistema de login, no usa Authentik.
|
||||
|
||||
## Prerequisitos
|
||||
|
||||
- Stack **Ollama** desplegado y en la red `proxy`
|
||||
- DNS + Tunnel registrado para `chat.sherlockhomeless.net`
|
||||
|
||||
```bash
|
||||
cd cloudflared
|
||||
./add-domain.sh chat
|
||||
```
|
||||
|
||||
## Despliegue
|
||||
|
||||
```bash
|
||||
mkdir -p /opt/openwebui/data
|
||||
cp openwebui/stack.env openwebui/.env
|
||||
# Editar .env: cambiar WEBUI_SECRET_KEY por un valor aleatorio
|
||||
openssl rand -hex 32
|
||||
docker compose --env-file openwebui/.env -f openwebui/docker-compose.yml up -d
|
||||
```
|
||||
|
||||
## Primer acceso
|
||||
|
||||
La primera cuenta registrada se convierte en administrador. Después de crearla, pon `ENABLE_SIGNUP=false` en `.env` y redespliega para bloquear nuevos registros.
|
||||
|
||||
## Conexión con Ollama
|
||||
|
||||
OpenWebUI se conecta a Ollama via red interna Docker: `http://ollama:11434`.
|
||||
Ambos contenedores deben estar en la red `proxy`.
|
||||
|
||||
## Variables clave
|
||||
|
||||
| Variable | Descripción |
|
||||
|----------|-------------|
|
||||
| `WEBUI_SECRET_KEY` | Clave para firmar sesiones — generar con `openssl rand -hex 32` |
|
||||
| `OLLAMA_BASE_URL` | URL interna de Ollama (`http://ollama:11434`) |
|
||||
| `ENABLE_SIGNUP` | `false` para bloquear nuevos registros |
|
||||
| `WEBUI_NAME` | Nombre mostrado en la interfaz |
|
||||
@@ -0,0 +1,42 @@
|
||||
services:
|
||||
openwebui:
|
||||
image: ghcr.io/open-webui/open-webui:${OPENWEBUI_VERSION}
|
||||
pull_policy: always
|
||||
container_name: openwebui
|
||||
restart: unless-stopped
|
||||
environment:
|
||||
TZ: ${TZ}
|
||||
OLLAMA_BASE_URL: ""
|
||||
OPENAI_API_BASE_URL: ${OPENAI_API_BASE_URL}
|
||||
OPENAI_API_KEY: ${OPENAI_API_KEY}
|
||||
WEBUI_SECRET_KEY: ${WEBUI_SECRET_KEY}
|
||||
WEBUI_URL: https://${OPENWEBUI_DOMAIN}
|
||||
WEBUI_NAME: ${WEBUI_NAME}
|
||||
ENABLE_SIGNUP: ${ENABLE_SIGNUP}
|
||||
ENABLE_LOGIN_FORM: ${ENABLE_LOGIN_FORM}
|
||||
WEBUI_AUTH_TRUSTED_EMAIL_HEADER: ${WEBUI_AUTH_TRUSTED_EMAIL_HEADER}
|
||||
WEBUI_AUTH_TRUSTED_NAME_HEADER: ${WEBUI_AUTH_TRUSTED_NAME_HEADER}
|
||||
volumes:
|
||||
- ${OPENWEBUI_DATA_PATH}:/app/backend/data:Z
|
||||
networks:
|
||||
- proxy
|
||||
labels:
|
||||
traefik.enable: "true"
|
||||
traefik.docker.network: "${TRAEFIK_DOCKER_NETWORK}"
|
||||
traefik.http.routers.openwebui.rule: "Host(`${OPENWEBUI_DOMAIN}`)"
|
||||
traefik.http.routers.openwebui.entrypoints: "${TRAEFIK_ENTRYPOINT_SECURE}"
|
||||
traefik.http.routers.openwebui.tls: "true"
|
||||
traefik.http.routers.openwebui.tls.certresolver: "${TRAEFIK_CERTRESOLVER}"
|
||||
traefik.http.routers.openwebui.middlewares: "crowdsec-bouncer@file,${TRAEFIK_AUTH_MIDDLEWARE}"
|
||||
traefik.http.services.openwebui.loadbalancer.server.port: "8080"
|
||||
homepage.group: "IA"
|
||||
homepage.name: "Open WebUI"
|
||||
homepage.icon: "https://cdn.jsdelivr.net/gh/homarr-labs/dashboard-icons/svg/open-webui.svg"
|
||||
homepage.description: "Interfaz web para LLMs via LiteLLM"
|
||||
homepage.href: "https://${OPENWEBUI_DOMAIN}"
|
||||
homepage.siteMonitor: "http://openwebui:8080/"
|
||||
homepage.weight: "10"
|
||||
|
||||
networks:
|
||||
proxy:
|
||||
external: true
|
||||
Reference in New Issue
Block a user