Self-host Dify.ai trên VPS: AI app platform thay LangFlow

Chia sẻ bài viết

Mục lục
Self-host Dify.ai trên VPS: AI app platform thay LangFlow
TL;DR
  • Dify.ai là platform open source low-code để build AI app: chatbot, RAG, agent, workflow.
  • Self-host trên 1 VPS 8 GB RAM, docker compose 1 lệnh, không phụ thuộc cloud Dify.
  • UI kéo thả tạo workflow, knowledge base PDF/Notion, prompt versioning, A/B test built-in.
  • Hỗ trợ 30+ LLM providers (OpenAI, Anthropic, Gemini, Ollama, local), unified billing.
  • So với LangFlow: ổn định hơn, UI mượt, có user management, sẵn sàng production cho team nội bộ.

PM startup muốn build AI chatbot tư vấn sản phẩm cho website. Yêu cầu: dùng knowledge base nội bộ, trả lời theo style brand, có analytics conversation, deploy được embed widget. Dev không có thời gian code LangChain từ đầu. Cloud SaaS như Voiceflow hay Botpress đắt, lock data. Dify.ai là điểm giao thoa tốt nhất: low-code UI để PM tự build, full feature production, self-host miễn phí.

Bài này hướng dẫn deploy Dify.ai community edition lên VPS, kết nối Claude/GPT/Gemini, tạo knowledge base RAG đầu tiên, build chatbot, embed vào website. Kèm so sánh với LangFlow và Flowise để chọn đúng tool. Tham khảo workflow của vài startup VN đang dùng Dify làm AI gateway nội bộ.

Dify là gì và nó giải quyết gì?

Dify đứng giữa 2 cực:

  • Một cực là code thuần (LangChain, LlamaIndex): cực kỳ flexible, cần dev senior, mất tuần để có MVP.
  • Cực kia là SaaS no-code (Voiceflow, ChatBase): nhanh nhưng đắt, lock data, không tùy biến sâu.

Dify cho phép: PM/marketer tạo chatbot trong 30 phút mà không code; dev có quyền truy cập API + Python script cho logic phức tạp. Bao gồm:

  • Apps: chatbot, completion, agent, workflow, chatflow - mỗi loại template sẵn.
  • Knowledge: upload PDF, Markdown, Notion, Confluence, website crawl, tự tạo vector DB.
  • Tools: web search, code interpreter, calendar, custom HTTP node.
  • Models: manage 30+ LLM provider, central API key, quota per app.
  • Logs: mọi conversation lưu chi tiết, export CSV, debug từng step.
  • API: mỗi app expose REST API + SDK Python/JS để code app khác gọi.

Yêu cầu VPS

Quy môRAMvCPUSSD
Dev / test cá nhân4 GB2 vCPU40 GB
Production team 1-3 app, <1000 chat/ngày8 GB4 vCPU80 GB
5-10 app, 5000+ chat/ngày16 GB6 vCPU160 GB
+ Knowledge base lớn, vector DB local16-32 GB8 vCPU320 GB

Dify dùng PostgreSQL + Redis + Weaviate/Qdrant cho vector store. Stack 4-5 container, RAM tiêu thụ mạnh khi bật vector DB. AlmaLinux 9 hoặc Ubuntu 24 đều OK.

Cài Dify community edition

# Cài Docker + Compose
curl -fsSL https://get.docker.com | sh
sudo systemctl enable --now docker

# Clone repo
cd /srv
sudo git clone https://github.com/langgenius/dify.git
cd dify/docker

# Copy env mẫu
sudo cp .env.example .env

# Sửa các giá trị quan trọng trong .env
sudo nano .env

Trong file .env, sửa tối thiểu:

SECRET_KEY=GENERATE-32-CHAR-RANDOM
CONSOLE_API_URL=https://dify.your-domain.com
CONSOLE_WEB_URL=https://dify.your-domain.com
SERVICE_API_URL=https://dify.your-domain.com
APP_API_URL=https://dify.your-domain.com
APP_WEB_URL=https://dify.your-domain.com

# Mật khẩu Postgres và Redis - đổi mạnh
DB_PASSWORD=strong-db-password
REDIS_PASSWORD=strong-redis-password

# Init admin password lần đầu
INIT_PASSWORD=initial-admin-password

# Storage type: local (mặc định) hoặc s3
STORAGE_TYPE=local

# Vector DB: weaviate (mặc định), qdrant, milvus, pgvector
VECTOR_STORE=weaviate

Chạy stack:

sudo docker compose up -d
# Đợi 2-3 phút cho images pull và init

# Kiểm tra status
sudo docker compose ps

# Xem log nếu có lỗi
sudo docker compose logs -f api

Đặt Caddy reverse proxy trước port 80 (Dify nginx container expose). File Caddyfile:

dify.your-domain.com {
  reverse_proxy 127.0.0.1:80
  encode gzip
}

Vào https://dify.your-domain.com, tạo tài khoản admin (email + INIT_PASSWORD đã set ở .env), enter workspace.

Kết nối LLM provider

Sau khi vào dashboard, click Settings -> Model Provider. Add từng provider:

  • OpenAI: paste API key, chọn các model muốn enable.
  • Anthropic: paste key Claude, chọn Opus/Sonnet/Haiku.
  • Google: paste Gemini key.
  • Ollama local: nếu chạy Ollama trên cùng VPS, thêm base URL http://host.docker.internal:11434
  • OpenRouter / LiteLLM proxy: paste base URL của gateway nội bộ (xem bài LiteLLM).

Set 1 model làm "System Model" - dùng cho task hệ thống như tóm tắt log, generate suggestion. Set 1 model "Embedding" - dùng cho knowledge base RAG (text-embedding-3-small là rẻ + đủ tốt).

Tạo Knowledge Base RAG đầu tiên

Click Knowledge -> Create. Có 3 cách import:

  1. Upload files: kéo thả PDF, DOCX, Markdown, HTML. Tối đa 15 MB/file (config được).
  2. Sync website: nhập URL, Dify crawl tự động bằng Jina Reader hoặc Firecrawl.
  3. Notion/Confluence: OAuth, chọn page/database, sync hằng ngày.

Sau khi upload, Dify chia chunk (mặc định 500 token), embedding, lưu vào vector DB. Test bằng tab "Retrieval Testing" - nhập query, xem chunk nào match top-K. Tinh chỉnh: chunk size, overlap, top-K, similarity threshold, hybrid search BM25 + semantic, rerank model.

Build chatbot app đầu tiên

Click Studio -> Create from Blank -> Chatbot. Đặt tên "Tu van san pham". Trong canvas:

  1. Set Model: claude-sonnet-4-5, temperature 0.3, max tokens 800.
  2. Instructions (system prompt): "Bạn là trợ lý tư vấn sản phẩm của brand XYZ. Trả lời ngắn gọn, tiếng Việt, dựa trên knowledge base. Khi không chắc, đề xuất liên hệ hotline."
  3. Context: chọn knowledge base "Catalog san pham" đã tạo ở bước trước.
  4. Variables: thêm input "user_name" (string) để personalize.
  5. Opening statement: "Xin chào! Tôi có thể tư vấn gì cho bạn về sản phẩm của chúng tôi?"
  6. Suggested questions: list 3-5 câu user hay hỏi.

Click Debug, test chat. Nếu OK, click Publish. Dify cho bạn 3 cách distribute:

  • Web App: URL public dạng https://dify.your-domain.com/chat/abc123 với UI chat đầy đủ.
  • Embed iframe: <iframe> snippet để paste vào website.
  • Embed chat bubble: 1 đoạn script JS, thêm vào trước </body>, hiện chat bubble bottom-right.
  • API: REST endpoint POST /chat-messages với app key, gọi từ backend.

Workflow nâng cao: agent với tool

Khi cần chatbot thực hiện hành động (gọi API nội bộ, query DB, search web), tạo app loại Workflow. Drag các node:

  • Start: input từ user.
  • Question Classifier: phân loại intent bằng LLM.
  • HTTP Request: gọi API CRM lấy thông tin khách.
  • Knowledge Retrieval: truy xuất knowledge base.
  • LLM: tổng hợp prompt với context + API response, sinh câu trả lời.
  • Answer: return cho user.

Mỗi node có input/output variable, kéo dây nối. Có condition branch (if/else), iteration (lặp qua list), parameter extractor (parse câu user thành JSON). Đủ build agent phức tạp cấp doanh nghiệp mà không code dòng Python nào.

Quản lý team và quota

Dify hỗ trợ multi-user trong 1 workspace với roles: owner, admin, editor, normal. Cấp quyền:

  • PM, marketer: editor, được tạo và edit app, dùng knowledge base.
  • Dev junior: normal, chỉ chat thử app.
  • CTO, owner: admin, config model provider, billing, member.

Set quota theo app hoặc theo user: max conversation/ngày, max token/tháng. Quan trọng khi dùng model đắt (GPT-5/Opus), tránh 1 dev nghịch ngợm cháy budget.

So sánh với LangFlow và Flowise

Khía cạnhDifyLangFlowFlowise
UI/UXMượt, production-gradeĐẹp, theo LangChainĐơn giản, JS-first
User managementCó roles + workspaceCó (Datastax)Cơ bản
Knowledge base built-inCó, mạnhPhải tự xâyCó chunker và embed
API/SDKREST + Python/JS SDKRESTREST
Vector DB built-inWeaviate, Qdrant, Milvus, pgvectorBring your ownTự config
BackendPython (Flask)PythonNode.js
Production readyCaoTrung bìnhTrung bình
Community40k+ star GitHub30k+ star30k+ star

Chọn Dify nếu cần platform team-friendly cho PM/marketer + dev cùng làm. Chọn LangFlow nếu code base bạn đã dùng LangChain. Chọn Flowise nếu stack Node và yêu thích visual programming nhẹ.

Backup và update

  • Backup Postgres hằng đêm: dump database dify, lưu B2/R2.
  • Backup folder storage/ (file upload knowledge base) - không quá lớn, sync rclone.
  • Update: git pull && docker compose pull && docker compose up -d. Đọc release note Dify trước khi upgrade major version.
  • Snapshot VPS trước update lớn để rollback nhanh.

Bẫy thường gặp

Triệu chứngCách fix
Upload file không thành côngTăng nginx client_max_body_size lên 50m
Embedding tốn nhiều thời gianChọn provider local Ollama embed hoặc dùng batch nhỏ hơn
Chat không nhớ contextBật memory trong app settings, set memory window 10-20 turns
Knowledge retrieval không relevantHạ similarity threshold xuống 0.4, tăng top-K 5-8, bật hybrid search
Container API restart loopHết RAM, xem docker stats, nâng VPS lên 16 GB
Cloud VPS cho vibe coder

VPS đủ chỗ cho Dify + Weaviate + Postgres + Redis

Cloud VPS TND sẵn AlmaLinux 9, Ubuntu 22/24, Debian 12/13. SSD CEPH, snapshot 1-click, backup hằng ngày, network 200Mbps trong nước. Gói 8GB RAM thoải mái chạy Dify community + vector DB cho team 30 user và 1k chat/ngày.

Xem 8 cấu hình Cloud VPS →

FAQ

Dify community vs Dify cloud khác gì?

Community edition là open source, miễn phí, self-host, đủ features cho 95% use case. Cloud edition của Dify là SaaS có thêm: high availability, SLA, audit log nâng cao, SSO enterprise, billing centralized. Self-host khi data sovereignty, ngân sách thấp, hoặc workload không quá cao.

Có thể dùng Dify để build chatbot Zalo/Messenger không?

Có, qua webhook integration. Mỗi Dify app expose REST API, bạn viết 1 service nhỏ nhận webhook từ Zalo OA / Messenger Platform, forward message vào Dify, lấy response trả lại. Thường code 100-200 dòng Python với FastAPI là xong. Đặt service này cùng VPS với Dify cho gọn.

Hỗ trợ tiếng Việt tốt không?

UI có tiếng Việt (chưa hoàn chỉnh 100% nhưng đủ dùng). Knowledge base xử lý PDF tiếng Việt tốt, embedding multilingual của text-embedding-3-small/-large hỗ trợ tốt. Khi đặt system prompt yêu cầu trả lời tiếng Việt, Claude/GPT/Gemini đều trả lời tự nhiên.

Cost ước tính cho 1 chatbot 5000 chat/tháng?

Giả sử mỗi chat 5 turn, input 1k token output 300 token, dùng Claude Sonnet: ~10 USD/tháng LLM. Embedding 100k token cho knowledge base 50 page: ~0.005 USD (text-embedding-3-small). VPS 8GB: ~500k VND/tháng. Tổng dưới 700k VND/tháng cho 1 chatbot khá lớn, rẻ hơn nhiều so với SaaS ChatBase 50+ USD/tháng.

Khi nào nên migrate từ Dify sang code thuần?

Khi logic agent quá phức tạp (10+ branch, state machine), khi cần custom node mà Dify chưa hỗ trợ, khi throughput vượt 100k chat/ngày cần tối ưu sâu, hoặc khi enterprise customer yêu cầu stack thuần Python để audit. Với 80% startup, Dify là điểm dừng đủ tốt, không cần move sang code thuần.