์ด ๋ฌธ์๋ Dify์ OpenWebUI๋ฅผ Docker ๋ฐ Ollama๋ฅผ ํ์ฉํ์ฌ ์ค์นํ๋ ๋ฐฉ๋ฒ์ ๋จ๊ณ๋ณ๋ก ์๋ดํฉ๋๋ค. ๋ํ Git์ ์ด์ฉํด ํ๋ก์ ํธ ํ์ผ์ ๋ค์ด๋ก๋ํ๊ณ ํ๊ฒฝ์ ์ค์ ํ๋ ๋ฐฉ๋ฒ, ๊ทธ๋ฆฌ๊ณ ์ปจํ ์ด๋ ์คํ ๋ฐ API ์ฐ๊ฒฐ ์ค์ ๋ฑ ์ ์ฒด ์ํฌํ๋ก์ฐ ๊ตฌ์ฑ์ ๊ดํ ๋ด์ฉ์ ๋ค๋ฃน๋๋ค.
๐ UBUNTU ์ค์น ๊ฐ์ด๋๋ ์ฌ๊ธฐ ๋ฌธ์๋ฅผ ์ฐธ๊ณ ํด ์ฃผ์ธ์.
- Docker Desktop ์ค์น
- Ollama ๋ค์ด๋ก๋ ๋ฐ ์ค์น
- Git ๋ค์ด๋ก๋ ๋ฐ ์ค์น
- Git์ผ๋ก ํ๋ก์ ํธ ๋ค์ด๋ก๋
- ํ๋ก์ ํธ ํ์ผ ์ด๊ธฐ
- .env ์ค์
- Docker ์ปจํ ์ด๋ ์คํ
- ์ปจํ ์ด๋ ์ค์ง
- ํฌํธ(Port) ์ค์
- OpenWebUI ์ค์
- ๊ด๋ฆฌ์ ํจ๋ ๋ฐ API ์ฐ๊ฒฐ ์ค์
- ๋ชจ๋ธ ํ์ฑํ ๋ฐ ์ฑํ ์ค์
- Dify ์ ์ ๋ฐ ์ํฌํ๋ก์ฐ ๊ตฌ์ฑ
- Ollama ๋ชจ๋ธ ์ถ๊ฐ ์์
Docker Desktop์ ์ปจํ ์ด๋ ๊ธฐ๋ฐ ์ ํ๋ฆฌ์ผ์ด์ ์คํ์ ์ํ ํ์ ํ๋ซํผ์ ๋๋ค.
- ๋ค์ด๋ก๋ ๋งํฌ: https://www.docker.com/get-started/
- ์ค์น ํ Docker Desktop์ dashboard๋ฅผ ์คํํ์ฌ ์ ์ ์ค์น ์ฌ๋ถ๋ฅผ ํ์ธํฉ๋๋ค.
๐ก Mac ์ฌ์ฉ์ ํ: ์๋จ์ Docker ์์ด์ฝ์ ํด๋ฆญ ํ "Go to Dashboard"๋ฅผ ์ ํํฉ๋๋ค.
๐ ์ฐธ๊ณ ์ฌํญ: Docker Desktop์ด ์ ์์ ์ผ๋ก ์คํ๋์ง ์์ผ๋ฉด ์์คํ ์ ์ฌ๋ถํ ํ ํ ๋ค์ ์๋ํด๋ณด์ธ์.
Ollama๋ ๋ก์ปฌ์์ ๋๊ท๋ชจ ์ธ์ด ๋ชจ๋ธ(LLM)์ ์คํํ ์ ์๊ฒ ํด์ฃผ๋ ํ๋ซํผ์ ๋๋ค.
-
ํฐ๋ฏธ๋์ ์ด๊ณ , ๋ค์ ๋ช ๋ น์ด๋ก ์ค์น๋ ๋ชจ๋ธ ๋ฆฌ์คํธ๋ฅผ ํ์ธํฉ๋๋ค.
ollama list
โ ์์๋์ธ์: ์ต์ด ์ค์น ์ ๋ฆฌ์คํธ๊ฐ ๋น์ด์๋ค๋ฉด ์ ์์ ๋๋ค.
-
bge-m3์๋ฒ ๋ฉ ๋ชจ๋ธ ๋ค์ด๋ก๋:ollama pull bge-m3
๐ ๋ชจ๋ธ ์ ๋ณด:
bge-m3๋ ๋ค๊ตญ์ด๋ฅผ ์ง์ํ๋ ๊ณ ์ฑ๋ฅ ์๋ฒ ๋ฉ ๋ชจ๋ธ๋ก, ๋ฌธ์ ๊ฒ์๊ณผ ์ ์ฌ๋ ๊ณ์ฐ์ ํ์ํฉ๋๋ค.
-
dnotitia/dna๋ชจ๋ธ ๋ค์ด๋ก๋:ollama pull dnotitia/dna
๐ ๋ชจ๋ธ ํฌ๊ธฐ: ์ฝ 4.7GB์ ๊ณต๊ฐ์ด ํ์ํฉ๋๋ค. ์ถฉ๋ถํ ์ ์ฅ ๊ณต๊ฐ์ ํ๋ณดํด์ฃผ์ธ์.
-
๋ชจ๋ธ ์คํ ์ํ ํ์ธ (์ด๋ฏธ ์คํ ์ค์ด๋ฉด ์ด ๋จ๊ณ๋ฅผ ๊ฑด๋๋ฐ์ธ์):
ollama run dnotitia/dna
์คํ ํ
/bye์ ๋ ฅํ์ฌ ์ข ๋ฃํฉ๋๋ค.
๐ ๋์๋ง: ๋ค๋ฅธ ๋ชจ๋ธ์ ์ฌ์ฉํ๊ณ ์ถ๋ค๋ฉด Ollama ๋ชจ๋ธ ๋ผ์ด๋ธ๋ฌ๋ฆฌ์์ ๊ฒ์ํด๋ณด์ธ์.
Git์ ๋ฒ์ ๊ด๋ฆฌ ์์คํ ์ผ๋ก, ํ๋ก์ ํธ ํ์ผ์ ๋ค์ด๋ก๋ํ๊ณ ๊ด๋ฆฌํ๋ ๋ฐ ์ฌ์ฉ๋ฉ๋๋ค.
- ์ฐธ๊ณ ์์:
https://youtu.be/mVu6Wj8Z7C0?si=Fh1Eu6j9q9IcXnaE&t=1311 - Brew๋ฅผ ํตํ ์ค์น ์ฐธ๊ณ :
https://teddynote.com/10-RAG%EB%B9%84%EB%B2%95%EB%85%B8%ED%8A%B8/%ED%99%98%EA%B2%BD%20%EC%84%A4%EC%A0%95%20(Mac)/
๐ป ๋น ๋ฅธ ์ค์น (Mac):
brew install git
- ์ฐธ๊ณ ์์:
https://youtu.be/mVu6Wj8Z7C0?si=Wr-CUNF0D8XY12yM&t=585 - ์ค์น ๋งค๋ด์ผ:
https://teddynote.com/10-RAG%EB%B9%84%EB%B2%95%EB%85%B8%ED%8A%B8/%ED%99%98%EA%B2%BD%20%EC%84%A4%EC%A0%95%20(Windows)/
โ ๏ธ Windows ์ฌ์ฉ์ ์ฃผ์์ฌํญ: Git ์ค์น ์ "Git Bash Here" ์ต์ ์ ๊ผญ ์ ํํ์ธ์.
-
ํฐ๋ฏธ๋(Windows ์ฌ์ฉ์๋ PowerShell)์์ ๋ค์ด๋ก๋ ๊ฒฝ๋ก๋ก ์ด๋ํฉ๋๋ค.
# ์์: ๋ํ๋จผํธ ํด๋๋ก ์ด๋ํ ๊ฒฝ์ฐ cd ~/Documents
๐ก Windows ์ฌ์ฉ์:
cd C:\Users\%USERNAME%\Documents
-
๋ค์ ๋ช ๋ น์ด๋ฅผ ์คํํ์ฌ ํ๋ก์ ํธ ํ์ผ์ ํด๋ก ํฉ๋๋ค.
git clone https://github.com/teddylee777/dify-openwebui.git
-
docker ํด๋๋ก ์ด๋:
cd dify-openwebui/docker
๐ฏ ์ฑ๊ณต ํ์ธ:
ls(Mac/Linux) ๋๋dir(Windows) ๋ช ๋ น์ด๋ก ํ์ผ ๋ชฉ๋ก์ ํ์ธํ์ธ์.
ํ๋ก์ ํธ ํด๋๋ฅผ Cursor ๋๋ VS Code ๋ฑ์์ ์ด์ด ์์ ํฉ๋๋ค.
๐ ๏ธ ์ถ์ฒ ์๋ํฐ:
dockerํด๋ ๋ด๋ถ์.env.teddynoteํ์ผ์.env๋ก ์ด๋ฆ ๋ณ๊ฒฝํฉ๋๋ค..envํ์ผ์ ํ๋จ์ ๋ฐ์ดํฐ ์ ์ฅ ๊ฒฝ๋ก๋ฅผ ์ง์ ํฉ๋๋ค.
๐ ๊ฒฝ๋ก ์ค์ ์์
Mac/Linux:
OPENWEBUI_LOCAL_DATA=/Users/teddy/Dev/openwebui-dify/openwebui
PIPELINES_LOCAL_DATA=/Users/teddy/Dev/openwebui-dify/pipelinesWindows:
OPENWEBUI_LOCAL_DATA=C:/Users/teddy/Dev/openwebui-dify/openwebui
PIPELINES_LOCAL_DATA=C:/Users/teddy/Dev/openwebui-dify/pipelines
โ ๏ธ ์ค์: ์ค์ ํ ๊ฒฝ๋ก์ ํด๋น ํด๋๊ฐ ์์ผ๋ฉด ๋ฏธ๋ฆฌ ์์ฑํด์ฃผ์ธ์!
-
ํฐ๋ฏธ๋์์
dockerํด๋๋ก ์ด๋ํฉ๋๋ค.cd dify-openwebui/docker -
docker-compose-teddynote.yamlํ์ผ์ ์ด์ฉํด ์ปจํ ์ด๋ ์คํ:-
๋ฐฉ๋ฒ 1 (Docker Compose V2 - ๊ถ์ฅ):
docker compose -f docker-compose-teddynote.yaml up -d
-
๋ฐฉ๋ฒ 2 (Docker Compose V1):
docker-compose -f docker-compose-teddynote.yaml up -d
-
๐ ์ฒซ ์คํ ์๊ฐ: ์ด๋ฏธ์ง ๋ค์ด๋ก๋๋ก ์ธํด 5-10๋ถ ์ ๋ ์์๋ ์ ์์ต๋๋ค.
๐ ๋ก๊ทธ ํ์ธ: ์คํ ์ค ๋ฌธ์ ๊ฐ ์๊ธฐ๋ฉด
-d์ต์ ์ ์ ๊ฑฐํ๊ณ ์คํํ์ฌ ๋ก๊ทธ๋ฅผ ํ์ธํ์ธ์.
๋ชจ๋ ์ปจํ ์ด๋๋ฅผ ์ค์ง ๋ฐ ์ญ์ ํ๋ ค๋ฉด:
docker stop $(docker ps -q) && docker rm $(docker ps -aq)๋๋ Docker Desktop์ "Containers" ๋ฉ๋ด์์:
- ์ ์ฒด ์ ํ
- "Delete" ํด๋ฆญ
๐พ ๋ฐ์ดํฐ ๋ณด์กด: ์ปจํ ์ด๋๋ฅผ ์ญ์ ํด๋ ๋ณผ๋ฅจ์ ์ ์ฅ๋ ๋ฐ์ดํฐ๋ ์ ์ง๋ฉ๋๋ค.
์ค์ ๋ ํฌํธ๋ ๋ค์๊ณผ ๊ฐ์ต๋๋ค:
| ์๋น์ค | ํฌํธ | ์ค๋ช |
|---|---|---|
| Dify API | 80 | Dify ๋ฉ์ธ ์๋น์ค |
| OpenWebUI | 3001 | ์น UI ์ธํฐํ์ด์ค |
| Ollama | 11434 | LLM ๋ชจ๋ธ API |
| Pipeline | 9099 | OpenWebUI Pipeline |
๐ ์ธ๋ถ ์ ์ ์ค์ : ์ธ๋ถ์์ ์ ์ํ๋ ค๋ฉด ๋ฐฉํ๋ฒฝ๊ณผ ํฌํธํฌ์๋ฉ ์ค์ ์ ํ์ธํ์ธ์.
โก ํฌํธ ์ถฉ๋ ํด๊ฒฐ: ์ด๋ฏธ ์ฌ์ฉ ์ค์ธ ํฌํธ๊ฐ ์๋ค๋ฉด
.envํ์ผ์์ ํฌํธ ๋ฒํธ๋ฅผ ๋ณ๊ฒฝํ ์ ์์ต๋๋ค.
-
์น ๋ธ๋ผ์ฐ์ ์์ OpenWebUI ์ ์:
์ฃผ์: http://localhost:3001/
-
์ ๊ณ์ ์ ์์ฑ ํ ๋ก๊ทธ์ธํฉ๋๋ค.
๐ค ์ฒซ ๋ฒ์งธ ๊ณ์ : ์ต์ด๋ก ์์ฑํ๋ ๊ณ์ ์ด ์๋์ผ๋ก ๊ด๋ฆฌ์ ๊ถํ์ ๊ฐ์ต๋๋ค.
-
๊ด๋ฆฌ์ ํจ๋ ์ ์:
- ํ๋กํ > ๊ด๋ฆฌ์ ํจ๋ > ์ค์ > ์ฐ๊ฒฐ
-
"OpenAI API ์ฐ๊ฒฐ" ์์ญ์ ํ ๊ธ ๋ฒํผ์ ํ์ฑํํฉ๋๋ค.
-
์ฐ์ธก ํฑ๋๋ฐํด ์์ด์ฝ์ ํด๋ฆญํ์ฌ API ํค๋ฅผ ์ ๋ ฅํ๊ณ ์ ์ฅํฉ๋๋ค.
๐ API ํค ๋ฐ๊ธ: OpenAI Platform์์ API ํค๋ฅผ ๋ฐ๊ธ๋ฐ์ ์ ์์ต๋๋ค.
-
๊ด๋ฆฌ์ ํจ๋์ ์ฐ๊ฒฐ ๋ฉ๋ด์์ "OpenAI API ์ฐ๊ฒฐ ๊ด๋ฆฌ" ์์ญ ์ฐ์ธก์ + ๋ฒํผ์ ํด๋ฆญํฉ๋๋ค.
-
์๋ ์ ๋ณด๋ฅผ ์ ๋ ฅํฉ๋๋ค:
- URL:
http://host.docker.internal:9099 - Key:
0p3n-w3bu!
- URL:
๐ง ๋ฌธ์ ํด๊ฒฐ: ์ฐ๊ฒฐ์ด ์ ๋๋ฉด
host.docker.internal๋์localhost๋ฅผ ์ฌ์ฉํด๋ณด์ธ์.
Ollama API ์ฐ๊ฒฐ์ http://host.docker.internal:11434๋ฅผ ์ฌ์ฉํฉ๋๋ค.
- ๊ด๋ฆฌ์ ํจ๋์์
dnotitia/dna๋ชจ๋ธ์ ํ ๊ธ ๋ฒํผ์ ๋๋ฌ ํ์ฑํํฉ๋๋ค.
- ์ข์ธก ์๋จ "New Chat" ๋ฒํผ ํด๋ฆญ ํ ์ฑํ
์ฐฝ์์:
dnotitia/dna๋ชจ๋ธ ์ ํ- ํ ์คํธ ๋ฉ์์ง ์ ๋ ฅ
- ์ผ์ชฝ ํ๋จ ๊ณ์ ํด๋ฆญ ํ ๊ด๋ฆฌ์ ํจ๋๋ก ์ด๋ํ์ฌ, ํ์ดํ๋ผ์ธ ๊ด๋ฆฌ URL์ด
http://host.docker.internal:9099๋ก ์ค์ ๋์ด ์๋์ง ํ์ธํฉ๋๋ค.
- ์ค์ > ํ์ดํ๋ผ์ธ ๋ฉ๋ด์์ ์ ๊ณต๋
dify_pipeline_local.pyํ์ผ์ ์ ๋ก๋ํฉ๋๋ค.- ๐ฅ ํ์ผ ๋ค์ด๋ก๋: https://link.teddynote.com/dify_pipeline_local
๐ฏ ํ์ดํ๋ผ์ธ ์ฉ๋: Dify์ OpenWebUI๋ฅผ ์ฐ๊ฒฐํ์ฌ ์ํฌํ๋ก์ฐ๋ฅผ ์คํํ ์ ์๊ฒ ํด์ค๋๋ค.
-
์น ๋ธ๋ผ์ฐ์ ์์ Dify ์ ์:
๋งํฌ: http://localhost/apps
-
์ํฌํ๋ก์ฐ ํ๋ฉด์ผ๋ก ์ด๋ ํ, ์ ๊ณต๋ DSL ํ์ผ์ importํ์ฌ ํ ์คํธํฉ๋๋ค.
- ์ผ์ชฝ ๋ฉ๋ด์์ "DSL ํ์ผ ๊ฐ์ ธ์ค๊ธฐ" ํด๋ฆญ
- ํ ์คํธ์ฉ ํ์ผ (์: ํ ๋๋ ธํธ ์ฑ๋ด.yml) import
๐ DSL ํ์ผ: Dify Specification Language ํ์ผ๋ก, ์ํฌํ๋ก์ฐ์ ๊ตฌ์กฐ๋ฅผ ์ ์ํฉ๋๋ค.
- ์์ฉ ๋ชจ๋ธ API ํค ์ค์ :
- ์ฐ์ธก ์๋จ ๊ณ์ - ์ค์
- "๋ชจ๋ธ ์ ๊ณต์" ํญ๋ชฉ์ API ํค ์ ๋ ฅ
๐ฐ ๋น์ฉ ๊ด๋ฆฌ: API ์ฌ์ฉ๋์ ๋ชจ๋ํฐ๋งํ๊ณ ์์ฐ ํ๋๋ฅผ ์ค์ ํ๋ ๊ฒ์ ๊ถ์ฅํฉ๋๋ค.
์ฐ์ธก ์๋จ ํ๋กํ > ์ค์ > ์ผ์ชฝ ํญ "๋ชจ๋ธ ์ ๊ณต์" > Ollama ๋ชจ๋ธ ์ถ๊ฐ
๋ค์๊ณผ ๊ฐ์ด ์ค์ ํ์ฌ dnotitia/dna ๋ชจ๋ธ์ ์ถ๊ฐํฉ๋๋ค:
๐จ ๋ค์ํ ๋ชจ๋ธ ํ์ฉ:
- ์ฝ๋ฉ:
codellama,deepseek-coder- ํ๊ตญ์ด:
ggk/korean-llm,davidkim205/komt-llama2- ๋ฉํฐ๋ชจ๋ฌ:
llava,bakllava
Q: Docker ์ปจํ ์ด๋๊ฐ ์์๋์ง ์์์.
- A: Docker Desktop์ด ์คํ ์ค์ธ์ง ํ์ธํ๊ณ , ๋ก๊ทธ๋ฅผ ํ์ธํด๋ณด์ธ์.
Q: ๋ชจ๋ธ ๋ค์ด๋ก๋๊ฐ ๋๋ ค์.
- A: ๋คํธ์ํฌ ์ํ๋ฅผ ํ์ธํ๊ณ , VPN์ ์ฌ์ฉ ์ค์ด๋ผ๋ฉด ์ ์ ๋๊ณ ์๋ํด๋ณด์ธ์.
Q: API ์ฐ๊ฒฐ์ด ์ ๋ผ์.
- A: ๋ฐฉํ๋ฒฝ ์ค์ ์ ํ์ธํ๊ณ , ํฌํธ๊ฐ ์ฌ๋ฐ๋ฅด๊ฒ ์ด๋ ค์๋์ง ํ์ธํ์ธ์.
- ๐ Dify ๊ณต์ ๋ฌธ์
- ๐ OpenWebUI ๊ณต์ ๋ฌธ์
- ๐ Ollama ๊ณต์ ๋ฌธ์
- ๐ฅ ํ ๋๋ ธํธ YouTube ์ฑ๋
์ด ํ๋ก์ ํธ์ ๊ธฐ์ฌํ๊ณ ์ถ์ผ์๋ค๋ฉด:
- Fork ํ๊ธฐ
- Feature ๋ธ๋์น ์์ฑ (
git checkout -b feature/AmazingFeature) - ์ปค๋ฐ (
git commit -m 'Add some AmazingFeature') - ๋ธ๋์น์ Push (
git push origin feature/AmazingFeature) - Pull Request ์ด๊ธฐ
์ด ํ๋ก์ ํธ๋ MIT ๋ผ์ด์ ์ค ํ์ ๋ฐฐํฌ๋ฉ๋๋ค. ์์ธํ ๋ด์ฉ์ LICENSE ํ์ผ์ ์ฐธ์กฐํ์ธ์.
๐ ์ค์น๋ฅผ ์๋ฃํ์ ๊ฒ์ ์ถํํฉ๋๋ค! ์ด์ Dify์ OpenWebUI๋ฅผ ํ์ฉํ์ฌ ๊ฐ๋ ฅํ AI ์ํฌํ๋ก์ฐ๋ฅผ ๊ตฌ์ฑํด๋ณด์ธ์.
























