AI & Automation (vnROM)

Cover image for Hướng dẫn Self-hosted Dify từ A-Z: Xây dựng AI App & Chatbot không cần code
Duy Nghiện
Duy Nghiện

Posted on • Originally published at vnrom.net

Hướng dẫn Self-hosted Dify từ A-Z: Xây dựng AI App & Chatbot không cần code

Chào ae,

Gần đây phong trào làm AI App, Chatbot riêng để phục vụ công việc hoặc tích hợp vào hệ thống đang rất hot. Nhiều bác chắc đã nghe qua LangChain, Flowise hay LangFlow. Tuy nhiên, nếu muốn một nền tảng All-in-one, ổn định để chạy production thay vì chỉ kéo thả workflow để test, thì Dify hiện đang là cái tên rất đáng thử.

Bài này mình sẽ hướng dẫn chi tiết cách Self-hosted Dify trên server cá nhân (hoặc máy local như Mac Mini/PC) và chia sẻ một số kinh nghiệm khi kết hợp với Local LLM (Ollama) hay n8n.

dify workflow


1. Tại sao nên chọn Dify?

Khác với các công cụ thuần về xây dựng workflow như Flowise, Dify định vị mình là một LLM App Development Platform.

  • Backend-as-a-Service: Nó lo hết phần quản lý database, API, log, user session. Bác chỉ cần tập trung vào prompt và logic.
  • Hỗ trợ RAG cực mạnh: Upload PDF, Word, Web scraper... Dify tự động chunking và embedding (dùng OpenAI hoặc local model đều được).
  • Giao diện người dùng sẵn có: Build xong có ngay Web App đẹp, hoặc nhúng Iframe vào web mình luôn.
  • API-first: Cái này dân dev rất thích. Build xong bot, Dify nhả ra API chuẩn chỉnh để tích hợp vào n8n, Telegram, Zalo...

2. Chuẩn bị

Để chạy mượt mà, cấu hình tối thiểu khuyến nghị:

  • CPU: 2 Core trở lên.
  • RAM: Tối thiểu 4GB (Khuyên dùng 8GB+ nếu chạy kèm Vector DB nặng).
  • OS: Linux (Ubuntu/Debian) hoặc macOS (Docker Desktop).
  • Phần mềm: Đã cài sẵn DockerDocker Compose.

Note: Bác nào dùng Mac Mini M4 làm homelab như mình thì chạy cực mượt, không lo vấn đề tương thích vì Docker trên Apple Silicon giờ rất ổn định.


3. Hướng dẫn cài đặt với Docker Compose

Cách nhanh và chuẩn nhất là dùng Docker Compose chính chủ.

Bước 1: Clone source code về máy
Mở terminal và chạy:

git clone https://github.com/langgenius/dify.git
Enter fullscreen mode Exit fullscreen mode

Bước 2: Di chuyển vào thư mục docker

cd dify/docker
Enter fullscreen mode Exit fullscreen mode

Bước 3: Cấu hình biến môi trường
Copy file cấu hình mẫu ra file chính thức:

cp .env.example .env
Enter fullscreen mode Exit fullscreen mode

Tip: Lúc này nếu muốn đổi port (mặc định là 80), anh em mở file .env lên, tìm dòng EXPOSE_NGINX_PORT hoặc NGINX_PORT để sửa lại (ví dụ: 8080). Đừng quên sửa cả NEXT_PUBLIC_API_BASE_URL nếu chạy trên domain riêng.

Bước 4: Khởi chạy Containers

docker compose up -d
Enter fullscreen mode Exit fullscreen mode

Lần đầu chạy sẽ mất vài phút để pull images (Postgres, Redis, Weaviate, Sandbox, API, Frontend...). Sau khi chạy xong, kiểm tra trạng thái:

docker compose ps
Enter fullscreen mode Exit fullscreen mode

Nếu thấy các container đều Up là ngon.

Bước 5: Truy cập
Mở trình duyệt vào http://localhost (hoặc http://<IP-Server-Của-Bác>).
Tạo tài khoản Admin đầu tiên và đăng nhập.


4. Kinh nghiệm cấu hình & Sử dụng thực tế

Kết nối với Local LLM (Ollama)

Đây là phần nhiều bác vướng nhất. Nếu bác chạy Ollama trên máy host (ví dụ máy Mac đang cài Dify), thì Dify trong Docker sẽ không nhìn thấy Ollama qua localhost.

Cách fix:

  1. Đảm bảo Ollama lắng nghe ở mọi IP (0.0.0.0) chứ không chỉ localhost.
    • Trên Mac: launchctl setenv OLLAMA_HOST "0.0.0.0" (hoặc dùng app như Ollama GUI để chỉnh).
    • Trên Linux: Sửa service systemd, thêm Environment="OLLAMA_HOST=0.0.0.0".
  2. Trong Dify > Settings > Model Providers > Ollama:
    • Base URL: http://host.docker.internal:11434 (Nếu dùng Docker Desktop Mac/Win).[5]
    • Trên Linux server: Dùng IP LAN của máy, ví dụ http://192.168.1.10:11434.

Tích hợp RAG

Dify chia văn bản (chunking) rất thông minh.

  • Vào tab Knowledge -> Upload file PDF/Doc.
  • Chọn chế độ Automatic hoặc Custom để chỉnh Top K, Score Threshold.
  • Lưu ý: Nếu không có tiền mua API OpenAI Embeddings, bác có thể dùng luôn model nomic-embed-text chạy trên Ollama để làm embedding local, vừa nhanh vừa free.[6]

Tích hợp n8n

Đây là "vũ khí bí mật". Thay vì logic phức tạp trong n8n, bác đẩy hết xử lý ngôn ngữ sang Dify.

  • Trong Dify: Vào App -> API Access -> Tạo API Key.
  • Trong n8n: Dùng node HTTP Request.
    • Method: POST
    • URL: http://<Dify-IP>/v1/chat-messages
    • Header: Authorization: Bearer <API-Key-Dify>
    • Body: Gửi JSON chứa queryinputs.

5. Lưu ý khi vận hành & Update

Dựa trên các issues gần đây trên GitHub [Attached File: langgenius/dify], có vài điểm cần chú ý:

  1. Backup trước khi Update:
    Cộng đồng phản ánh việc nâng cấp version (ví dụ từ 1.9.1 lên 1.9.2) đôi khi làm lỗi Knowledge Base cũ. Luôn backup thư mục volumes của Docker trước khi pull image mới.

    Lệnh update chuẩn:

    cd dify/docker
    docker compose down
    git pull origin main
    # So sánh file .env hiện tại với .env.example mới để thêm biến thiếu
    docker compose up -d
    
  2. Lỗi upload file/Image:

    Nếu upload file lớn bị lỗi hoặc treo, kiểm tra lại config CLIENT_MAX_BODY_SIZE trong Nginx của Dify (trong file cấu hình docker) hoặc proxy phía trước nếu bác dùng Cloudflare.

  3. Database: Dify dùng PostgreSQL và Vector DB (Weaviate/Qdrant). Nếu chạy production lâu dài, nên cân nhắc tách Database ra server riêng hoặc cấu hình backup định kỳ, tránh mất dữ liệu training bot.


Dify thực sự là một nền tảng mạnh mẽ giúp anh em dev và creator rút ngắn thời gian build AI App từ vài tuần xuống vài giờ. Việc self-host giúp mình làm chủ dữ liệu và tiết kiệm chi phí token đáng kể nếu kết hợp khéo léo với Local Model hoặc với CLIProxyAPI

Anh em có thắc mắc gì về config hay integration cứ comment bên dưới, mình sẽ hỗ trợ giải đáp nhé!

Top comments (0)