Cài đặt và cấu hình Dify trên Linux với Docker: Tự dựng AI Workflow và RAG thực chiến

Artificial Intelligence tutorial - IT technology blog
Artificial Intelligence tutorial - IT technology blog

Tự code toàn bộ pipeline RAG từ đầu bằng LangChain hay LlamaIndex tốn rất nhiều thời gian, nhất là khi phải dựng UI, quản lý session và phân quyền. Sau 6 tháng đưa Dify vào phục vụ hơn 50 nhân viên nội bộ, mình thấy đây là nền tảng LLMOps on-premise cân bằng tốt nhất giữa tính tiện dụng và độ linh hoạt.

1. Quick Start: Triển khai Dify trong 5 phút

Chuẩn bị một VPS chạy Ubuntu 22.04 hoặc 24.04 đã cài sẵn docker và docker compose. Bạn chỉ cần 4 bước:

# 1. Clone repository chính thức
git clone https://github.com/langgenius/dify.git
cd dify/docker

# 2. Tạo file môi trường từ template
cp .env.example .env

# 3. Kéo image và khởi chạy toàn bộ service
docker compose up -d

# 4. Kiểm tra trạng thái các container
docker compose ps

Chờ khoảng 1-2 phút cho các service khởi động xong. Khi toàn bộ container báo trạng thái Up, bạn mở trình duyệt và truy cập:

http://<IP_SERVER_CUA_BAN>/install

Thiết lập tài khoản Admin đầu tiên để hoàn tất quá trình khởi tạo và vào thẳng giao diện Studio.

2. Kiến trúc dịch vụ và các biến môi trường cốt lõi

Dify không phải là một container đơn lẻ. Hệ thống gồm một cụm microservices phối hợp chặt chẽ với nhau.

Các service chạy ngầm quan trọng

  • dify-web (Nginx/Frontend): Giao diện Next.js cho người dùng và bảng quản trị.
  • dify-api: Backend Python (Flask/Celery) xử lý nghiệp vụ, điều phối LLM và trích xuất dữ liệu.
  • dify-sandbox: Môi trường cô lập an toàn để chạy code Python/Node.js do LLM sinh ra.
  • Vector Database: Mặc định tích hợp Weaviate (hoặc Qdrant) để lưu và truy vấn vector embedding.
  • PostgreSQL & Redis: Lưu metadata, lịch sử hội thoại và quản lý hàng đợi tác vụ bất đồng bộ.

Biến môi trường (.env) cần đổi ngay

Tuyệt đối không dùng cấu hình mặc định trên môi trường public. Hãy mở file .env và chỉnh lại các dòng sau:

# Tạo chuỗi bí mật ngẫu nhiên để mã hóa session (chạy: openssl rand -base64 42)
SECRET_KEY=wJalrXUtnFEMI/K7MDENG/bPxRfiCYEXAMPLEKEY789

# Khai báo domain thực tế khi dùng qua Nginx reverse proxy
CONSOLE_WEB_URL=https://dify.example.com
CONSOLE_API_URL=https://dify.example.com
SERVICE_API_URL=https://dify.example.com
APP_WEB_URL=https://dify.example.com

# Nâng giới hạn tải tài liệu làm Knowledge Base (mặc định chỉ 15MB)
UPLOAD_FILE_SIZE_LIMIT=50

3. Cấu hình Nginx Reverse Proxy và SSL

Mở port 80 trực tiếp ra ngoài Internet tiềm ẩn nhiều rủi ro. Bạn nên đặt Dify sau Nginx reverse proxy và cài chứng chỉ Let’s Encrypt.

Dưới đây là file cấu hình Nginx chuẩn, hỗ trợ truyền dữ liệu dạng stream:

server {
    listen 80;
    server_name dify.example.com;
    return 301 https://$host$request_uri;
}

server {
    listen 443 ssl http2;
    server_name dify.example.com;

    ssl_certificate /etc/letsencrypt/live/dify.example.com/fullchain.pem;
    ssl_certificate_key /etc/letsencrypt/live/dify.example.com/privkey.pem;

    client_max_body_size 50M;

    location / {
        proxy_pass http://127.0.0.1:80;
        proxy_set_header Host $host;
        proxy_set_header X-Real-IP $remote_addr;
        proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
        proxy_set_header X-Forwarded-Proto $scheme;

        # Bắt buộc tắt buffering để chatbot stream từng chữ mượt mà (SSE)
        proxy_buffering off;
        proxy_cache off;
        proxy_read_timeout 300s;
        proxy_http_version 1.1;
        proxy_set_header Connection "";
    }
}

Hai thông số proxy_buffering off; và proxy_read_timeout 300s; là bắt buộc. Nếu bật buffer, phản hồi dạng Server-Sent Events (SSE) sẽ bị giữ lại cho đến khi bot sinh xong toàn bộ câu, làm mất trải nghiệm gõ chữ theo thời gian thực.

4. Kinh nghiệm thực chiến khi chạy Production

Dưới đây là 3 bài học thực tế giúp bạn tránh sự cố tràn bộ nhớ và nghẽn hệ thống:

1. Dự toán cấu hình phần cứng

Mức tối thiểu để Dify chạy ổn định là 4 vCPU và 8GB RAM. Khi team bạn upload đồng thời nhiều file PDF nặng từ 100-300 trang, các worker Celery parse văn bản sẽ ăn RAM rất nhanh. Trong trường hợp đó, hãy cấp tối thiểu 16GB RAM kèm 4GB Swap để tránh lỗi OOM (Out Of Memory).

2. Tách Vector DB khi dữ liệu lớn

Container Weaviate đi kèm phù hợp với kho tài liệu dưới 100.000 chunks. Khi dữ liệu vượt mốc này, truy vấn vector sẽ bắt đầu chậm lại. Bạn nên chuyển biến VECTOR_STORE sang cụm Qdrant hoặc Milvus chuyên dụng chạy độc lập trên server riêng.

3. Tự động sao lưu dữ liệu

Toàn bộ cơ sở dữ liệu và file tải lên đều nằm trong thư mục dify/docker/volumes. Đặt một cronjob dump database mỗi đêm để phòng sự cố:

# Dump toàn bộ Postgres database
docker compose exec -T db pg_dumpall -U postgres > /backup/dify_db_$(date +%F).sql

Dify giải quyết gọn gàng khâu giao diện, phân quyền và kết nối model. Nhờ đó, bạn có thể dành trọn thời gian để tinh chỉnh prompt và tối ưu logic nghiệp vụ cho AI Agent.

Share: