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

Open WebUI

Open WebUI๋Š” ํ™•์žฅ์„ฑ์ด ๋›ฐ์–ด๋‚˜๊ณ , ๋‹ค์–‘ํ•œ ๊ธฐ๋Šฅ์„ ๊ฐ–์ถ”์—ˆ์œผ๋ฉฐ, ์‚ฌ์šฉ์ž ์นœํ™”์ ์ธ ์ž๊ฐ€ ํ˜ธ์ŠคํŒ… AI ํ”Œ๋žซํผ์œผ๋กœ, ์™„์ „ํžˆ ์˜คํ”„๋ผ์ธ์—์„œ ์ž‘๋™ํ•˜๋„๋ก ์„ค๊ณ„๋˜์—ˆ์Šต๋‹ˆ๋‹ค. Ollama ๋ฐ OpenAI ํ˜ธํ™˜ API์™€ ๊ฐ™์€ ์—ฌ๋Ÿฌ LLM ์‹คํ–‰๊ธฐ๋ฅผ ์ง€์›ํ•˜๋ฉฐ, RAG๋ฅผ ์œ„ํ•œ ๋‚ด์žฅ ์ถ”๋ก  ์—”์ง„์„ ํฌํ•จํ•˜์—ฌ ๊ฐ•๋ ฅํ•œ AI ๋ฐฐํฌ ์†”๋ฃจ์…˜์ž…๋‹ˆ๋‹ค.

GitHub stars GitHub forks GitHub watchers GitHub repo size GitHub language count GitHub top language GitHub last commit Hits Discord

Open WebUI Demo

ํŒ

์—”ํ„ฐํ”„๋ผ์ด์ฆˆ ํ”Œ๋žœ์„ ์ฐพ๊ณ  ๊ณ„์‹ญ๋‹ˆ๊นŒ? โ€“ ์˜ค๋Š˜ ์˜์—…ํŒ€๊ณผ ์ƒ๋‹ดํ•ด๋ณด์„ธ์š”!

๋งž์ถค ํ…Œ๋งˆ ๋ฐ ๋ธŒ๋žœ๋”ฉ, ์„œ๋น„์Šค ์ˆ˜์ค€ ํ˜‘์•ฝ(SLA) ์ง€์›, ์žฅ๊ธฐ ์ง€์›(LTS) ๋ฒ„์ „ ๋“ฑ์˜ ํ–ฅ์ƒ๋œ ๊ธฐ๋Šฅ์„ ์ด์šฉํ•˜์‹ค ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค!

Sponsored by n8n
n8n
Does your interface have a backend yet? Try n8n

Docker๋กœ ๋น ๋ฅด๊ฒŒ ์‹œ์ž‘ํ•˜๊ธฐ ๐Ÿณโ€‹

์ •๋ณด

WebSocket ์ง€์›์€ Open WebUI๊ฐ€ ์˜ฌ๋ฐ”๋ฅด๊ฒŒ ์ž‘๋™ํ•˜๊ธฐ ์œ„ํ•œ ํ•„์ˆ˜ ์กฐ๊ฑด์ž…๋‹ˆ๋‹ค. ๋„คํŠธ์›Œํฌ ์„ค์ •์—์„œ WebSocket ์—ฐ๊ฒฐ์„ ํ—ˆ์šฉํ•ด์•ผ ํ•ฉ๋‹ˆ๋‹ค.

Ollama๊ฐ€ ์ปดํ“จํ„ฐ์— ์„ค์น˜๋˜์–ด ์žˆ๋Š” ๊ฒฝ์šฐ, ๋‹ค์Œ ๋ช…๋ น์„ ์‚ฌ์šฉํ•˜์„ธ์š”:

docker run -d -p 3000:8080 --add-host=host.docker.internal:host-gateway -v open-webui:/app/backend/data --name open-webui --restart always ghcr.io/open-webui/open-webui:main

Nvidia GPU ์ง€์›๊ณผ ํ•จ๊ป˜ Open WebUI๋ฅผ ์‹คํ–‰ํ•˜๋ ค๋ฉด, ๋‹ค์Œ ๋ช…๋ น์„ ์‚ฌ์šฉํ•˜์„ธ์š”:

docker run -d -p 3000:8080 --gpus all --add-host=host.docker.internal:host-gateway -v open-webui:/app/backend/data --name open-webui --restart always ghcr.io/open-webui/open-webui:cuda

Ollama์™€ ํ•จ๊ป˜ ๋ฒˆ๋“ค๋œ Open WebUIโ€‹

์ด ์„ค์น˜ ๋ฐฉ๋ฒ•์€ Ollama์™€ Open WebUI๋ฅผ ํ•จ๊ป˜ ๋ฒˆ๋“คํ•œ ๋‹จ์ผ ์ปจํ…Œ์ด๋„ˆ ์ด๋ฏธ์ง€๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ ๋‹จ์ผ ์ปค๋งจ๋“œ๋ฅผ ํ†ตํ•ด ๊ฐ„๋‹จํ•˜๊ฒŒ ์„ค์ •ํ•  ์ˆ˜ ์žˆ๋„๋ก ํ•ด์ค๋‹ˆ๋‹ค. ํ•˜๋“œ์›จ์–ด ์„ค์ •์— ๋”ฐ๋ผ ์ ์ ˆํ•œ ๋ช…๋ น์„ ์„ ํƒํ•˜์„ธ์š”:

  • GPU ์ง€์› ํฌํ•จ: GPU ๋ฆฌ์†Œ์Šค๋ฅผ ํ™œ์šฉํ•˜๋ ค๋ฉด ๋‹ค์Œ ๋ช…๋ น์„ ์‹คํ–‰ํ•˜์„ธ์š”:

    docker run -d -p 3000:8080 --gpus=all -v ollama:/root/.ollama -v open-webui:/app/backend/data --name open-webui --restart always ghcr.io/open-webui/open-webui:ollama
  • CPU ์ „์šฉ: GPU๋ฅผ ์‚ฌ์šฉํ•˜์ง€ ์•Š๋Š” ๊ฒฝ์šฐ, ๋Œ€์‹  ์ด ๋ช…๋ น์„ ์‚ฌ์šฉํ•˜์„ธ์š”:

    docker run -d -p 3000:8080 -v ollama:/root/.ollama -v open-webui:/app/backend/data --name open-webui --restart always ghcr.io/open-webui/open-webui:ollama

๋‘ ๋ช…๋ น ๋ชจ๋‘ Open WebUI์™€ Ollama๋ฅผ ๊ฐ„๋‹จํ•˜๊ณ  ๋ฒˆ๊ฑฐ๋กญ์ง€ ์•Š์€ ์„ค์น˜ ๊ณผ์ •์œผ๋กœ ์„ค์ •ํ•˜์—ฌ ์‹ ์†ํ•˜๊ฒŒ ๋ชจ๋“  ๊ฒƒ์„ ์‹คํ–‰ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

์„ค์น˜ ํ›„ http://localhost:3000์—์„œ Open WebUI๋ฅผ ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ์ฆ๊ธฐ์„ธ์š”! ๐Ÿ˜„

Dev ๋ธŒ๋žœ์น˜๋ฅผ ์‚ฌ์šฉํ•˜๊ธฐ ๐ŸŒ™โ€‹

๊ฒฝ๊ณ 

:dev ๋ธŒ๋žœ์น˜๋Š” ์ตœ์‹  ๋ถˆ์•ˆ์ •ํ•œ ๊ธฐ๋Šฅ๊ณผ ๋ณ€๊ฒฝ ์‚ฌํ•ญ์ด ํฌํ•จ๋˜์–ด ์žˆ์Šต๋‹ˆ๋‹ค. ์˜ค๋ฅ˜๊ฐ€ ์žˆ๊ฑฐ๋‚˜ ๊ธฐ๋Šฅ์ด ์™„์„ฑ๋˜์ง€ ์•Š์€ ์ƒํƒœ์ผ ์ˆ˜ ์žˆ์œผ๋ฏ€๋กœ ์‚ฌ์šฉ์— ์ฃผ์˜ํ•˜์„ธ์š”.

์ตœ์‹  ์ฒจ๋‹จ ๊ธฐ๋Šฅ์„ ์‹œ๋„ํ•ด๋ณด๊ณ  ์‹ถ์œผ๋ฉฐ, ๊ฐ€๋” ๋ถˆ์•ˆ์ •ํ•จ์„ ๊ฐ์ˆ˜ํ•  ์ˆ˜ ์žˆ๋‹ค๋ฉด, :dev ํƒœ๊ทธ๋ฅผ ๋‹ค์Œ๊ณผ ๊ฐ™์ด ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค:

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

Open WebUI ์—…๋ฐ์ดํŠธํ•˜๊ธฐโ€‹

Open WebUI ์ปจํ…Œ์ด๋„ˆ๋ฅผ ์‰ฝ๊ฒŒ ์—…๋ฐ์ดํŠธํ•˜๋ ค๋ฉด ๋‹ค์Œ ๋‹จ๊ณ„๋ฅผ ๋”ฐ๋ฅด์„ธ์š”:

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

Watchtower๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ Docker ์ปจํ…Œ์ด๋„ˆ๋ฅผ ์ˆ˜๋™์œผ๋กœ ์—…๋ฐ์ดํŠธํ•˜์„ธ์š”:

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

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

์ปจํ…Œ์ด๋„ˆ๋ฅผ 5๋ถ„๋งˆ๋‹ค ์ž๋™์œผ๋กœ ์—…๋ฐ์ดํŠธํ•˜์„ธ์š”:

docker run -d --name watchtower --restart unless-stopped -v /var/run/docker.sock:/var/run/docker.sock containrrr/watchtower --interval 300 open-webui

๐Ÿ”ง ์ฐธ๊ณ : ์ปจํ…Œ์ด๋„ˆ ์ด๋ฆ„์ด ๋‹ค๋ฅผ ๊ฒฝ์šฐ open-webui๋ฅผ ํ•ด๋‹น ์ด๋ฆ„์œผ๋กœ ๋ฐ”๊พธ์„ธ์š”.

์ˆ˜๋™ ์„ค์น˜โ€‹

Open WebUI๋ฅผ ์„ค์น˜ํ•˜๊ณ  ์‹คํ–‰ํ•˜๋Š” ๋ฐฉ๋ฒ•์€ uv ๋Ÿฐํƒ€์ž„ ๊ด€๋ฆฌ์ž๋ฅผ ์‚ฌ์šฉํ•˜๋Š” ๋ฐฉ๋ฒ•๊ณผ Python์˜ pip์„ ์‚ฌ์šฉํ•˜๋Š” ๋ฐฉ๋ฒ• ๋‘ ๊ฐ€์ง€๊ฐ€ ์žˆ์Šต๋‹ˆ๋‹ค. ๋‘ ๋ฐฉ๋ฒ• ๋ชจ๋‘ ํšจ๊ณผ์ ์ด์ง€๋งŒ, uv ์‚ฌ์šฉ์„ ๊ฐ•๋ ฅํžˆ ๊ถŒ์žฅํ•ฉ๋‹ˆ๋‹ค. ์ด๋Š” ํ™˜๊ฒฝ ๊ด€๋ฆฌ๋ฅผ ๊ฐ„์†Œํ™”ํ•˜๊ณ  ์ž ์žฌ์  ์ถฉ๋Œ์„ ์ตœ์†Œํ™”ํ•˜๊ธฐ ๋•Œ๋ฌธ์ž…๋‹ˆ๋‹ค.

uv๋ฅผ ์‚ฌ์šฉํ•œ ์„ค์น˜ (๊ถŒ์žฅ)โ€‹

uv ๋Ÿฐํƒ€์ž„ ๊ด€๋ฆฌ์ž๋Š” Open WebUI์™€ ๊ฐ™์€ ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜์„ ์œ„ํ•œ Python ํ™˜๊ฒฝ ๊ด€๋ฆฌ๊ฐ€ ์›ํ™œํ•˜๊ฒŒ ์ด๋ฃจ์–ด์ง€๋„๋ก ํ•ฉ๋‹ˆ๋‹ค. ๋‹ค์Œ ๋‹จ๊ณ„๋ฅผ ํ†ตํ•ด ์‹œ์ž‘ํ•˜์‹ญ์‹œ์˜ค:

1. uv ์„ค์น˜โ€‹

์šด์˜ ์ฒด์ œ์— ์ ํ•ฉํ•œ ์„ค์น˜ ๋ช…๋ น์„ ์„ ํƒํ•˜์‹ญ์‹œ์˜ค:

  • macOS/Linux:

    curl -LsSf https://astral.sh/uv/install.sh | sh
  • Windows:

    powershell -ExecutionPolicy ByPass -c "irm https://astral.sh/uv/install.ps1 | iex"

2. Open WebUI ์‹คํ–‰โ€‹

uv๊ฐ€ ์„ค์น˜๋˜๋ฉด Open WebUI ์‹คํ–‰์ด ๊ฐ„ํŽธํ•ฉ๋‹ˆ๋‹ค. ์•„๋ž˜ ๋ช…๋ น์„ ์‚ฌ์šฉํ•˜๋ฉฐ, ๋ฐ์ดํ„ฐ ์†์‹ค์„ ๋ฐฉ์ง€ํ•˜๊ธฐ ์œ„ํ•ด DATA_DIR ํ™˜๊ฒฝ๋ณ€์ˆ˜๋ฅผ ์„ค์ •ํ•ด์•ผ ํ•ฉ๋‹ˆ๋‹ค. ๊ฐ ํ”Œ๋žซํผ์— ๋Œ€ํ•œ ์˜ˆ์ œ ๊ฒฝ๋กœ๊ฐ€ ์ œ๊ณต๋ฉ๋‹ˆ๋‹ค:

  • macOS/Linux:

    DATA_DIR=~/.open-webui uvx --python 3.11 open-webui@latest serve
  • Windows:

    $env:DATA_DIR="C:\open-webui\data"; uvx --python 3.11 open-webui@latest serve

pip๋ฅผ ์‚ฌ์šฉํ•œ ์„ค์น˜โ€‹

Python์˜ ํŒจํ‚ค์ง€ ๊ด€๋ฆฌ์ž pip์„ ์‚ฌ์šฉํ•˜์—ฌ Open WebUI๋ฅผ ์„ค์น˜ํ•˜๋Š” ์‚ฌ์šฉ์ž์—๊ฒŒ๋Š” uv๋‚˜ conda์™€ ๊ฐ™์€ Python ๋Ÿฐํƒ€์ž„ ๊ด€๋ฆฌ์ž๋ฅผ ์‚ฌ์šฉํ•˜๋Š” ๊ฒƒ์„ ๊ฐ•๋ ฅํžˆ ๊ถŒ์žฅํ•ฉ๋‹ˆ๋‹ค. ์ด๋Ÿฌํ•œ ๋„๊ตฌ๋Š” Python ํ™˜๊ฒฝ์„ ํšจ๊ณผ์ ์œผ๋กœ ๊ด€๋ฆฌํ•˜๊ณ  ์ถฉ๋Œ์„ ๋ฐฉ์ง€ํ•ฉ๋‹ˆ๋‹ค.

Python 3.11์€ ๊ฐœ๋ฐœ ํ™˜๊ฒฝ์ž…๋‹ˆ๋‹ค. Python 3.12๋Š” ์ž‘๋™ํ•˜๋Š” ๊ฒƒ์œผ๋กœ ๋ณด์ด์ง€๋งŒ ์ฒ ์ €ํžˆ ํ…Œ์ŠคํŠธ๋˜์ง€ ์•Š์•˜์Šต๋‹ˆ๋‹ค. Python 3.13์€ ์ „ํ˜€ ํ…Œ์ŠคํŠธ๋˜์ง€ ์•Š์•˜์œผ๋‹ˆ ์‚ฌ์šฉ์ž ์ฑ…์ž„ ํ•˜์— ์‚ฌ์šฉํ•˜์‹ญ์‹œ์˜ค.

  1. Open WebUI ์„ค์น˜:

    ํ„ฐ๋ฏธ๋„์„ ์—ด๊ณ  ๋‹ค์Œ ๋ช…๋ น์„ ์‹คํ–‰ํ•˜์‹ญ์‹œ์˜ค:

    pip install open-webui
  2. Open WebUI ์‹œ์ž‘:

    ์„ค์น˜ ์™„๋ฃŒ ํ›„ ์„œ๋ฒ„๋ฅผ ์‹œ์ž‘ํ•˜๋ ค๋ฉด ๋‹ค์Œ์„ ์‹คํ–‰ํ•˜์‹ญ์‹œ์˜ค:

    open-webui serve

Open WebUI ์—…๋ฐ์ดํŠธโ€‹

์ตœ์‹  ๋ฒ„์ „์œผ๋กœ ์—…๋ฐ์ดํŠธํ•˜๋ ค๋ฉด ๊ฐ„๋‹จํžˆ ๋‹ค์Œ์„ ์‹คํ–‰ํ•˜์‹ญ์‹œ์˜ค:

pip install --upgrade open-webui

์ด ๋ฐฉ๋ฒ•์€ ํ•„์ˆ˜ ์ข…์†์„ฑ์„ ๋ชจ๋‘ ์„ค์น˜ํ•˜๊ณ  Open WebUI๋ฅผ ์‹œ์ž‘ํ•˜์—ฌ ๊ฐ„๋‹จํ•˜๊ณ  ํšจ์œจ์ ์ธ ์„ค์ •์„ ์ œ๊ณตํ•ฉ๋‹ˆ๋‹ค. ์„ค์น˜ ํ›„, http://localhost:8080์—์„œ Open WebUI์— ์•ก์„ธ์Šคํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ์ฆ๊ธฐ์„ธ์š”! ๐Ÿ˜„

๊ธฐํƒ€ ์„ค์น˜ ๋ฐฉ๋ฒ•โ€‹

Docker๋ฅผ ์‚ฌ์šฉํ•˜์ง€ ์•Š๋Š” ๊ธฐ๋ณธ ์„ค์น˜ ๋ฐฉ๋ฒ•, Docker Compose, Kustomize ๋ฐ Helm์„ ํฌํ•จํ•œ ๋‹ค์–‘ํ•œ ์„ค์น˜ ์˜ต์…˜์„ ์ œ๊ณตํ•ฉ๋‹ˆ๋‹ค. ์ž์„ธํ•œ ๊ฐ€์ด๋“œ๋Š” Open WebUI Documentation ๋˜๋Š” Discord ์ปค๋ฎค๋‹ˆํ‹ฐ๋ฅผ ๋ฐฉ๋ฌธํ•˜์‹ญ์‹œ์˜ค.

์ „์ฒด ์‹œ์ž‘ ๊ฐ€์ด๋“œ๋ฅผ ๊ณ„์† ์ง„ํ–‰ํ•˜์‹ญ์‹œ์˜ค.

ํ›„์›์ž ๐Ÿ™Œโ€‹

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

๊ฐ์‚ฌ ์ธ์‚ฌ ๐Ÿ™โ€‹

๋‹ค์Œ ๊ธฐ๊ด€์œผ๋กœ๋ถ€ํ„ฐ ๋ฐ›์€ ๊ด€๋Œ€ํ•œ ์ง€์›์— ๋Œ€ํ•ด ๊นŠ์ด ๊ฐ์‚ฌ๋“œ๋ฆฝ๋‹ˆ๋‹ค:

MozillaMozilla Builders 2024

GitHubGitHub Accelerator 2024