๋ณธ๋ฌธ์œผ๋กœ ๊ฑด๋„ˆ๋›ฐ๊ธฐ
๊ฒฝ๊ณ 

์ด ํŠœํ† ๋ฆฌ์–ผ์€ ์ปค๋ฎค๋‹ˆํ‹ฐ ๊ธฐ์—ฌ๋กœ ์ž‘์„ฑ๋œ ๊ฒƒ์ด๋ฉฐ 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
Notes

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 ์ง€์›๊ณผ ๊ด€๋ จ๋œ ๋ฌธ์ œ๊ฐ€ ๋ฐœ์ƒํ•  ๊ฒฝ์šฐ ๋‹ค์Œ ์ž๋ฃŒ๋ฅผ ์ฐธ์กฐํ•˜์—ฌ ๋ฌธ์ œ๋ฅผ ํ•ด๊ฒฐํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค: