Open WebUI
Open WebUI๋ ํ์ฅ์ฑ์ด ๋ฐ์ด๋๊ณ , ๋ค์ํ ๊ธฐ๋ฅ์ ๊ฐ์ถ์์ผ๋ฉฐ, ์ฌ์ฉ์ ์นํ์ ์ธ ์๊ฐ ํธ์คํ AI ํ๋ซํผ์ผ๋ก, ์์ ํ ์คํ๋ผ์ธ์์ ์๋ํ๋๋ก ์ค๊ณ๋์์ต๋๋ค. Ollama ๋ฐ OpenAI ํธํ API์ ๊ฐ์ ์ฌ๋ฌ LLM ์คํ๊ธฐ๋ฅผ ์ง์ํ๋ฉฐ, RAG๋ฅผ ์ํ ๋ด์ฅ ์ถ๋ก ์์ง์ ํฌํจํ์ฌ ๊ฐ๋ ฅํ AI ๋ฐฐํฌ ์๋ฃจ์ ์ ๋๋ค.
์ํฐํ๋ผ์ด์ฆ ํ๋์ ์ฐพ๊ณ ๊ณ์ญ๋๊น? โ ์ค๋ ์์ ํ๊ณผ ์๋ดํด๋ณด์ธ์!
๋ง์ถค ํ ๋ง ๋ฐ ๋ธ๋๋ฉ, ์๋น์ค ์์ค ํ์ฝ(SLA) ์ง์, ์ฅ๊ธฐ ์ง์(LTS) ๋ฒ์ ๋ฑ์ ํฅ์๋ ๊ธฐ๋ฅ์ ์ด์ฉํ์ค ์ ์์ต๋๋ค!
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์ ์ ํ ํ ์คํธ๋์ง ์์์ผ๋ ์ฌ์ฉ์ ์ฑ ์ ํ์ ์ฌ์ฉํ์ญ์์ค.
-
Open WebUI ์ค์น:
ํฐ๋ฏธ๋์ ์ด๊ณ ๋ค์ ๋ช ๋ น์ ์คํํ์ญ์์ค:
pip install open-webui
-
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 ์ปค๋ฎค๋ํฐ๋ฅผ ๋ฐฉ๋ฌธํ์ญ์์ค.
์ ์ฒด ์์ ๊ฐ์ด๋๋ฅผ ๊ณ์ ์งํํ์ญ์์ค.
ํ์์ ๐โ
์ฐ๋ฆฌ๋ ํ์์๋ค์ ๊ด๋ํ ์ง์์ ๋ํด ๋๋จํ ๊ฐ์ฌ๋๋ฆฝ๋๋ค. ๊ทธ๋ค์ ๊ธฐ์ฌ๋ ์ฐ๋ฆฌ์ ํ๋ก์ ํธ๋ฅผ ์ ์งํ๊ณ ๊ฐ์ ํ ์ ์๊ฒ ๋์์ฃผ๋ฉฐ, ์ปค๋ฎค๋ํฐ๋ฅผ ์ํ ์์ง์ ์์ ์ ์ง์์ ์ผ๋ก ์ ๊ณตํ ์ ์๋๋ก ๋ณด์ฅํฉ๋๋ค. ๊ฐ์ฌํฉ๋๋ค!
๊ฐ์ฌ ์ธ์ฌ ๐โ
๋ค์ ๊ธฐ๊ด์ผ๋ก๋ถํฐ ๋ฐ์ ๊ด๋ํ ์ง์์ ๋ํด ๊น์ด ๊ฐ์ฌ๋๋ฆฝ๋๋ค: