์ด ํํ ๋ฆฌ์ผ์ ์ปค๋ฎค๋ํฐ ๊ธฐ์ฌ๋ก ์์ฑ๋ ๊ฒ์ด๋ฉฐ Open WebUI ํ์์ ๊ณต์์ ์ผ๋ก ์ง์ํ์ง ์์ต๋๋ค. ํน์ ์ฌ์ฉ ์ฌ๋ก์ ๋ง์ถ์ด Open WebUI๋ฅผ ์ปค์คํฐ๋ง์ด์งํ๋ ๋ฐฉ๋ฒ์ ๋ํ ๋ฐ๋ชจ๋ก ์ ๊ณต๋ฉ๋๋ค. ๊ธฐ์ฌํ๊ณ ์ถ์ผ์ ๊ฐ์? ๊ธฐ์ฌ ํํ ๋ฆฌ์ผ์ ํ์ธํด๋ณด์ธ์.
๐ Redis Websocket ์ง์
๊ฐ์โ
์ด ๋ฌธ์๋ Redis์ Open WebUI๋ฅผ ํตํฉํ์ฌ Websocket ์ง์์ ํ์ฑํํ๋ ๋ฐฉ๋ฒ์ ๋ํ ๋จ๊ณ๋ฅผ ์ค๋ช ํฉ๋๋ค. ์ด ๋จ๊ณ๋ฅผ ๋ฐ๋ฅด๋ฉด, Open WebUI ์ธ์คํด์ค์์ Websocket ๊ธฐ๋ฅ์ ํ์ฑํํ์ฌ ํด๋ผ์ด์ธํธ์ ์ ํ๋ฆฌ์ผ์ด์ ๊ฐ ์ค์๊ฐ ํต์ ๋ฐ ์ ๋ฐ์ดํธ๋ฅผ ๊ฐ๋ฅํ๊ฒ ํ ์ ์์ต๋๋ค.
์ ํ ์กฐ๊ฑดโ
- ์ ํจํ Open WebUI ์ธ์คํด์ค (๋ฒ์ 1.0 ์ด์์์ ์คํ ์ค)
- Redis ์ปจํ
์ด๋ (์ด ์์ ์์๋ ์ต์ Redis 7.x ๋ฆด๋ฆฌ์ฆ๋ฅผ ๊ธฐ๋ฐ์ผ๋ก ํ๋
docker.io/valkey/valkey:8.0.1-alpine
์ ์ฌ์ฉํฉ๋๋ค) - Docker Composer (๋ฒ์ 2.0 ์ด์) ์์คํ ์ ์ค์น๋จ
- Open WebUI์ Redis ์ฌ์ด์ ํต์ ์ ์ํ Docker ๋คํธ์ํฌ
- Docker, Redis, Open WebUI์ ๋ํ ๊ธฐ๋ณธ์ ์ธ ์ดํด
Redis ์ค์ ํ๊ธฐโ
Websocket ์ง์์ ์ํด Redis๋ฅผ ์ค์ ํ๋ ค๋ฉด ์๋ ๋ด์ฉ์ ํฌํจํ๋ 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
๋ช
๋ น ์ต์
์ 30๋ถ๋ง๋ค ๋ณ๊ฒฝ๋ ํค๊ฐ ์ต์ 1๊ฐ์ธ ์ํ์์ 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"
์ด ํ๊ฒฝ ๋ณ์๋ Websocket ์ง์์ ํ์ฑํํ๊ณ Redis๋ฅผ Websocket ๋งค๋์ ๋ก ์ง์ ํ๋ฉฐ Redis URL์ ์ ์ํฉ๋๋ค. 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" \
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๊ฐ Websocket ๊ด๋ฆฌ๋ฅผ ์ํด Redis๋ฅผ ์ฌ์ฉํ๊ณ ์์์ ํ์ธํฉ๋๋ค. 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
๋ฌธ์ ํด๊ฒฐโ
Redis ๋๋ Open WebUI์์ Websocket ์ง์๊ณผ ๊ด๋ จ๋ ๋ฌธ์ ๊ฐ ๋ฐ์ํ ๊ฒฝ์ฐ ๋ค์ ์๋ฃ๋ฅผ ์ฐธ์กฐํ์ฌ ๋ฌธ์ ๋ฅผ ํด๊ฒฐํ ์ ์์ต๋๋ค: