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

๐Ÿ”„ Open WebUI ์—…๋ฐ์ดํŠธ

์™œ ๋‚ด Open WebUI๊ฐ€ ์—…๋ฐ์ดํŠธ๋˜์ง€ ์•Š๋‚˜์š”?โ€‹

๋กœ์ปฌ Docker ์„ค์น˜์—์„œ ์ตœ์‹  ๋ฒ„์ „์˜ Open WebUI๋กœ ์—…๋ฐ์ดํŠธํ•˜๋ ค๋ฉด Watchtower๋ฅผ ์‚ฌ์šฉํ•˜๊ฑฐ๋‚˜ ์ปจํ…Œ์ด๋„ˆ๋ฅผ ์ˆ˜๋™์œผ๋กœ ์—…๋ฐ์ดํŠธํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ์•„๋ž˜ ์ œ๊ณต๋œ ๋‹จ๊ณ„ ์ค‘ ํ•˜๋‚˜๋ฅผ ๋”ฐ๋ผ ๊ธฐ์กด Open WebUI ์ด๋ฏธ์ง€๋ฅผ ์—…๋ฐ์ดํŠธํ•˜์„ธ์š”.

์ˆ˜๋™ ์—…๋ฐ์ดํŠธโ€‹

  1. ํ˜„์žฌ ์ปจํ…Œ์ด๋„ˆ ์ค‘์ง€ ๋ฐ ์ œ๊ฑฐ:

    ์‹คํ–‰ ์ค‘์ธ ์ปจํ…Œ์ด๋„ˆ๋ฅผ ์ค‘์ง€ํ•˜๊ณ  ์ œ๊ฑฐํ•˜์ง€๋งŒ Docker ๋ณผ๋ฅจ์— ์ €์žฅ๋œ ๋ฐ์ดํ„ฐ๋Š” ์‚ญ์ œ๋˜์ง€ ์•Š์Šต๋‹ˆ๋‹ค. (์—…๋ฐ์ดํŠธ ๊ณผ์ •์—์„œ ์ปจํ…Œ์ด๋„ˆ ์ด๋ฆ„์ด ๋‹ค๋ฅด๋ฉด open-webui๋ฅผ ์ž์‹ ์˜ ์ปจํ…Œ์ด๋„ˆ ์ด๋ฆ„์œผ๋กœ ๋Œ€์ฒดํ•˜์„ธ์š”.)

docker rm -f open-webui
  1. ์ตœ์‹  Docker ์ด๋ฏธ์ง€ ๊ฐ€์ ธ์˜ค๊ธฐ:

    Docker ์ด๋ฏธ์ง€๋ฅผ ์—…๋ฐ์ดํŠธํ•˜์ง€๋งŒ ์‹คํ–‰ ์ค‘์ธ ์ปจํ…Œ์ด๋„ˆ๋‚˜ ๋ฐ์ดํ„ฐ๋Š” ์—…๋ฐ์ดํŠธํ•˜์ง€ ์•Š์Šต๋‹ˆ๋‹ค.

docker pull ghcr.io/open-webui/open-webui:main
์ •๋ณด

Docker ๋ณผ๋ฅจ์˜ ๊ธฐ์กด ๋ฐ์ดํ„ฐ๋ฅผ ์ œ๊ฑฐ (์ ˆ๋Œ€์ ์œผ๋กœ ํ•„์š”ํ•˜์ง€ ์•Š์€ ํ•œ ๊ถŒ์žฅํ•˜์ง€ ์•Š์Œ!). ํ•„์š”ํ•˜์ง€ ์•Š๋‹ค๋ฉด ์ด ๋‹จ๊ณ„๋ฅผ ๊ฑด๋„ˆ๋›ฐ๊ณ  ๋งˆ์ง€๋ง‰ ๋‹จ๊ณ„๋กœ ์ด๋™ํ•˜์„ธ์š”:

๊นจ๋—ํ•œ ์ƒํƒœ๋กœ ์‹œ์ž‘ํ•˜๋ ค๋ฉด Docker ๋ณผ๋ฅจ์— ์žˆ๋Š” ๊ธฐ์กด ๋ฐ์ดํ„ฐ๋ฅผ ์ œ๊ฑฐํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ์ฃผ์˜ํ•˜์„ธ์š”, ์ด ๊ณผ์ •์—์„œ ๋ชจ๋“  ์ฑ„ํŒ… ๊ธฐ๋ก ๋ฐ ๊ธฐํƒ€ ๋ฐ์ดํ„ฐ๊ฐ€ ์‚ญ์ œ๋ฉ๋‹ˆ๋‹ค.

๋ฐ์ดํ„ฐ๋Š” open-webui๋ผ๋Š” Docker ๋ณผ๋ฅจ์— ์ €์žฅ๋ฉ๋‹ˆ๋‹ค. ์•„๋ž˜ ๋ช…๋ น์–ด๋กœ ์ œ๊ฑฐํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค:

docker volume rm open-webui
  1. ์—…๋ฐ์ดํŠธ๋œ ์ด๋ฏธ์ง€์™€ ๊ธฐ์กด ๋ณผ๋ฅจ์„ ์—ฐ๊ฒฐํ•˜์—ฌ ์ปจํ…Œ์ด๋„ˆ ์žฌ์‹œ์ž‘:

    ๊ธฐ์กด ๋ฐ์ดํ„ฐ๋ฅผ ์‚ญ์ œํ•˜์ง€ ์•Š์•˜๋‹ค๋ฉด ์—…๋ฐ์ดํŠธ๋œ ์ด๋ฏธ์ง€์™€ ๊ธฐ์กด ๋ฐ์ดํ„ฐ๋ฅผ ์—ฐ๊ฒฐํ•˜์—ฌ ์ปจํ…Œ์ด๋„ˆ๋ฅผ ์‹œ์ž‘ํ•ฉ๋‹ˆ๋‹ค. ๊ธฐ์กด ๋ฐ์ดํ„ฐ๋ฅผ ์‚ญ์ œํ–ˆ๋‹ค๋ฉด ์—…๋ฐ์ดํŠธ๋œ ์ด๋ฏธ์ง€์™€ ์ƒˆ๋กœ์šด ๋นˆ ๋ณผ๋ฅจ์œผ๋กœ ์ปจํ…Œ์ด๋„ˆ๋ฅผ ์‹œ์ž‘ํ•ฉ๋‹ˆ๋‹ค. Nvidia GPU ์ง€์›์„ ์œ„ํ•ด์„œ๋Š” docker run ๋ช…๋ น์–ด์— --gpus all์„ ์ถ”๊ฐ€ํ•˜์„ธ์š”

docker run -d -p 3000:8080 -v open-webui:/app/backend/data --name open-webui ghcr.io/open-webui/open-webui:main

๋งค๋ฒˆ ์—…๋ฐ์ดํŠธ ํ›„ ๋กœ๊ทธ์•„์›ƒ ์ƒํƒœ๋กœ ์œ ์ง€๋˜๋‚˜์š”?โ€‹

๋งค๋ฒˆ ์—…๋ฐ์ดํŠธ ํ›„ ๋กœ๊ทธ์•„์›ƒ ์ƒํƒœ๋กœ ์œ ์ง€๋˜๋Š” ๊ฒฝ์šฐ, ํ™˜๊ฒฝ ๋ณ€์ˆ˜ ๋‚ด WEBUI_SECRET_KEY๊ฐ€ ์„ค์ •๋˜์–ด ์žˆ๋Š”์ง€ ํ™•์ธํ•˜์„ธ์š”. ์ด ํ‚ค๊ฐ€ ์ผ๊ด€๋˜๊ฒŒ ์ •์˜๋˜์ง€ ์•Š์œผ๋ฉด ์—…๋ฐ์ดํŠธ ํ›„ ์ธ์ฆ ์„ธ์…˜์ด ๋ฌดํšจํ™”๋  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

WEBUI_SECRET_KEY๋ฅผ ์ง€์†์ ์œผ๋กœ ์„ค์ •ํ•˜๋ ค๋ฉด Docker ์ปจํ…Œ์ด๋„ˆ ์‹คํ–‰ ์‹œ ํฌํ•จํ•˜์„ธ์š”:

docker run -d -p 3000:8080 -v open-webui:/app/backend/data --name open-webui -e WEBUI_SECRET_KEY=your_secret_key ghcr.io/open-webui/open-webui:main

๋˜๋Š”, docker-compose๋ฅผ ์‚ฌ์šฉํ•˜๋Š” ๊ฒฝ์šฐ, environment ์„น์…˜ ์•„๋ž˜์— ์ถ”๊ฐ€ํ•˜์„ธ์š”:

version: '3'
services:
open-webui:
image: ghcr.io/open-webui/open-webui:main
ports:
- "3000:8080"
volumes:
- open-webui:/app/backend/data
environment:
- WEBUI_SECRET_KEY=your_secret_key

ํ™˜๊ฒฝ ๋ณ€์ˆ˜ ์„ค์ •์— ๋Œ€ํ•œ ์ž์„ธํ•œ ๋‚ด์šฉ์€ Open WebUI ๋ณด์•ˆ ๋ณ€์ˆ˜ ๋ฌธ์„œ๋ฅผ ํ™•์ธํ•˜์„ธ์š”.

Watchtower๋ฅผ ์ด์šฉํ•œ Open WebUI ์ž๋™ ์—…๋ฐ์ดํŠธโ€‹

Watchtower๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ Open WebUI์˜ ์—…๋ฐ์ดํŠธ ํ”„๋กœ์„ธ์Šค๋ฅผ ์ž๋™ํ™”ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ๋‹ค์Œ์˜ ์„ธ ๊ฐ€์ง€ ์˜ต์…˜์ด ์žˆ์Šต๋‹ˆ๋‹ค:

์˜ต์…˜ 1: 1ํšŒ ์—…๋ฐ์ดํŠธโ€‹

Watchtower๋ฅผ ์‹คํ–‰ํ•˜์—ฌ ํ˜„์žฌ ์ปจํ…Œ์ด๋„ˆ๋ฅผ ์ค‘์ง€, ์ตœ์‹  ์ด๋ฏธ์ง€๋ฅผ ๊ฐ€์ ธ์˜ค๊ณ , ์—…๋ฐ์ดํŠธ๋œ ์ด๋ฏธ์ง€์™€ ๊ธฐ์กด ๋ณผ๋ฅจ์„ ์—ฐ๊ฒฐํ•˜์—ฌ ์ƒˆ๋กœ์šด ์ปจํ…Œ์ด๋„ˆ๋ฅผ ์‹œ์ž‘ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค (Nvidia GPU ์ง€์›์„ ์œ„ํ•ด์„œ --gpus all์„ docker run ๋ช…๋ น์–ด์— ์ถ”๊ฐ€ํ•˜์„ธ์š”):

docker run --rm --volume /var/run/docker.sock:/var/run/docker.sock containrrr/watchtower --run-once open-webui

์˜ต์…˜ 2: ๋ณ„๋„์˜ ์ปจํ…Œ์ด๋„ˆ๋กœ Watchtower ์‹คํ–‰โ€‹

๋ณ„๋„์˜ ์ปจํ…Œ์ด๋„ˆ๋กœ Watchtower๋ฅผ ์‹คํ–‰ํ•˜์—ฌ Open WebUI ์ปจํ…Œ์ด๋„ˆ๋ฅผ ๊ฐ์‹œํ•˜๊ณ  ์—…๋ฐ์ดํŠธํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค:

docker run -d --name watchtower \
--volume /var/run/docker.sock:/var/run/docker.sock \
containrrr/watchtower -i 300 open-webui

์ด ๋ช…๋ น์€ Watchtower๋ฅผ ๋ถ„๋ฆฌ๋œ ๋ชจ๋“œ๋กœ ์‹œ์ž‘ํ•˜์—ฌ Open WebUI ์ปจํ…Œ์ด๋„ˆ๋ฅผ 5๋ถ„๋งˆ๋‹ค ์—…๋ฐ์ดํŠธ๊ฐ€ ์žˆ๋Š”์ง€ ๊ฐ์‹œํ•ฉ๋‹ˆ๋‹ค.

์˜ต์…˜ 3: docker-compose.yml ํŒŒ์ผ๊ณผ Watchtower ํ†ตํ•ฉโ€‹

docker-compose.yml ํŒŒ์ผ๊ณผ Watchtower๋ฅผ ํ†ตํ•ฉํ•˜์—ฌ Open WebUI ์—…๋ฐ์ดํŠธ๋ฅผ ์ž๋™ํ™”ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค (Nvidia GPU ์ง€์›์„ ์œ„ํ•ด์„œ --gpus all์„ docker run ๋ช…๋ น์–ด์— ์ถ”๊ฐ€ํ•˜์„ธ์š”):

version: '3'
services:
open-webui:
image: ghcr.io/open-webui/open-webui:main
ports:
- "3000:8080"
volumes:
- open-webui:/app/backend/data

watchtower:
image: containrrr/watchtower
volumes:
- /var/run/docker.sock:/var/run/docker.sock
command: --interval 300 open-webui
depends_on:
- open-webui

volumes:
open-webui:

์ด ์˜ˆ์ œ์—์„œ Watchtower๋Š” docker-compose.yml ํŒŒ์ผ์— ํ†ตํ•ฉ๋˜์–ด Open WebUI ์ปจํ…Œ์ด๋„ˆ๋ฅผ 5๋ถ„๋งˆ๋‹ค ์—…๋ฐ์ดํŠธ๊ฐ€ ์žˆ๋Š”์ง€ ๊ฐ์‹œํ•ฉ๋‹ˆ๋‹ค.

Docker Volumes์— ์ €์žฅ๋˜๋Š” ์ง€์†์  ๋ฐ์ดํ„ฐโ€‹

open-webui๋ผ๋Š” Docker ๋ณผ๋ฅจ์— ๋ฐ์ดํ„ฐ๊ฐ€ ์ €์žฅ๋ฉ๋‹ˆ๋‹ค. ๋ณผ๋ฅจ ๊ฒฝ๋กœ๋Š” ์ง์ ‘ ์ ‘๊ทผํ•  ์ˆ˜ ์—†์ง€๋งŒ ์•„๋ž˜ ๋ช…๋ น์–ด๋กœ ๋ณผ๋ฅจ์„ ํ™•์ธํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค:

docker volume inspect open-webui

์ด ๋ช…๋ น์€ ๋ณผ๋ฅจ์˜ ์„ธ๋ถ€ ์ •๋ณด๋ฅผ ๋ณด์—ฌ์ฃผ๋ฉฐ, ๋งˆ์šดํŠธ ์ง€์ ์€ ์ผ๋ฐ˜์ ์œผ๋กœ /var/lib/docker/volumes/open-webui/_data์— ์œ„์น˜ํ•ฉ๋‹ˆ๋‹ค.

Windows 10 + WSL 2์—์„œ๋Š” Docker ๋ณผ๋ฅจ์ด ๋‹ค์Œ ์œ„์น˜์— ์žˆ์Šต๋‹ˆ๋‹ค (Windows ํŒŒ์ผ ํƒ์ƒ‰๊ธฐ์—์„œ ์ž…๋ ฅ):

  • \\wsl$\docker-desktop\mnt\docker-desktop-disk\data\docker\volumes

Docker์˜ ์ด์ „ ๋ฒ„์ „(26.1.4 ์ด์ „ ๋ฒ„์ „)์„ ์‚ฌ์šฉํ•˜๋Š” ๊ฒฝ์šฐ:

  • \\wsl$\docker-desktop-data\data\docker\volumes
  • \\wsl$\docker-desktop-data\version-pack-data\community\docker\volumes

(Windows ๋‹ต๋ณ€ ์ถœ์ฒ˜: StackOverflow ์‚ฌ์šฉ์ž sarye-haddadi; ์›๋ณธ SO ๊ฒŒ์‹œ๋ฌผ ๋งํฌ)