跳到主要内容
警告

本教程由社区贡献,不获得 Open WebUI 团队的支持。它仅作为演示,说明如何根据您的特定用例定制 Open WebUI。想要贡献?请查看贡献教程。

🔗 Redis Websocket 支持

概述

本文档页面概述了将 Redis 与 Open WebUI 集成以支持 websocket 所需的步骤。通过遵循这些步骤,您将能够在 Open WebUI 实例中启用 websocket 功能,从而实现客户端与应用程序之间的实时通信和更新。

先决条件

  • 一个有效的 Open WebUI 实例(运行版本 1.0 或更高)
  • 一个 Redis 容器(在本例中,我们将使用 docker.io/valkey/valkey:8.0.1-alpine,它基于最新的 Redis 7.x 版本)
  • 您的系统上已安装 Docker Composer(版本 2.0 或更高)
  • 用于 Open WebUI 和 Redis 之间通信的 Docker 网络
  • 对 Docker、Redis 和 Open WebUI 的基本了解

设置 Redis

要设置 Redis 以支持 websocket,您需要创建一个包含以下内容的 docker-compose.yml 文件:

version: '3.9'
services:
redis:
image: docker.io/valkey/valkey:8.0.1-alpine
container_name: redis-valkey
volumes:
- redis-data:/data
command: "valkey-server --save 30 1"
healthcheck:
test: "[ $$(valkey-cli ping) = 'PONG' ]"
start_period: 5s
interval: 1s
timeout: 3s
retries: 5
restart: unless-stopped
cap_drop:
- ALL
cap_add:
- SETGID
- SETUID
- DAC_OVERRIDE
logging:
driver: "json-file"
options:
max-size: "1m"
max-file: "1"
networks:
- openwebui-network

volumes:
redis-data:

networks:
openwebui-network:
external: true
注意

此配置中未包含 ports 指令,因为在大多数情况下它不是必需的。Redis 服务仍将可以通过 Docker 网络从 Open WebUI 服务内部访问。但是,如果您需要从 Docker 网络外部访问 Redis 实例(例如,用于调试或监控),您可以添加 ports 指令来暴露 Redis 端口(例如,6379:6379)。

上述配置设置了一个名为 redis-valkey 的 Redis 容器,并为数据持久性挂载了一个卷。healthcheck 指令确保如果容器未能响应 ping 命令,则会重新启动。--save 30 1 命令选项表示如果至少有 1 个键发生更改,则每 30 分钟将 Redis 数据库保存到磁盘。

要为 Open WebUI 和 Redis 之间的通信创建 Docker 网络,请运行以下命令:

docker network create openwebui-network

配置 Open WebUI

要在 Open WebUI 中启用 websocket 支持,您需要为 Open WebUI 实例设置以下环境变量:

ENABLE_WEBSOCKET_SUPPORT="true"
WEBSOCKET_MANAGER="redis"
WEBSOCKET_REDIS_URL="redis://redis:6379/1"
REDIS_KEY_PREFIX="open-webui"

这些环境变量启用 websocket 支持,指定 Redis 作为 websocket 管理器,定义 Redis URL,并设置自定义的 Redis 键前缀。REDIS_KEY_PREFIX 允许多个 Open WebUI 实例共享同一个 Redis 实例而不会发生键冲突。在 Redis 集群模式下,前缀格式为 {prefix}:(例如,{open-webui}:config:*),以实现在同一哈希槽内对配置键进行多键操作。请务必将 WEBSOCKET_REDIS_URL 的值替换为您的 Redis 实例的实际 IP 地址。

当使用 Docker 运行 Open WebUI 时,您需要将其连接到同一个 Docker 网络:

docker run -d \
--name open-webui \
--network openwebui-network \
-v open-webui:/app/backend/data \
-e ENABLE_WEBSOCKET_SUPPORT="true" \
-e WEBSOCKET_MANAGER="redis" \
-e WEBSOCKET_REDIS_URL="redis://127.0.0.1:6379/1" \
-e REDIS_KEY_PREFIX="open-webui" \
ghcr.io/open-webui/open-webui:main

127.0.0.1 替换为 Docker 网络中 Redis 容器的实际 IP 地址。

验证

如果您已正确设置 Redis 并配置了 Open WebUI,则在启动 Open WebUI 实例时应看到以下日志消息:

DEBUG:open_webui.socket.main:Using Redis to manage websockets.

这确认 Open WebUI 正在使用 Redis 进行 websocket 管理。您还可以使用 docker exec 命令验证 Redis 实例是否正在运行并接受连接:

docker exec -it redis-valkey redis-cli -p 6379 ping

如果 Redis 实例运行正常,此命令应输出 PONG。如果此命令失败,您可以尝试此命令:

docker exec -it redis-valkey valkey-cli -p 6379 ping

故障排除

如果您在 Open WebUI 中遇到 Redis 或 websocket 支持问题,可以参考以下资源进行故障排除:

通过遵循这些步骤和故障排除提示,您应该能够为 Open WebUI 设置 Redis 以支持 websocket,并实现客户端与应用程序之间的实时通信和更新。