Dify Docker 설치 가이드: 프로덕션 레디 LLM 앱 플랫폼




개요

Dify는 프로덕션 레디 LLM 애플리케이션 개발 플랫폼입니다. 시각적 워크플로우 빌더, RAG 파이프라인, AI 에이전트, 모델 관리, 관찰성 기능을 하나의 인터페이스에서 제공합니다. 프로토타입에서 프로덕션까지 빠르게 전환할 수 있으며, OpenAI, Anthropic, Ollama 등 수백 개의 LLM을 지원합니다.

항목내용
GitHubhttps://github.com/langgenius/dify
공식 사이트https://dify.ai
문서https://docs.dify.ai
라이선스Apache-2.0 (소스 공개)
GitHub Stars55K+

Dify란?

왜 Dify인가?

❌ 기존 LLM 개발의 어려움:
   - 프로토타입 → 프로덕션 전환이 어려움
   - RAG, 에이전트, 모델 관리를 각각 구축
   - 관찰성/모니터링 도구 별도 필요

✅ Dify의 해결책:
   - 올인원 LLM 앱 플랫폼
   - 시각적 워크플로우 + 코드 없이 구축
   - RAG, 에이전트, 프롬프트 IDE 통합
   - 내장 LLMOps (로그, 분석, 어노테이션)
   - Backend-as-a-Service API 제공

핵심 개념

"프로토타입에서 프로덕션까지"
- 시각적 캔버스에서 워크플로우 구축
- 수백 개 LLM 통합 지원
- RAG 파이프라인 내장
- AI 에이전트 + 도구 호출
- 플러그인 마켓플레이스
- MCP (Model Context Protocol) 지원

아키텍처

┌───────────────────────────────────────────────────┐
│                    Dify Platform                   │
├─────────────┬─────────────┬─────────────┬─────────┤
│   Web UI    │   API       │   Worker    │  Nginx  │
├─────────────┴─────────────┴─────────────┴─────────┤
│              Plugin Daemon + Sandbox               │
├─────────────┬─────────────┬─────────────┬─────────┤
│  PostgreSQL │    Redis    │  Weaviate   │  MinIO  │
│  (Database) │   (Cache)   │ (VectorDB)  │(Storage)│
└─────────────┴─────────────┴─────────────┴─────────┘

주요 기능

🔄 워크플로우 빌더

노드 유형설명
LLMLLM 호출 노드
Knowledge RetrievalRAG 검색
Conditional조건 분기
HTTP RequestAPI 호출
CodePython/Node 실행
TemplateJinja 템플릿
Iterator반복 처리
Aggregator결과 집계

🤖 LLM 지원

카테고리제공자
독점 모델OpenAI, Anthropic, Google Gemini, Azure
오픈소스Llama, Mistral, Qwen, DeepSeek
로컬 추론Ollama, LocalAI, vLLM, llama.cpp
호환 APIOpenAI API 호환 모든 서버

📚 RAG 파이프라인

기능설명
문서 수집PDF, PPT, Word, TXT, HTML, Notion 등
청킹자동 청킹, 클리닝
임베딩다양한 임베딩 모델
벡터 스토어Weaviate (기본), Qdrant, Milvus, Chroma, pgvector
검색벡터 검색, BM25, 하이브리드
리랭킹선택적 리랭커

🛠️ 에이전트 & 도구

기능설명
에이전트 프레임워크ReAct, Function Calling
내장 도구웹 검색, 계산기, DALL-E, Stable Diffusion 등
커스텀 도구OpenAPI 스펙으로 통합
MCP 지원Model Context Protocol
플러그인마켓플레이스 확장

📊 LLMOps & 관찰성

기능설명
로그모든 요청/응답 기록
토큰 사용량비용 추적
어노테이션피드백 수집
Langfuse 통합외부 관찰성
OpenTelemetry분산 추적

🔌 배포 & 통합

기능설명
REST API모든 기능 API 제공
SDKPython, JavaScript
임베드 위젯웹사이트 채팅
Webhook외부 시스템 연동
SSO엔터프라이즈 인증

시스템 요구 사항

항목최소권장
CPU2 코어4+ 코어
RAM8GB16GB+
저장소20GB50GB+
포트80, 443

Docker 설치

방법 1: 공식 Docker Compose (권장)

# 최신 버전 클론
git clone https://github.com/langgenius/dify.git
cd dify/docker

# 환경 설정
cp .env.example .env

# 시작
docker compose up -d

접속: http://localhost → 관리자 계정 생성

방법 2: 간소화된 Docker Compose

# docker-compose.yml
services:
  # API 서비스
  api:
    image: langgenius/dify-api:latest
    restart: always
    environment:
      MODE: api
      SECRET_KEY: your-secret-key-here
      DB_USERNAME: postgres
      DB_PASSWORD: difyai123456
      DB_HOST: db
      DB_PORT: 5432
      DB_DATABASE: dify
      REDIS_HOST: redis
      REDIS_PORT: 6379
      VECTOR_STORE: weaviate
      WEAVIATE_ENDPOINT: http://weaviate:8080
    depends_on:
      - db
      - redis
      - weaviate
    volumes:
      - ./volumes/app/storage:/app/api/storage

  # Worker 서비스
  worker:
    image: langgenius/dify-api:latest
    restart: always
    environment:
      MODE: worker
      SECRET_KEY: your-secret-key-here
      DB_USERNAME: postgres
      DB_PASSWORD: difyai123456
      DB_HOST: db
      DB_PORT: 5432
      DB_DATABASE: dify
      REDIS_HOST: redis
      REDIS_PORT: 6379
    depends_on:
      - db
      - redis
    volumes:
      - ./volumes/app/storage:/app/api/storage

  # Web 프론트엔드
  web:
    image: langgenius/dify-web:latest
    restart: always
    environment:
      CONSOLE_API_URL: http://api:5001
      APP_API_URL: http://api:5001

  # Nginx 게이트웨이
  nginx:
    image: nginx:latest
    restart: always
    ports:
      - "80:80"
    volumes:
      - ./nginx/nginx.conf:/etc/nginx/nginx.conf
    depends_on:
      - api
      - web

  # PostgreSQL
  db:
    image: postgres:15-alpine
    restart: always
    environment:
      POSTGRES_USER: postgres
      POSTGRES_PASSWORD: difyai123456
      POSTGRES_DB: dify
    volumes:
      - ./volumes/db/data:/var/lib/postgresql/data

  # Redis
  redis:
    image: redis:6-alpine
    restart: always
    volumes:
      - ./volumes/redis/data:/data

  # Weaviate (벡터 DB)
  weaviate:
    image: semitechnologies/weaviate:1.27.0
    restart: always
    environment:
      QUERY_DEFAULTS_LIMIT: 25
      AUTHENTICATION_ANONYMOUS_ACCESS_ENABLED: 'true'
      PERSISTENCE_DATA_PATH: '/var/lib/weaviate'
    volumes:
      - ./volumes/weaviate:/var/lib/weaviate

방법 3: Qdrant 벡터 스토어

.env 파일 수정:

VECTOR_STORE=qdrant
QDRANT_URL=http://qdrant:6333

추가 서비스:

  qdrant:
    image: qdrant/qdrant:latest
    restart: always
    ports:
      - "6333:6333"
    volumes:
      - ./volumes/qdrant:/qdrant/storage

방법 4: Milvus 벡터 스토어

.env 파일 수정:

VECTOR_STORE=milvus
MILVUS_URI=http://milvus:19530

방법 5: pgvector (PostgreSQL)

.env 파일 수정:

VECTOR_STORE=pgvector
PGVECTOR_HOST=db
PGVECTOR_PORT=5432
PGVECTOR_USER=postgres
PGVECTOR_PASSWORD=difyai123456
PGVECTOR_DATABASE=dify

방법 6: S3 스토리지

.env 파일 수정:

STORAGE_TYPE=s3
S3_ENDPOINT=https://s3.amazonaws.com
S3_BUCKET_NAME=your-bucket
S3_ACCESS_KEY=your-access-key
S3_SECRET_KEY=your-secret-key
S3_REGION=us-east-1

방법 7: OpenTelemetry 관찰성

.env 파일 수정:

ENABLE_OTEL=true
OTLP_BASE_ENDPOINT=http://otel-collector:4317

방법 8: Ollama 통합

# docker-compose.yml에 추가
  ollama:
    image: ollama/ollama:latest
    restart: always
    ports:
      - "11434:11434"
    volumes:
      - ./volumes/ollama:/root/.ollama
    deploy:
      resources:
        reservations:
          devices:
            - driver: nvidia
              count: all
              capabilities: [gpu]

Dify에서 설정:

  • Settings → Model Provider → Ollama 추가
  • API Base: http://ollama:11434

환경 변수

기본 설정

변수설명기본값
SECRET_KEY세션/암호화 키 (필수)
DEPLOY_ENV배포 환경PRODUCTION
DEBUG디버그 모드false
LOG_LEVEL로그 레벨INFO

데이터베이스

변수설명
DB_USERNAMEPostgreSQL 사용자
DB_PASSWORDPostgreSQL 비밀번호
DB_HOSTPostgreSQL 호스트
DB_PORTPostgreSQL 포트
DB_DATABASE데이터베이스 이름

Redis

변수설명
REDIS_HOSTRedis 호스트
REDIS_PORTRedis 포트
REDIS_PASSWORDRedis 비밀번호 (선택)

벡터 스토어

변수설명
VECTOR_STOREweaviate, qdrant, milvus, pgvector, chroma
WEAVIATE_ENDPOINTWeaviate URL
QDRANT_URLQdrant URL
MILVUS_URIMilvus URL

스토리지

변수설명
STORAGE_TYPElocal, s3, azure-blob, aliyun-oss
S3_ENDPOINTS3 엔드포인트
S3_BUCKET_NAMES3 버킷
S3_ACCESS_KEYS3 액세스 키
S3_SECRET_KEYS3 시크릿 키

관찰성

변수설명
ENABLE_OTELOpenTelemetry 활성화
OTLP_BASE_ENDPOINTOTLP 엔드포인트

초기 설정

1) 첫 접속

URL: http://localhost
→ 관리자 계정 생성
→ 이메일, 비밀번호 설정

2) 모델 프로바이더 설정

  1. Settings (우측 상단) → Model Provider
  2. 사용할 LLM 프로바이더 추가:
    • OpenAI: API Key 입력
    • Anthropic: API Key 입력
    • Ollama: Base URL (http://ollama:11434)

3) 첫 번째 앱 만들기

  1. StudioCreate Application
  2. 앱 유형 선택:
    • Chatbot: 대화형 앱
    • Agent: 도구 사용 에이전트
    • Workflow: 복잡한 파이프라인
    • Text Generator: 텍스트 생성

4) Knowledge Base (RAG) 설정

  1. KnowledgeCreate Knowledge
  2. 문서 업로드 (PDF, Word, TXT 등)
  3. 청킹 설정 (자동 또는 커스텀)
  4. 앱에 Knowledge Base 연결

사용 가이드

워크플로우 만들기

  1. StudioCreate ApplicationWorkflow
  2. 캔버스에서 노드 추가:
    • Start → LLM → End (기본 흐름)
    • Knowledge Retrieval 추가 (RAG)
    • Conditional 추가 (분기)
  3. 각 노드 설정 후 Publish

에이전트 만들기

  1. StudioCreate ApplicationAgent
  2. LLM 모델 선택
  3. 도구 추가:
    • 내장 도구 (웹 검색, 계산기 등)
    • 커스텀 도구 (OpenAPI 스펙)
  4. 시스템 프롬프트 작성

API로 앱 호출

# 채팅 API
curl -X POST 'http://localhost/v1/chat-messages' \
  -H 'Authorization: Bearer {api-key}' \
  -H 'Content-Type: application/json' \
  -d '{
    "inputs": {},
    "query": "안녕하세요!",
    "response_mode": "blocking",
    "conversation_id": "",
    "user": "user-123"
  }'

# 스트리밍
curl -X POST 'http://localhost/v1/chat-messages' \
  -H 'Authorization: Bearer {api-key}' \
  -H 'Content-Type: application/json' \
  -d '{
    "inputs": {},
    "query": "안녕하세요!",
    "response_mode": "streaming",
    "user": "user-123"
  }'

웹사이트에 임베드

<script>
  window.difyChatbotConfig = {
    token: 'your-app-token'
  }
</script>
<script
  src="http://localhost/embed.min.js"
  id="dify-chatbot"
  defer>
</script>

백업 및 복원

데이터 구조

./volumes/
├── db/data/           # PostgreSQL 데이터
├── redis/data/        # Redis 데이터
├── weaviate/          # 벡터 스토어
├── app/storage/       # 업로드 파일
└── ...

백업

# 컨테이너 정지
cd dify/docker
docker compose down

# 전체 백업
tar -czvf dify-backup-$(date +%Y%m%d).tar.gz volumes/

# PostgreSQL 덤프 (선택)
docker compose up -d db
docker exec dify-db pg_dump -U postgres dify > dify-db-backup.sql

복원

tar -xzvf dify-backup.tar.gz
docker compose up -d

업데이트

cd dify

# 최신 코드 가져오기
git pull

cd docker

# .env 업데이트 확인
# .env.example과 비교하여 새 변수 추가

# 업데이트 실행
docker compose down
docker compose pull
docker compose up -d

트러블슈팅

메모리 부족

최소 8GB RAM 필요. Docker VM 설정 확인.

데이터베이스 연결 오류

# PostgreSQL 로그 확인
docker compose logs db

# 연결 테스트
docker exec -it dify-db psql -U postgres -d dify

벡터 스토어 오류

# Weaviate 상태 확인
docker compose logs weaviate

# 다른 벡터 스토어로 변경
# .env에서 VECTOR_STORE 수정

LLM 연결 실패

  • API 키 확인
  • Ollama: http://ollama:11434 (Docker 네트워크)
  • 외부 Ollama: http://host.docker.internal:11434

SSRF 프록시 오류

Dify는 보안을 위해 SSRF 프록시 사용. 내부 네트워크 접근이 필요하면 설정 조정.


대안 비교

기능DifyFlowiseLangFlown8n
목적LLM 플랫폼LLM 앱LLM 앱워크플로우
시각적 빌더
RAG 내장✅ 풍부제한적
에이전트
LLMOps✅ 내장
플러그인✅ 마켓플레이스
멀티 유저제한적제한적
API 배포✅ BaaS
설치 복잡도중간쉬움쉬움중간

선택 가이드

용도추천
프로덕션 LLM 앱Dify
빠른 프로토타입Flowise
LangChain 비주얼LangFlow
비즈니스 자동화n8n
엔터프라이즈Dify (SSO, 팀)

활용 사례

1. 기업 지식 베이스 챗봇

구성:

  • Knowledge Base에 사내 문서 업로드
  • RAG 기반 Chatbot 앱 생성
  • 웹사이트에 임베드

결과: 사내 정책, 매뉴얼 자동 답변

2. 고객 지원 에이전트

구성:

  • Agent 앱 + 커스텀 도구
  • CRM API 연동 (주문 조회)
  • 티켓 생성 도구

결과: 자동 고객 응대 + 에스컬레이션

3. 콘텐츠 생성 파이프라인

구성:

  • Workflow 앱
  • 웹 검색 → LLM 분석 → 요약 → 번역
  • API로 CMS 연동

결과: 자동 콘텐츠 생성

4. 코드 리뷰 봇

구성:

  • GitHub 웹훅 연동
  • 코드 분석 LLM
  • PR 코멘트 자동 작성

결과: 자동 코드 리뷰

5. 다국어 번역 시스템

구성:

  • Workflow: 언어 감지 → 번역 → 품질 검사
  • 여러 LLM 비교
  • 용어집 Knowledge Base

결과: 일관된 기업 번역


마무리

Dify는 프로덕션 레디 LLM 애플리케이션 개발을 위한 완전한 플랫폼입니다. 시각적 워크플로우, RAG, 에이전트, LLMOps를 하나의 인터페이스에서 제공하며, 프로토타입에서 프로덕션까지 빠르게 전환할 수 있습니다.

핵심 장점

장점설명
올인원워크플로우 + RAG + 에이전트 + LLMOps
프로덕션 레디엔터프라이즈급 안정성
다중 LLM수백 개 모델 지원
RAG 내장문서 수집부터 검색까지
관찰성로그, 토큰, 어노테이션
BaaS모든 기능 API 제공
플러그인마켓플레이스 확장

이런 분께 추천

프로덕션급 LLM 앱을 구축하려는 팀
RAG + 에이전트를 통합하고 싶은 분
LLMOps (로그, 분석)가 필요한 기업
빠르게 MVP를 검증하려는 스타트업
엔터프라이즈 AI 플랫폼을 원하는 조직



댓글 남기기