๐Ÿค–Dify (Synology๐Ÿ’พ, Docker๐Ÿณ) ์„ค์น˜ํ•˜๊ธฐ

Dify๋Š” ๋ฐ”์ด๋ธŒ์ฝ”๋”ฉ?์œผ๋กœ ์œ ๋ช…ํ•ด์ง„ ํˆด๋กœ ๋…ธ๋“œ ๊ธฐ๋ฐ˜ LLM ์›Œํฌํ”Œ๋กœ์šฐ๋ฅผ GUIํ™˜๊ฒฝ์—์„œ ์†์‰ฝ๊ฒŒ ์ œ์ž‘์ด ๊ฐ€๋Šฅํ•ฉ๋‹ˆ๋‹ค.

๋Œ€๊ทœ๋ชจ ์„œ๋ฒ„ํ™˜๊ฒฝ์ด ์•„๋‹ˆ๋”๋ผ๋„ ์ตœ์†Œ ์‚ฌ์–‘์ด ๋‚ฎ์€ ํ”„๋ ˆ์ž„์›Œํฌ์ด๊ธฐ ๋•Œ๋ฌธ์— Synology DSM๋‚˜ Unraid ๊ฐ™์€ ํ™˜๊ฒฝ์—์„œ Docker๋ฅผ ํ†ตํ•ด Dify๋ฅผ ๊ตฌ์ถ•ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

๐Ÿš€ ์ฃผ์š” AI ์›Œํฌํ”Œ๋กœ์šฐ ํ”Œ๋žซํผ 4์ข… ๋น„๊ต

ํ•ญ๋ชฉDifyFlowiseLangflown8n
์ฃผ์š” ๋ชฉ์ LLM ์•ฑ ๊ฐœ๋ฐœ ํ”Œ๋žซํผLLM ์ฑ—๋ด‡/์—์ด์ „ํŠธ ๋นŒ๋”LLM ํŒŒ์ดํ”„๋ผ์ธ ๋นŒ๋”๋ฒ”์šฉ ์›Œํฌํ”Œ๋กœ์šฐ ์ž๋™ํ™”
UI ๋ฐฉ์‹GUI + ์ฝ”๋“œ ํ˜ผํ•ฉ๋…ธ๋“œ ๊ธฐ๋ฐ˜ GUI๋…ธ๋“œ ๊ธฐ๋ฐ˜ GUI๋…ธ๋“œ ๊ธฐ๋ฐ˜ GUI
๋ผ์ด์„ ์Šค ์ •์ฑ…Apache 2.0 (์˜คํ”ˆ์†Œ์Šค)Apache 2.0 (์˜คํ”ˆ์†Œ์Šค)MIT License (์˜คํ”ˆ์†Œ์Šค)Fair-code (Sustainable Use)
์ƒ์—…์  ์ด์šฉโœ… ๊ฐ€๋Šฅ (์ž์œ ๋กœ์›€)โœ… ๊ฐ€๋Šฅ (์ž์œ ๋กœ์›€)โœ… ๊ฐ€๋Šฅ (๋งค์šฐ ์ž์œ ๋กœ์›€)โš ๏ธ ์กฐ๊ฑด๋ถ€ (์—”ํ„ฐํ”„๋ผ์ด์ฆˆ ์œ ๋ฃŒ)
๋ผ์ด์„ ์Šค ํŠน์ด์‚ฌํ•ญ์†Œ์Šค ์ˆ˜์ • ๋ฐ ์žฌ๋ฐฐํฌ ๊ฐ€๋Šฅ์†Œ์Šค ์ˆ˜์ • ๋ฐ ์žฌ๋ฐฐํฌ ๊ฐ€๋ŠฅDataStax ์ธ์ˆ˜ ํ›„์—๋„ ์œ ์ง€์ƒ์šฉ SaaS(ํ˜ธ์ŠคํŒ…) ๋“ฑ ์žฌํŒ๋งค ์ œํ•œ
LLM ํŠนํ™”๋„โญโญโญโญโญโญโญโญโญโญโญโญโญโญโญ
๋น„LLM ์ž๋™ํ™”โŒ ์ œํ•œ์ โŒ ์ œํ•œ์ โŒ ์ œํ•œ์ โœ… ๋งค์šฐ ๊ฐ•๋ ฅ
RAG ์ง€์›โœ… ๋‚ด์žฅ (Knowledge Base)โœ… ์ง€์›โœ… ์ง€์›โš ๏ธ ์ง์ ‘ ๊ตฌ์„ฑ ํ•„์š”
๋ฉ€ํ‹ฐ ์—์ด์ „ํŠธโœ… ๊ฐ•๋ ฅโš ๏ธ ๊ธฐ๋ณธ ์ˆ˜์ค€โœ… ์ง€์›โš ๏ธ ์ œํ•œ์ 
๋ฐฑ์—”๋“œ ์–ธ์–ดPythonNode.jsPythonNode.js
LangChain ์˜์กดโŒ ๋…์ž ํ”„๋ ˆ์ž„์›Œํฌโœ… ๊ธฐ๋ฐ˜โœ… ๊ธฐ๋ฐ˜โŒ
Self-hostโœ… Dockerโœ… Docker/npmโœ… Docker/pipโœ… Docker/npm
ํด๋ผ์šฐ๋“œ SaaSโœ… dify.aiโŒโš ๏ธ DataStax ํ˜ธ์ŠคํŒ…โœ… n8n.cloud
API ์„œ๋น™โœ… ์ž๋™ ์ƒ์„ฑโš ๏ธ ๊ธฐ๋ณธ ์ œ๊ณตโœ… ์ง€์›โœ… Webhook ๋ฐฉ์‹
๋ชจ๋ธ ํ”„๋กœ๋ฐ”์ด๋”๋งค์šฐ ๋‹ค์–‘๋‹ค์–‘๋‹ค์–‘์ œํ•œ์ 
๋กœ์ปฌ LLM (Ollama)โœ…โœ…โœ…โš ๏ธ HTTP ๋…ธ๋“œ๋กœ ๊ฐ€๋Šฅ
ํ”„๋กฌํ”„ํŠธ ๊ด€๋ฆฌโœ… ๋‚ด์žฅ ๋ฒ„์ „ ๊ด€๋ฆฌโŒโš ๏ธ ๊ธฐ๋ณธ ์ˆ˜์ค€โŒ
๋ชจ๋‹ˆํ„ฐ๋ง/๋กœ๊น…โœ… ๋‚ด์žฅโŒโš ๏ธ ๊ธฐ๋ณธ ์ˆ˜์ค€โš ๏ธ ์‹คํ–‰ ๋กœ๊ทธ ์ˆ˜์ค€
ํ•™์Šต ๋‚œ์ด๋„์ค‘๊ฐ„์‰ฌ์›€์ค‘๊ฐ„์ค‘๊ฐ„
์—”ํ„ฐํ”„๋ผ์ด์ฆˆ ๊ธฐ๋Šฅโœ… (์œ ๋ฃŒ ํ”Œ๋žœ)โŒโš ๏ธโœ… (์œ ๋ฃŒ ํ”Œ๋žœ)

A. Dify ์„ค์น˜ํ•˜๊ธฐ(Synology) - ๊ณต์‹๊ฐ€์ด๋“œ ์„ค์น˜x, ์ปค์Šคํ…€ ์„ธํŒ…

Git ์„ค์น˜

๋จผ์ € ์‹œ๋†€๋กœ์ง€์— git ํŒจํ‚ค์ง€๋ฅผ ์„ค์น˜ํ•ฉ๋‹ˆ๋‹ค.

DSM ๊ณต์‹ ํŒจํ‚ค์ง€ ์„ผํ„ฐ์—๋Š” ํฌํ•จ๋˜์ง€ ์•Š์•„, ์ปค๋ฎค๋‹ˆํ‹ฐ ๋ฒ„์ „์œผ๋กœ ์„ค์น˜๋ฅผ ํ•˜์˜€์Šต๋‹ˆ๋‹ค.

synopackage.com

์‹œ๋†€๋กœ์ง€ ํŒจํ‚ค์ง€ ์†Œ์Šค

  • ํŒจํ‚ค์ง€ ์„ผํ„ฐ - ์„ค์ • ๋ฒ„ํŠผ - ํŒจํ‚ค์ง€ ์†Œ์Šค

์ถ”๊ฐ€ ๋ฒ„ํŠผ์„ ํด๋ฆญํ•˜์—ฌ https://packages.synocommunity.com ๋ฅผ ์ถ”๊ฐ€ ํ•ฉ๋‹ˆ๋‹ค.

ํŒจํ‚ค์ง€ ์„ผํ„ฐ์— ์ปค๋ฎค๋‹ˆํ‹ฐ ๋ฉ”๋‰ด๊ฐ€ ์ƒ๊ฒผ์Šต๋‹ˆ๋‹ค.

git์„ ์„ค์น˜ํ•ฉ๋‹ˆ๋‹ค.

ํ„ฐ๋ฏธ๋„์„ ์—ด์–ด์„œ ์ž˜ ๋™์ž‘ํ•˜๋Š” ์ง€ ํ…Œ์ŠคํŠธ ํ•ด๋ด…๋‹ˆ๋‹ค.

Dify ์„ค์น˜

์„ค์น˜๊ฐ€ ์™„๋ฃŒ๋˜์—ˆ์œผ๋ฉด, Dify ์„ค์น˜ ๊ฐ€์ด๋“œ๋ฅผ ๋”ฐ๋ผ ์ง„ํ–‰ํ•ด ๋ด…์‹œ๋‹ค.

Deploy Dify with Docker Compose - Dify Docs
cd /volume1/docker/
git clone https://github.com/langgenius/dify.git
cd dify
cd docker
cp .env.example .env
docker compose up -d

๊ณต์‹ Dify ๊นƒํ—ˆ๋ธŒ์—์„œ ์•ˆ๋‚ดํ•˜๋Š” ์„ค์น˜๋ฒ•์ž…๋‹ˆ๋‹ค.

GitHub - langgenius/dify: Production-ready platform for agentic workflow development.
Production-ready platform for agentic workflow development. - langgenius/dify

์œ„ ์ปค๋งจ๋“œ๋กœ ์„ค์น˜๋ฅผ ์‹œ๋†€๋กœ์ง€ ์ƒ์—์„œ ์ง„ํ–‰ํ•˜๋ฉด docker compose ์‹œ ๋ฌด์ˆ˜ํžˆ ๋งŽ์€ ์—๋Ÿฌ๋ฅผ ๋ณผ ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ๐Ÿ˜…

์ปค์Šคํ…€ ์„ธํŒ…(docker-compose, .env) ์„ค์น˜

# compose ์‹คํŒจ ์‹œ ์ทจ์†Œ/์ œ๊ฑฐ ํ•˜๊ธฐ
sudo docker compose down --remove-orphans

์‹œ๋†€๋กœ์ง€์—์„œ ์ •์ƒ์ ์ธ ์„ค์น˜๋ฅผ ์œ„ํ•ด, ๋จผ์ € ์‹คํ–‰๋œ ๋„์ปค ์ปจํ…Œ์ด๋„ˆ๋“ค์„ ์ œ๊ฑฐํ•ด์ค๋‹ˆ๋‹ค.

๊ทธ๋ฆฌ๊ณ  ๋ฏธ๋ฆฌ ํด๋”๋“ค์„ ์ƒ์„ฑํ•ด์ค์‹œ๋‹ค.

# Dify ๋„์ปค ํด๋”๋กœ ์ด๋™
cd /volume1/docker/dify/docker

# ๋ˆ„๋ฝ๋˜๊ธฐ ์‰ฌ์šด ๋ชจ๋“  ๋ณผ๋ฅจ ํด๋”๋ฅผ ํ•œ ๋ฒˆ์— ์ƒ์„ฑํ•ฉ๋‹ˆ๋‹ค.
sudo mkdir -p volumes/db/data
sudo mkdir -p volumes/redis/data
sudo mkdir -p volumes/sandbox/dependencies
sudo mkdir -p volumes/app/storage
sudo mkdir -p volumes/plugin_daemon
sudo mkdir -p volumes/certbot/conf
sudo mkdir -p volumes/certbot/conf/live
sudo mkdir -p volumes/certbot/conf/archive
sudo mkdir -p volumes/certbot/www
sudo mkdir -p volumes/qdrant # weaviate ๋Œ€์ฒด ๋ฒกํ„ฐ DB !
sudo mkdir -p volumes/storage
sudo mkdir -p volumes/weaviate/data # AVX ๋ช…๋ น์–ด ์—†์œผ๋ฉด ์‚ฌ์šฉ ๋ถˆ๊ฐ€ !

# ๋ชจ๋“  ๋ณผ๋ฅจ ํด๋”์— ๋Œ€ํ•ด ์“ฐ๊ธฐ ๊ถŒํ•œ ๋ถ€์—ฌ
sudo chmod -R 777 /volume/

๊ณต์‹ ๊ฐ€์ด๋“œ์—์„œ ์„ค์น˜๋˜๋Š” ๋ฒกํ„ฐDB์ธ Weaviate๋Š” CPU์—์„œ AVX ๋ช…๋ น์–ด๋ฅผ ์ง€์›ํ•ด์•ผ ์‚ฌ์šฉ ๊ฐ€๋Šฅํ•ฉ๋‹ˆ๋‹ค.

ํ•˜์ง€๋งŒ ์šฐ๋ฆฌ์˜ ์‹œ๋†€๋กœ์ง€๋Š” ๋Œ€๋ถ€๋ถ„(?) AVX ๋ช…๋ น์–ด๊ฐ€ ์—†๋Š” CPU๋ฅผ ์‚ฌ์šฉํ•˜๊ณ  ์žˆ์Šต๋‹ˆ๋‹ค.

๋Œ€์ฒด ๋ฐฉ์•ˆ์œผ๋กœ Qdrant๋ฅผ ์„ค์น˜ํ•ด ์ค๋‹ˆ๋‹ค. (Dify๋Š” ๋‹ค์–‘ํ•œ DB๋ฅผ ์ง€์›ํ•ฉ๋‹ˆ๋‹ค ๐Ÿ˜„)

(์œ„ mkdir๋กœ qdrant ๋””๋ ‰ํ† ๋ฆฌ๋ฅผ ๋ฏธ๋ฆฌ ์ƒ์„ฑํ–ˆ์Šต๋‹ˆ๋‹ค !)

/volume1/docker/dify/ ํด๋”์—๋Š” Dify ๋„์ปค ์„ค์น˜๋ฅผ ์œ„ํ•œ docker-compose์™€ .env๊ฐ€ ์žˆ์Šต๋‹ˆ๋‹ค.

Dify๋Š” ์žฆ์€(?) ์—…๋ฐ์ดํŠธ๋กœ ๋‹ค์ค‘ ๋„์ปค ์ปจํ…Œ์ด๋„ˆ๋“ค์„ ์—ฐ๊ฒฐํ•˜์—ฌ ๋™์ž‘ํ•˜๊ธฐ ๋•Œ๋ฌธ์— ์„ค์ •์ด ๊ฝค๋‚˜ ๋ณต์žกํ•ฉ๋‹ˆ๋‹ค.

๋”๊ตฐ๋‹ค๋‚˜, ์‹œ๋†€๋กœ์ง€๋ผ๋Š” ํ์‡„๋œ ์‹œ์Šคํ…œ ์•ˆ์—์„œ ์ œ์•ฝ์‚ฌํ•ญ๋“ค์ด ๋”ฐ๋ผ ๋ถ™์Šต๋‹ˆ๋‹ค.

์—ด์‹ฌํžˆ ์ œ๋ฏธ๋‚˜์ด์™€ ์˜คํ”ˆํด๋กœ(์ ฌ๋งˆ)๋ฅผ ๊ฐˆ๊ตฌ๋ฉฐ ์ปค์Šคํ„ฐ๋งˆ์ด์ง•ํ•œ docker-compose์ž…๋‹ˆ๋‹ค.

  • ์ œ์•ฝ์‚ฌํ•ญ
    • docker ๋„คํŠธ์›Œํฌ๋ฅผ Dify_bridge๋กœ ๋ฌถ์Œ
    • [api port] 5001:5001 -> 18080:5001
    • [web ui port] 3000:3000 -> 18081:3000
    • [plug-in daemon] 5002:5002 -> 15002:5002

env.yaml์€ dify์— ๋Œ€ํ•œ ์„ค์ •๋“ค์ž…๋‹ˆ๋‹ค.

๊ธฐ๋ณธ์ ์œผ๋กœ ์‹œ๋†€๋กœ์ง€๋Š” ์ข€(?) ๋А๋ฆฐ ํŽธ์ด๊ธฐ ๋•Œ๋ฌธ์— Timeout ์‹œ๊ฐ„๋Œ€๋ฅผ ๋Œ€ํญ ๋Š˜๋ฆฌ๊ณ , ์•ž์„œ ๋งํ•œ ๋ฒกํ„ฐDB๋ฅผ Qdrant๋กœ ๋ณ€๊ฒฝ, docker-compose์—์„œ ์ˆ˜์ •ํ•œ port ๋“ฑ์„ ๋ฐ˜์˜ํ•˜์˜€์Šต๋‹ˆ๋‹ค.

  • ์ˆ˜์ •ํ•ญ๋ชฉ
    • ์‹œ๋†€๋กœ์ง€์˜ IP ๋ฐ docker-compose์— ์ ์šฉํ•œ Port ๋ฒˆํ˜ธ๋ฅผ ์„ค์ •ํ•ฉ๋‹ˆ๋‹ค.
      WEB๊ณผ API๋ฅผ ๊ตฌ๋ถ„ํ•ด์„œ URL๊ณผ Port๋ฅผ ์ง€์ •ํ•ฉ๋‹ˆ๋‹ค.
      CONSOLE_API_URL=http://SynologyIP or Domain:18080
      CONSOLE_WEB_URL=http://SynologyIP or Domain:18081
      SERVICE_API_URL=http://SynologyIP or Domain:18080
      APP_API_URL=http://SynologyIP or Domain:18080
      APP_WEB_URL=http://SynologyIP or Domain:18081
      NEXT_PUBLIC_SOCKET_URL=ws://SynologyIP or Domain:18080
    • ํ˜น์‹œ๋‚˜ CORS ์—๋Ÿฌ๊ฐ€ ๋ฐœ์ƒํ•  ๊ฒฝ์šฐ, IP์™€ Domain์„ ์ถ”๊ฐ€ํ•ฉ๋‹ˆ๋‹ค.
      CONSOLE_CORS_ALLOW_ORIGINS=IP:18081,http://Domain:18081
      WEB_API_CORS_ALLOW_ORIGINS=IP:18081,http://Domain:18081
    • ๊ฐ API๋“ค์˜ ํ‚ค๋ฅผ ์„ค์ •ํ•ฉ๋‹ˆ๋‹ค.
      - ํŽธํ•˜๊ฒŒ GPT๋‚˜ Gemini์—๊ฒŒ ์ƒ์„ฑํ•ด ๋‹ฌ๋ผ๊ณ  ํ•ฉ๋‹ˆ๋‹ค.
      SECRET_KEY=[32~64chars]
      PLUGIN_DAEMON_KEY=[32~64chars]
      PLUGIN_DIFY_INNER_API_KEY=[32~64chars]
    • ์‹œ๋†€๋กœ์ง€์ฒ˜๋Ÿผ ๋‚ฎ์€ ์‚ฌ์–‘์— ๋งž๊ฒŒ ํƒ€์ž„์•„์›ƒ์„ ๋Š˜๋ ธ์Šต๋‹ˆ๋‹ค.
      FILES_ACCESS_TIMEOUT=600
      API_WEBSOCKET_GUNICORN_TIMEOUT=600
      GUNICORN_TIMEOUT=600
      SQLALCHEMY_POOL_TIMEOUT=300
      REDIS_SOCKET_TIMEOUT=600
      REDIS_SOCKET_CONNECT_TIMEOUT=600
      QDRANT_CLIENT_TIMEOUT=600
      PLUGIN_PYTHON_ENV_INIT_TIMEOUT=300
      PLUGIN_MAX_EXECUTION_TIMEOUT=600
  • API ํ‚ค ์ƒ์„ฑ ๋ฐฉ๋ฒ•
# SECRET_KEY (48 chars)
openssl rand -hex 24

# PLUGIN_DAEMON_KEY (56 chars)
openssl rand -hex 28

# PLUGIN_DIFY_INNER_API_KEY (56 chars)
openssl rand -hex 28
import secrets

# SECRET_KEY (48 chars)
secret_key = secrets.token_hex(24)  # 48 hex chars
print("SECRET_KEY=", secret_key)

# PLUGIN_DAEMON_KEY (56 chars)
plugin_daemon_key = secrets.token_hex(28)  # 56 hex chars
print("PLUGIN_DAEMON_KEY=", plugin_daemon_key)

# PLUGIN_DIFY_INNER_API_KEY (56 chars)
plugin_dify_key = secrets.token_hex(28)  # 56 hex chars
print("PLUGIN_DIFY_INNER_API_KEY=", plugin_dify_key)

์œ„ env.yaml ํŒŒ์ผ์€ .env๋กœ ๋ณ€๊ฒฝํ•ด์ค๋‹ˆ๋‹ค. Dify ์‹คํ–‰ ์‹œ .env ์„ค์ •๊ฐ’์ด ์ ์šฉ๋ฉ๋‹ˆ๋‹ค.

cp env.yaml .env

์ด์ œ compose๋ฅผ ์ง„ํ–‰ํ•ด์ค๋‹ˆ๋‹ค.

# Docker Compose
sudo docker compose up -d

์„ค์น˜๊ฐ€ ์™„๋ฃŒ๋˜๋ฉด ์ปจํ…Œ์ด๋„ˆ๋“ค์ผ ์‹คํ–‰๋ฉ๋‹ˆ๋‹ค.

์ปจํ…Œ์ด๋„ˆ ๋งค๋‹ˆ์ €์—์„œ๋„ ๋™์ž‘ํ˜„ํ™ฉ์„ ํ™•์ธํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

ํ˜น์—ฌ๋‚˜ ๋กœ๊ทธ๋‚˜ ์•Œ๋žŒ์ฐฝ์„ ํ†ตํ•ด ๋ฌธ์ œ๋ฅผ ๋ฐœ์ƒํ•˜๋ฉด ์‹คํ–‰์„ ์ค‘๋‹จํ•˜๊ณ  ์„ค์ •์„ ์ˆ˜์ •ํ•ฉ๋‹ˆ๋‹ค.

# ํ˜น์‹œ๋‚˜ compose ์‹คํŒจ ์‹œ
sudo docker compose down --remove-orphans

# ๋กœ๊ทธ๋ฅผ ํ†ตํ•ด ๊ถŒํ•œ ๋ฌธ์ œ์ž„์„ ํ™•์ธ
sudo chown -R 1000:1000 /volume1/docker/dify/
sudo chmod -R 777 /volume1/docker/dify/
sudo docker compose up -d

์œ„์—์„œ ์„ค์ •ํ–ˆ๋˜ http://SynologyIP:18081 ์ฃผ์†Œ๋กœ ์ ‘์†ํ•ด ๋ด…๋‹ˆ๋‹ค.

์ž ์‹œ ๊ธฐ๋‹ค๋ฆฌ๋ฉด ์„ค์น˜ ์ž‘์—…์ด ๋๋‚ฉ๋‹ˆ๋‹ค. (?)

๊ด€๋ฆฌ์ž ๊ณ„์ • ์„ค์ • ํŽ˜์ด์ง€๊ฐ€ ๋‚˜ํƒ€๋‚˜๋ฉด ์„ฑ๊ณต์ž…๋‹ˆ๋‹ค! ๐Ÿ˜Š๐ŸŽ‰

โš ๏ธ์œ„ ์„ธํŒ…๋“ค์€ ์ปค์Šคํ…€๋˜์—ˆ๊ธฐ ๋•Œ๋ฌธ์— ์ผ๋ถ€ ๋™์ž‘์— ๋ฌธ์ œ๊ฐ€ ์žˆ์„ ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค...?

-> ์„ค์ •๊ฐ’๋“ค์„ ํ™•์ธํ•ด ์ฃผ์„ธ์š”!! ๐Ÿ˜ผ

B. Dify ์„ค์น˜ํ•˜๊ธฐ (Unraid)

์œ„ ์‹œ๋†€๋กœ์ง€ ์„ค์น˜๊ณผ์ •์— ๋น„ํ•˜๋ฉด ๋งค์šฐ ์„ ๋…€์ž…๋‹ˆ๋‹ค ๐Ÿฅน

Apps์— ๋“ฑ๋ก๋œ Dify-aio๋ฅผ ํด๋ฆญํ•˜์—ฌ ์ด๋ฏธ์ง€๋ฅผ ๋‹ค์šด ๋ฐ›์Šต๋‹ˆ๋‹ค.

Unraid๋Š” Apps์—์„œ ๋‹ค์šด๋ฐ›์€ ์ด๋ฏธ์ง€์˜ ๊ฒฝ์šฐ ๊ธฐ๋ณธ์ ์ธ Docker Template๋“ค์ด ์ œ๊ณต๋˜๊ธฐ ๋•Œ๋ฌธ์— ํฌ๊ฒŒ ์–ด๋ ค์›€์€ ์—†์Šต๋‹ˆ๋‹ค.

dify-aio์˜ ๊ฒฝ์šฐ ํ™˜๊ฒฝ๋ณ€์ˆ˜๋กœ MAIL_TYPE๊ณผ RESEND_API_KEY ์ •๋„๋งŒ ์ถ”๊ฐ€ํ•˜์—ฌ smtp, bypass๋กœ ์„ค์ •ํ•˜๋ฉด ๋๋‚ฉ๋‹ˆ๋‹ค!!

๋‚˜๋จธ์ง€ ๊ธฐ๋ณธ์ ์ธ Web UI Port, Initial Admin Password (์„ ํƒ), Timezone๊ณผ ๋” ํ•„์š”ํ•œ ํ•ญ๋ชฉ๋“ค์ด ์žˆ์œผ๋ฉด ์ถ”๊ฐ€ํ•˜์—ฌ ๋งˆ๋ฌด๋ฆฌํ•ฉ๋‹ˆ๋‹ค.

Dify ์‚ฌ์šฉํ•˜๊ธฐ

Dify ์„ค์น˜๊ฐ€ ์™„๋ฃŒ๋˜์—ˆ๋‹ค๋ฉด ๋‹ค์Œ๊ณผ ๊ฐ™์€ ํ™”๋ฉด์ด ๋‚˜์˜ฌ ๊ฒƒ ์ž…๋‹ˆ๋‹ค.
๊ธฐ๋ณธ์ ์œผ๋กœ LLM ๋ชจ๋ธ์„ ์„ธํŒ…ํ•ด ๋ด…๋‹ˆ๋‹ค.

Dify - LLM Provider ์—ฐ๊ฒฐํ•˜๊ธฐ

์šฐ์ธก ์ƒ๋‹จ ๊ณ„์ • - ์„ค์ • ํด๋ฆญ

์„ค์ • - ๋ชจ๋ธ ์ œ๊ณต์ž(Model Provider) ํด๋ฆญ

์•Œ๋งž์€ ๋ชจ๋ธ ๊ณต๊ธ‰์ž๋ฅผ ์„ค์น˜ํ•˜๊ณ  ์‹œ์Šคํ…Œ ๋ชจ๋ธ ์„ค์ •์—์„œ ์‚ฌ์šฉํ•  ๋ชจ๋ธ ์„ค์ •์„ ์ง„ํ–‰ํ•ฉ๋‹ˆ๋‹ค.

์˜ˆ์‹œ๋กœ ์ œ๋ฏธ๋‚˜์ด๋ฅผ ์„ค์น˜ํ•ด๋ณด๊ฒ ์Šต๋‹ˆ๋‹ค.

์›ํด๋ฆญ์œผ๋กœ ๊ธˆ๋ฐฉ ์„ค์น˜๊ฐ€ ์™„๋ฃŒ๋˜์—ˆ์Šต๋‹ˆ๋‹ค. ์ด์ œ LLM์„ ์‹ค์ œ ๋™์ž‘์‹œํ‚ค๊ธฐ ์ „์— APIํ‚ค๋ฅผ ์ถ”๊ฐ€ํ•˜์—ฌ ์ธ์ฆ์„ ํ•ด์•ผํ•ฉ๋‹ˆ๋‹ค.

API ํ‚ค ์ถ”๊ฐ€ ๋ฒ„ํŠผ์„ ํด๋ฆญํ•ฉ๋‹ˆ๋‹ค.

Google AI Studio์—์„œ API ํ‚ค๋ฅผ ๋ฐœ๊ธ‰ ๋ฐ›์Šต๋‹ˆ๋‹ค.

Google AI Studio
The fastest path from prompt to production with Gemini

๋ฐœ๊ธ‰๋ฐ›์€ API ํ‚ค๋ฅผ ๋ณต์‚ฌํ•˜์—ฌ Dify์˜ ์ธ์ฆ ๊ตฌ์„ฑ ์ฐฝ์— ์ž…๋ ฅํ•˜๊ณ  ์ €์žฅํ•ฉ๋‹ˆ๋‹ค.

Gemini ๋ชจ๋ธ์ด ๋“ฑ๋ก๋˜๋ฉด Gemini์—์„œ ์‚ฌ์šฉํ•  ์‹œ์Šคํ…œ ๋ชจ๋ธ ์„ค์ •์„ ์ง„ํ–‰ํ•ฉ๋‹ˆ๋‹ค.

์˜ˆ์‹œ๋กœ Gemini์˜ 3.1 Flash-Lite ๋ชจ๋ธ์„ ๋“ฑ๋กํ•ด ๋ณด์•˜์Šต๋‹ˆ๋‹ค.

์•ฑ ์ƒ์„ฑํ•˜๊ธฐ

Dify์—์„œ๋Š” ์•ฑ์ด๋ผ๋Š” ๊ฐœ๋…์œผ๋กœ ์‚ฌ์šฉ์ž๊ฐ€ ์›ํ•˜๋Š” ๋‹ค์–‘ํ•œ ์›Œํฌํ”Œ๋กœ์šฐ ํ…œํ”Œ๋ฆฟ๋“ค์„ ์ œ๊ณตํ•ฉ๋‹ˆ๋‹ค. ๋นˆ ์ƒํƒœ์—์„œ ์ฒ˜์Œ๋ถ€ํ„ฐ ์ง์ ‘ ๋งŒ๋“ค์–ด๊ฐˆ ์ˆ˜๋„ ์žˆ๊ณ , ์ œ๊ณต๋œ ํ…œํ”Œ๋ฆฟ์„ ์ž…๋ง›์— ๋งž๊ฒŒ ์ˆ˜์ •ํ•˜์—ฌ LLM์„ ๋ชฉ์ ์— ๋งž๊ฒŒ ๋™์ž‘์‹œํ‚ค๋Š” ํ๋ฆ„๋„๋ฅผ GUI๋กœ ์†์‰ฝ๊ฒŒ ๊ตฌ์„ฑ ๊ฐ€๋Šฅํ•ฉ๋‹ˆ๋‹ค.

ํ…Œ์ŠคํŠธ์šฉ์œผ๋กœ ํ…œํ”Œ๋ฆฟ ํ•˜๋‚˜๋ฅผ ์„ ํƒํ•˜์—ฌ ์•ฑ์„ ์ƒ์„ฑํ•˜์˜€์Šต๋‹ˆ๋‹ค.

์‚ฌ์šฉ ๋ชฉ์ ์— ๋งž๊ฒŒ ๊ธฐ๋ณธ์ ์œผ๋กœ ์ œ๊ณต๋˜๋Š” ๋…ธ๋“œ๊ตฌ์„ฑ๋“ค์„ ์ˆ˜์ •ํ•˜์˜€์Šต๋‹ˆ๋‹ค.

LLM ๋…ธ๋“œ์—์„œ ๊ธฐ๋ณธ ์„ธํŒ…์ด gpt๋กœ ๋˜์–ด์žˆ์–ด ํ˜ธํ™˜๋˜์ง€ ์•Š์Œ์ด๋ผ๋Š” ๊ฒฝ๊ณ ํ‘œ์‹œโš ๏ธ๊ฐ€ ์ƒ์„ฑ๋˜์–ด ์žˆ์Šต๋‹ˆ๋‹ค.

๋ชจ๋ธ ์„ ํƒ ๋ฒ„ํŠผ์„ ํด๋ฆญํ•˜๋ฉด ์œ„์—์„œ ์„ค์ •ํ•œ Gemini ๋ชจ๋ธ ๋ฆฌ์ŠคํŠธ๊ฐ€ ๋‚˜ํƒ€๋‚ฉ๋‹ˆ๋‹ค. ์‚ฌ์šฉํ•  ๋ชจ๋ธ์„ ์„ ํƒํ•˜๊ณ  ๋ชจ๋ธ์˜ ๋งค๊ฐœ๋ณ€์ˆ˜๋“ค์„ ์„ค์ •ํ•˜๋ฉด ์•Œ๋ฆผํ‘œ์‹œโš ๏ธ๊ฐ€ ์‚ฌ๋ผ์ง€๋Š” ๊ฒƒ์„ ํ™•์ธํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค!

๋…ธ๋“œ๋“ค์˜ ๋ฐฐ์น˜์™€ ์›Œํฌํ”Œ๋กœ์šฐ ์„ธํŒ…์„ ๋งˆ์นœ ํ›„, ๋ฏธ๋ฆฌ๋ณด๊ธฐ ๋ฒ„ํŠผ์„ ๋ˆ„๋ฅด๋ฉด ์‹œ์ž‘๋…ธ๋“œ์—์„œ ์„ค์ •ํ•œ ํ•ญ๋ชฉ๋“ค์„ ๊ธฐ์ค€์œผ๋กœ ์ฑ„ํŒ…์ฐฝ์ด ํ™œ์„ฑํ™”๋ฉ๋‹ˆ๋‹ค.

์‹ค์ œ ์•ฑ ๊ตฌ๋™์„ ๋ฏธ๋ฆฌ ๋ณด๊ธฐ๋ฅผ ํ†ตํ•ด์„œ ํ…Œ์ŠคํŠธํ•œ ๋’ค, ์™„์„ฑ๋œ ์•ฑ์„ ๊ฒŒ์‹œํ•˜์—ฌ Web, API ๋“ฑ์„ ํ†ตํ•ด ๋ฐฐํฌ๋ฅผ ์†์‰ฝ๊ฒŒ ๊ตฌํ˜„ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

root@cyberpunk:~#