SSD Nodes Learn Hosting plans →
Hướng dẫn Matt ConnorBởi Matt Connor · Cập nhật ngày 2026-08-28

Tự host Dify trên VPS bằng Docker Compose

Dify chạy 6 container, nên bạn cần VPS có 4 GB RAM. Đổi mọi secret trong .env trước khi khởi động, rồi tạo tài khoản admin tại /install.

Dify là gì và bạn sẽ đăng ký chạy những gì

Dify là một nền tảng có thể tự host để xây dựng ứng dụng trên các mô hình ngôn ngữ lớn. Bạn có giao diện web để thiết kế ứng dụng chat, agent và pipeline retrieval; một API để gọi chúng từ code của bạn; cùng một nơi để quản lý prompt, dataset và model key. Đây là loại công cụ mà một nhóm nhỏ triển khai để mọi người cùng xây dựng trên một nền tảng private dùng chung, thay vì rải API key trong nhiều script. Nếu các khái niệm như agent, tool call và pipeline retrieval vẫn chưa rõ, tìm hiểu các khái niệm đó từ đầu trước sẽ giúp bạn đọc các màn hình builder của Dify như những control quen thuộc, thay vì một loạt switch không có nhãn.

Tự vận hành Dify nghĩa là phải quản lý nhiều thành phần cùng lúc. Dify được phát hành dưới dạng một tập hợp Docker container: API server, background worker, web frontend, database Postgres, Redis cache và vector database. Tất cả được kết nối với nhau bằng Docker Compose. Đây không phải là một binary đơn lẻ, nhưng Compose xử lý phần kết nối. VPS còn trống vài gigabyte RAM thường chạy Dify ổn định. Nếu VPS đó còn chạy dịch vụ khác, hãy sizing dựa trên số liệu đo thực tế thay vì thông số được công bố. Mức RAM thực tế của PhotoPrism và Immich cao hơn nhiều so với mức tối thiểu được công bố. Photo server dùng chung máy sẽ làm database và vector store của Dify thiếu tài nguyên trước. CPU contention cũng gây vấn đề tương tự. Một thư viện Jellyfin được thay giao diện thành cửa hàng video thập niên 90 gần như không tốn tài nguyên khi chỉ duyệt artwork. Nhưng ngay khi có người bắt đầu transcode, worker của Dify sẽ phải xếp hàng phía sau. Điểm thuận lợi là số lượng container của Dify không đổi, dù bạn build bao nhiêu app trên đó. Cấu trúc chi phí này dễ kiểm soát hơn OpenBot, nơi mỗi AI coworker có một container và browser riêng, và mỗi nhân sự mới lại nâng mức RAM tối thiểu lên.

Vì Dify lưu model API key của bạn và thường cả các tài liệu private bạn đã nạp để retrieval, hãy xem máy chạy Dify là một hệ thống nhạy cảm ngay từ phút đầu tiên. Hướng dẫn này cài đặt Dify, sau đó harden hệ thống theo cách bạn sẽ harden bất kỳ service nào lưu secret.

Điều kiện cần

Bạn cần một VPS chạy Ubuntu 24.04, đã cài Docker và Docker Compose plugin, cùng một user có sudo hoặc thuộc group docker. Nếu bạn mới dùng Docker, phần cơ bản về Docker Compose trên VPS hướng dẫn cách cài đặt và các lệnh cốt lõi được sử dụng trong tài liệu này. Bạn nên có một domain name trỏ đến server, vì Dify nên chạy sau lớp TLS thay vì truy cập trực tiếp bằng địa chỉ IP.

Bước 1: Tải Dify và các file Compose

Dify lưu cấu hình Docker trong repository chính. Clone repository rồi chuyển vào thư mục docker:

git clone https://github.com/langgenius/dify.git
cd dify/docker
cp .env.example .env

File .env chứa toàn bộ cấu hình. Đọc file này trước khi khởi động bất kỳ thứ gì. Trước tiên, hãy chú ý các giá trị dùng để đặt password và secret: SECRET_KEY, password của Postgres và password của Redis. File mẫu đi kèm các giá trị placeholder. Giữ nguyên các giá trị này là nguyên nhân phổ biến nhất khiến một phiên bản Dify tự host bị breach. Tạo một secret key thực:

openssl rand -base64 42

Dán secret key đó vào SECRET_KEY, rồi đặt một giá trị mạnh và duy nhất cho từng trường password trong file.

Bước 2: Khởi động

Khởi động stack:

docker compose up -d

Lần chạy đầu tiên sẽ tải một số image và khởi tạo database, vì vậy hãy chờ khoảng một phút. Kiểm tra để bảo đảm các container đều hoạt động bình thường:

docker compose ps

Mọi service đều phải đọc running. Theo mặc định, Dify cung cấp giao diện web thông qua một container nginx đi kèm trên cổng 80. Trong lần đầu truy cập http://YOUR_SERVER/install, bạn tạo tài khoản admin. Hãy thực hiện ngay việc này trước khi bất kỳ thành phần nào khác có thể truy cập cổng đó, vì khi tài khoản này chưa tồn tại, bất kỳ ai tải trang cũng có thể đăng ký tài khoản và chiếm quyền instance của bạn.

Bước 3: Không để dịch vụ hoạt động trực tiếp. Đặt TLS và firewall ở phía trước

Đây là điểm 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 sự cố bắt đầu. nginx của Dify lắng nghe trên cổng 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à các model key truyền qua HTTP thuần, cũng không muốn các service nội bộ có thể truy cập từ bên ngoài.

Khóa máy chủ bằng firewall có chính sách mặc định từ chối, chỉ cho phép SSH và web traffic:

sudo ufw default deny incoming
sudo ufw allow 22/tcp
sudo ufw allow 80/tcp
sudo ufw allow 443/tcp
sudo ufw enable

Hãy nhớ rằng firewall chỉ áp dụng cho IPv4 có thể để các cổng tương tự vẫn mở trên IPv6. Đây là khoảng trống firewall IPv6 khiến rất nhiều người tự host gặp sự cố. Xác nhận rằng cả hai stack đều đã được lọc.

Đối với TLS, cách gọn nhất là bind web port của Dify vào loopback và chạy reverse proxy phía trước với chứng chỉ Let's Encrypt. Khi đó, thứ duy nhất trên public Internet là proxy đang xử lý HTTPS. .env của Dify cho phép bạn thay đổi port được expose; đặt port này bind vào 127.0.0.1 rồi trỏ proxy đến đó. Các nguyên tắc hardening agent trong chạy an toàn một AI agent trên VPS cũng áp dụng ở đây: giữ các thành phần thay đổi liên tục trên loopback, chỉ expose những gì bắt buộc phải public và để một front door đã harden xử lý TLS. Nếu interface của một tool chỉ dành cho bạn và hoàn toàn không cần certificate, hãy bỏ qua proxy và truy cập qua SSH tunnel, giống cách tự host open-kritt security scanner giữ dashboard bind vào loopback rồi forward đến laptop thay vì public nó. Nếu cả team cần dùng Dify nhưng không muốn public Internet truy cập, overlay network sẽ mở rộng cách này vượt ra ngoài một laptop: quảng bá private subnet của server đến tailnet cho phép mọi thiết bị đã được phê duyệt truy cập builder bằng private address, trong khi firewall vẫn chặn mọi thứ ngoại trừ SSH. Nếu bạn quản trị máy này bằng coding agent thay vì thao tác thủ công, hãy xác định trước agent được phép làm gì khi không có giám sát trước khi giao quyền cho nó, vì permission mode bạn để Claude Code sử dụng quyết định agent có dừng lại để hỏi trước khi ghi đè .env hoặc restart stack hay không. Nếu bạn có một session đang tail container log trong khi session khác chỉnh proxy config, hai session đó có thể truyền text cho nhau trên cùng một máy, hiệu quả hơn việc phải liên tục copy output giữa các terminal mỗi lần restart stack.

Bước 4: Luôn cập nhật bản vá

Dify phát triển nhanh, và các bản cập nhật thường có bản sửa lỗi bảo mật. Cập nhật gồm pull và restart từ thư mục docker:

git pull
docker compose pull
docker compose up -d

Đọc release notes trước khi nâng cấp lên phiên bản chính mới, vì đôi khi Dify thay đổi schema .env giữa các bản phát hành. Một biến mới mà bạn chưa thiết lập có thể khiến container không khởi động được.

Bước 5: Sao lưu những dữ liệu không thể tạo lại

Có 2 thứ trên một máy Dify không thể thay thế: database Postgres chứa các app, user và thiết lập của bạn, cùng volume lưu tài liệu đã upload và vector index. Cả 2 đều nằm trong Docker volume ở thư mục docker. Hãy snapshot chúng theo lịch và sao chép các snapshot ra ngoài server. Các snapshot này chứa mọi model key và tài liệu đã upload trong một file duy nhất, vì vậy hãy mã hóa chúng trước khi đưa ra khỏi server, cũng vì lý do một bản sao lưu Vaultwarden có thể trở thành điểm yếu của một password server vốn được bảo mật tốt. Model API key có thể cấp lại; app mà bạn mất cả tuần để xây dựng thì không thể. Cách suy luận này cũng áp dụng cho mọi agent có state cần tồn tại lâu hơn máy đang chạy nó: duy trì KiroCrew chạy dưới dạng container luôn bật thực chất là snapshot memory và lịch chạy, nếu không chúng sẽ biến mất ở lần reboot tiếp theo.

Khi muốn các agent xây dựng tại đây truy cập vượt ra ngoài dataset của bạn và tìm kiếm web trực tiếp, trỏ chúng đến một instance SearXNG tự host sẽ giữ luồng truy vấn trên phần cứng do bạn kiểm soát. Tuy nhiên, bạn nên tìm hiểu về bề mặt tấn công prompt injection phát sinh trước khi bật tính năng này. Với một agent tự chủ hơn, có thể chạy code, hãy xem tự host Agent Zero. Tự xây dựng AI agent trên một VPS trình bày các nền tảng dùng chung cho tất cả các agent này.

FAQ

Yêu cầu hệ thống để tự host Dify là gì?

Dify chạy dưới dạng một stack Docker Compose gồm khoảng nửa tá container. Vì vậy, hãy dùng VPS có ít nhất 2 GB RAM trống, lý tưởng là 4 GB, cùng với vài nhân CPU và đủ dung lượng ổ đĩa cho tài liệu đã tải lên và vector index. Áp lực bộ nhớ chủ yếu đến từ database và vector store, không phải từ chính Dify.

Có an toàn khi expose Dify trực tiếp trên port 80 không?

Không. Web server đi kèm Dify lắng nghe HTTP thuần và đứng trước trang đăng nhập admin cùng các model API key của bạn. Hãy đặt reverse proxy có certificate Let's Encrypt ở phía trước, bind port riêng của Dify vào loopback và chỉ để HTTPS proxy nhận traffic từ Internet. Kết hợp với firewall default-deny áp dụng cho cả IPv4 và IPv6.

Làm cách nào để cập nhật Dify tự host?

Từ thư mục docker, chạy git pull, sau đó chạy docker compose pulldocker compose up -d để tải image mới và restart. Hãy đọc release notes trước, vì đôi khi Dify thêm các biến .env mới giữa các version. Nếu thiếu một biến, container có thể 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 admin account ngay. Cho đến khi account này tồn tại, bất kỳ ai truy cập được trang đều có thể claim account đó. Hãy thiết lập account ngay khi các container đã healthy và trước khi mở firewall cho Internet.