Cách tự host Dify trên VPS bằng Docker Compose
Cần VPS tối thiểu 4 GB RAM để chạy 6 containers của Dify. Bạn cần thay đổi toàn bộ secret trong file .env và truy cập /install để tạo tài khoản admin ngay.
Dify là gì, và bạn chuẩn bị chạy cái gì
Dify là một nền tảng có thể tự host để xây dựng ứng dụng dựa trên các mô hình ngôn ngữ lớn (LLM). Bạn sẽ có một giao diện web để thiết kế chat apps, agents, và retrieval pipelines, một API để gọi chúng từ code của bạn, và một nơi duy nhất để quản lý prompt, dataset, và model keys. Đây là loại công cụ mà một team nhỏ thường dựng lên để mọi người cùng xây dựng trên một base chung duy nhất, thay vì để rải rác API keys trong các script.
Tự chạy Dify nghĩa là bạn phải chạy nhiều thành phần khác nhau. Dify được đóng gói dưới dạng một bộ các Docker containers: một API server, một background worker, một web frontend, một Postgres database, một Redis cache, và một vector database, tất cả được kết nối với nhau bằng Docker Compose. Nó phức tạp hơn một file binary đơn lẻ, nhưng Compose sẽ lo phần kết nối, và một VPS có dư khoảng vài GB RAM có thể chạy nó một cách thoải mái.
Vì Dify giữ các model API keys và thường là cả các tài liệu riêng tư mà bạn tải lên để retrieval, hãy coi máy chủ chạy nó là đối tượng nhạy cảm ngay từ phút đầu tiên. Hướng dẫn này sẽ cài đặt Dify, sau đó hardening nó theo cách bạn vẫn làm với bất kỳ service nào chứa các thông tin bí mật (secrets).
Prerequisites
Bạn cần một VPS chạy Ubuntu 24.04 đã cài đặt Docker và plugin Docker Compose, cùng một user có quyền sudo hoặc thuộc group docker. Nếu bạn mới làm quen với Docker, các kiến thức cơ bản về Docker Compose trên VPS sẽ hướng dẫn cách cài đặt và các lệnh cốt lõi mà hướng dẫn này sử dụng. Một domain name trỏ về server là cần thiết, vì bạn sẽ muốn dùng TLS đứng trước Dify thay vì dùng địa chỉ IP trần.
Step 1: Lấy Dify và các file Compose
Dify để cấu hình Docker trong repository chính. Hãy clone nó và di chuyển vào thư mục docker:
git clone https://github.com/langgenius/dify.git
cd dify/docker
cp .env.example .envFile .env chứa toàn bộ cấu hình. Hãy đọc nó trước khi bắt đầu bất cứ thứ gì. Các giá trị quan trọng nhất cần chú ý là các giá trị thiết lập password và secrets: SECRET_KEY, password của Postgres, và password của Redis. File ví dụ đi kèm với các giá trị placeholder, và việc để nguyên chúng là cách phổ biến nhất khiến một bản Dify tự host bị compromise. Hãy tạo một secret key thực sự:
openssl rand -base64 42Dán nó vào SECRET_KEY, và thiết lập một giá trị mạnh, duy nhất cho mọi trường password trong file.
Step 2: Khởi chạy
Dựng stack lên:
docker compose up -dLần chạy đầu tiên sẽ pull nhiều images và khởi tạo database, nên hãy đợi một chút. Kiểm tra xem các container đã ở trạng thái healthy chưa:
docker compose psMọi service đều phải đọc được running. Dify phục vụ web interface thông qua một container nginx đi kèm trên port 80 theo mặc định. Ở lần truy cập đầu tiên vào http://YOUR_SERVER/install, bạn sẽ tạo tài khoản admin. Hãy làm việc đó ngay lập tức, trước khi bất kỳ thứ gì khác có thể truy cập vào port này, vì nếu tài khoản đó chưa tồn tại, bất kỳ ai load được trang web đều có thể chiếm quyền admin và kiểm soát instance của bạn.
Step 3: Không expose trực tiếp. Hãy đặt TLS và firewall ở phía trước
Đây là nơi mà hầu hết các bản cài đặt nhanh dừng lại và cũng là nơi hầu hết các sự cố bắt đầu. nginx của chính Dify lắng nghe trên port 80, không mã hóa, trên mọi interface. Bạn không muốn thông tin đăng nhập admin và model keys của mình truyền qua HTTP trần, và bạn cũng không muốn các service nội bộ có thể truy cập được từ bên ngoài.
Chốt chặt máy chủ bằng một firewall cấu hình default-deny, chỉ cho phép traffic SSH và web:
sudo ufw default deny incoming
sudo ufw allow 22/tcp
sudo ufw allow 80/tcp
sudo ufw allow 443/tcp
sudo ufw enableHãy nhớ rằng một firewall chỉ bao phủ IPv4 có thể để hở các port tương tự trên IPv6, đây là lỗ hổng IPv6 firewall khiến nhiều người tự host gặp rắc rối. Hãy xác nhận cả hai stack đều đã được filter.
Để có TLS, cách sạch nhất là bind web port của Dify vào loopback và chạy một reverse proxy với chứng chỉ Let's Encrypt ở phía trước, để thứ duy nhất trên internet công cộng là proxy đang chạy HTTPS. Tham số .env của Dify cho phép bạn thay đổi port được expose; hãy set nó để bind vào 127.0.0.1 và trỏ proxy của bạn vào đó. Các ý tưởng hardening agent trong chạy AI agent an toàn trên VPS cũng áp dụng được ở đây: giữ các thành phần di động ở loopback, chỉ expose những gì cần thiết phải public, và để một "cánh cửa" đã được hardening duy nhất chạy TLS.
Step 4: Luôn cập nhật bản vá
Dify phát triển rất nhanh, và các bản update thường bao gồm các bản sửa lỗi bảo mật. Cập nhật chỉ đơn giản là pull và restart từ thư mục docker:
git pull
docker compose pull
docker compose up -dHãy đọc release notes trước khi nâng cấp lên version lớn, vì Dify đôi khi thay đổi schema .env giữa các bản release, và một biến môi trường mới mà bạn chưa thiết lập có thể khiến container không khởi động được.
Step 5: Backup những thứ không thể tạo lại được
Có hai thứ trên một máy Dify là không thể thay thế: database Postgres (chứa apps, users, và settings của bạn) và volume lưu trữ các tài liệu đã upload cùng vector index. Cả hai đều nằm trong Docker volumes tại thư mục docker. Hãy snapshot chúng theo lịch trình, và copy các bản snapshot đó ra khỏi server. Một model API key có thể được cấp lại; nhưng ứng dụng bạn dành cả tuần để xây dựng thì không.
Để biết thêm về một agent chạy code tự chủ hơn, hãy xem self-hosting Agent Zero, và xây dựng AI agent riêng trên VPS sẽ bao quát các nền tảng cơ bản cho tất cả chúng.
FAQ
Yêu cầu hệ thống để tự host Dify là gì?
Dify chạy dưới dạng một Docker Compose stack gồm khoảng nửa tá containers, vì vậy hãy chuẩn bị một VPS có ít nhất 2 GB RAM trống, lý tưởng nhất là 4 GB, cộng với một vài CPU cores và đủ dung lượng đĩa cho tài liệu upload và vector index. Áp lực về bộ nhớ (memory pressure) đến từ database và vector store, chứ không phải từ bản thân Dify.
Có an toàn không khi expose Dify trực tiếp trên port 80?
Không. Web server đi kèm của Dify lắng nghe trên HTTP trần, và nó bảo vệ thông tin đăng nhập admin cũng như model API keys của bạn. Hãy đặt một reverse proxy với chứng chỉ Let's Encrypt ở phía trước, bind port của Dify vào loopback, và chỉ để proxy HTTPS đối mặt với internet. Kết hợp điều đó với một firewall cấu hình default-deny cho cả IPv4 và IPv6.
Làm thế nào để update một bản Dify tự host?
Từ thư mục docker, chạy git pull, sau đó chạy docker compose pull và docker compose up -d để fetch images mới và restart. Hãy đọc release notes trước, vì Dify đôi khi thêm các biến .env mới giữa các phiên bản, và thiếu một biến có thể khiến container không khởi động được.
Việc đầu tiên cần làm sau khi cài đặt Dify là gì?
Truy cập /install và tạo tài khoản admin ngay lập tức. Cho đến khi tài khoản đó tồn tại, bất kỳ ai có thể truy cập trang web đều có thể chiếm quyền. Hãy thiết lập nó ngay khi các container đã ở trạng thái healthy, và trước khi bạn mở firewall cho toàn thế giới.