9 phút đọc · Cập nhật 27/09/2026

Self-host n8n trên VPS: cần biết gì trước khi bắt đầu

Self-host n8n trên VPS là tự cài n8n lên máy chủ ảo của mình. Trước khi cài n8n trên VPS, cần biết chọn cấu hình bao nhiêu, cài qua Docker hay npm, chọn cơ sở dữ liệu nào, đặt khoá mã hoá ra sao, và sao lưu thế nào để không mất dữ liệu khi sự cố xảy ra.

Cấu hình VPS theo khối lượng công việc

VPS 2 vCPU, 2GB RAM chạy được n8n cho vài workflow đơn giản — gửi Zalo, ghi Google Sheets, đối soát cơ bản. VPS 2 vCPU, 4GB RAM thoải mái hơn: chục workflow chạy song song, kèm cơ sở dữ liệu PostgreSQL ngay trên cùng máy. Ổ đĩa 20GB SSD đủ cho hệ điều hành, n8n và database lúc khởi đầu.

Khi workflow gọi AI (tạo nội dung, xử lý ảnh, agent nhiều bước) hoặc cắt ghép video tự động, mức dùng RAM và CPU tăng nhanh hơn vì mỗi tác vụ giữ bộ nhớ lâu và xử lý file nặng hơn hẳn workflow văn bản thông thường — nên tính từ 4 vCPU, 8GB RAM trở lên, và theo dõi mức dùng thực tế trong tuần đầu để nâng cấu hình kịp lúc thay vì đợi máy đơ giữa chừng.

Khối lượng công việcCấu hình đề xuất
Vài workflow đơn giản, chạy vài lần mỗi giờ2 vCPU, 2GB RAM, 20GB SSD
Chục workflow, có PostgreSQL riêng2 vCPU, 4GB RAM, 40GB SSD
AI agent, xử lý ảnh/video, nhiều workflow chạy đồng thời4 vCPU trở lên, 8GB RAM trở lên

Cài n8n trên VPS bằng Docker Compose hay qua npm

n8n hỗ trợ cả hai cách cài trên VPS chạy Linux: dùng Docker Compose hoặc cài trực tiếp bằng npm/Node.js. Docker Compose đóng gói n8n cùng đúng phiên bản Node.js cần thiết trong một container, tránh xung đột với phần mềm khác trên máy, và nâng cấp chỉ bằng vài lệnh kéo image mới.

Cài qua npm phù hợp khi đã quen quản trị Linux và muốn kiểm soát từng thành phần, nhưng phải tự cài đúng phiên bản Node.js theo yêu cầu của n8n và tự lo cho n8n khởi động lại cùng máy chủ (qua systemd hoặc pm2). Với người mới tự host lần đầu, Docker Compose là lựa chọn an toàn và dễ bảo trì hơn.

  • Docker Compose: một file cấu hình duy nhất, nâng cấp bằng cách kéo image mới rồi khởi động lại container
  • npm: cài Node.js đúng bản n8n yêu cầu, cài n8n toàn cục, tự cấu hình chạy nền và tự khởi động lại khi reboot
  • Cả hai cách đều cần đứng sau reverse proxy — không mở thẳng cổng mặc định của n8n ra Internet

Gắn tên miền, reverse proxy và chứng chỉ SSL

n8n cần chạy dưới HTTPS để webhook hoạt động ổn định — nhiều dịch vụ bên ngoài (cổng thanh toán, ngân hàng, Zalo OA) từ chối gửi dữ liệu về địa chỉ http. Cách chuẩn là trỏ một tên miền phụ (ví dụ n8n.tenmien.vn) về IP của VPS, rồi dùng nginx hoặc Caddy làm reverse proxy đứng trước n8n, xin chứng chỉ SSL miễn phí qua certbot.

Sau khi có tên miền và SSL, cần khai báo cho n8n biết địa chỉ công khai của chính nó: đặt N8N_HOST là tên miền, N8N_PROTOCOL=https, và N8N_WEBHOOK_URL là URL đầy đủ kèm https — thiếu bước này, n8n hiển thị sai địa chỉ nội bộ trong URL webhook và các dịch vụ bên ngoài gọi vào sẽ thất bại. Anh/chị cũng cần đặt N8N_PROXY_HOPS=1 ngay khi n8n đứng sau một lớp reverse proxy (nginx hoặc Caddy) — kể cả khi không dùng thêm Cloudflare — để n8n nhận đúng địa chỉ IP người dùng thay vì địa chỉ của proxy; nếu có thêm một lớp proxy nữa phía trước (ví dụ Cloudflare), tăng số này lên 2.

Chọn cơ sở dữ liệu: SQLite mặc định hay chuyển sang PostgreSQL

n8n dùng SQLite làm cơ sở dữ liệu mặc định — một file duy nhất, không cần cài thêm gì, phù hợp để dùng thử hoặc chạy vài workflow nhẹ. Nhược điểm là SQLite không xử lý tốt nhiều tiến trình ghi cùng lúc, dễ chậm hoặc lỗi khi số lượng workflow và số lần chạy tăng lên.

Với môi trường chạy thật cho doanh nghiệp, nên chuyển sang PostgreSQL ngay từ đầu: khai báo biến môi trường để n8n kết nối tới PostgreSQL, n8n sẽ tự tạo bảng cần thiết khi khởi động lần đầu. PostgreSQL cũng là điều kiện bắt buộc nếu sau này muốn mở rộng sang chế độ hàng đợi (queue mode) chạy nhiều worker song song.

N8N_ENCRYPTION_KEY: chìa khoá không được đánh mất

n8n tự tạo một khoá mã hoá ngẫu nhiên khi khởi động lần đầu, lưu trong thư mục cấu hình của n8n trên VPS, và dùng khoá này để mã hoá toàn bộ thông tin đăng nhập (credentials) — mật khẩu, API key, token — trước khi ghi vào cơ sở dữ liệu. Nếu mất khoá này mà không có bản sao lưu, toàn bộ credentials đã lưu trở nên vô nghĩa và phải nhập lại từ đầu cho từng workflow.

Anh/chị nên tự đặt khoá qua biến môi trường N8N_ENCRYPTION_KEY ngay từ lần cài đầu tiên, rồi ghi lại khoá ở nơi an toàn tách biệt với VPS. Nếu sau này chạy nhiều tiến trình worker (queue mode), tất cả các máy phải dùng chung đúng một khoá này thì mới đọc được dữ liệu đã mã hoá.

Sao lưu đúng cách: đừng chỉ sao lưu file workflow

Chỉ xuất file .json của từng workflow là chưa đủ — file đó không chứa credentials đã lưu và không khôi phục được cấu hình instance. Anh/chị cần sao lưu định kỳ đủ ba phần: cơ sở dữ liệu (file SQLite hoặc bản dump PostgreSQL), khoá N8N_ENCRYPTION_KEY, và thư mục cấu hình của n8n trên VPS.

  • Đặt lịch sao lưu tự động hằng ngày bằng cron, đẩy bản sao ra khỏi VPS (email, Google Drive, hoặc một máy chủ khác)
  • Test khôi phục thử ít nhất một lần — bản sao lưu chưa từng khôi phục thử coi như chưa chắc chắn dùng được
  • Xuất thêm file workflow .json định kỳ hoặc nối với Git để theo dõi thay đổi qua thời gian

Bảo mật khi vận hành hằng ngày

Từ bản n8n 1.0, cách đăng nhập bằng basic auth (một cặp tên đăng nhập/mật khẩu chung) không còn hoạt động — n8n dùng hệ thống quản lý người dùng riêng, với tài khoản email/mật khẩu và vai trò owner, member (vai trò admin cần bản Enterprise hoặc Cloud trả phí, bản Community tự host không có). Anh/chị nên cấu hình SMTP để n8n tự gửi lời mời và đặt lại mật khẩu; nếu bỏ qua bước này thì phải gửi tay đường link mời cho từng người dùng.

  • Chỉ mở cổng 80 và 443 ra Internet qua firewall; cổng mặc định của n8n chỉ nghe nội bộ, đứng sau reverse proxy
  • Cập nhật image n8n định kỳ và đọc ghi chú phát hành trước khi nâng cấp bản lớn — có những thay đổi (như bỏ basic auth) từng khiến người dùng bản cũ bị khoá ngoài sau khi cập nhật
  • Với workflow nhận webhook công khai, kiểm tra chữ ký hoặc mã bí mật gửi kèm trước khi xử lý, tránh để ai cũng gọi được webhook đó

Mở rộng bằng chế độ hàng đợi (queue mode) và theo dõi hoạt động

Khi số lượng webhook gọi vào cùng lúc tăng cao hoặc workflow chạy lâu làm nghẽn hàng chờ, n8n hỗ trợ chế độ hàng đợi: một tiến trình chính tiếp nhận webhook và lịch chạy, đẩy việc vào Redis, rồi các tiến trình worker riêng lấy việc từ Redis để xử lý song song — có thể thêm hoặc bớt worker tuỳ tải thực tế. Muốn dùng chế độ này bắt buộc phải chuyển sang PostgreSQL trước, vì SQLite không chịu được nhiều tiến trình ghi cùng lúc; các worker cũng phải dùng chung N8N_ENCRYPTION_KEY với tiến trình chính.

Song song đó, nên theo dõi n8n thay vì đợi khách hàng báo lỗi: xem lại danh sách lần chạy thất bại trong giao diện n8n hằng ngày, hoặc dựng thêm một workflow n8n dùng Error Trigger để tự báo lỗi qua Zalo hay email ngay khi một workflow khác chạy hỏng.

Chi phí thực tế mỗi tháng

Chi phí self-host n8n trên VPS gồm ba khoản: VPS, tên miền, và thời gian tự vận hành. VPS 2-4GB RAM đủ cho phần lớn doanh nghiệp nhỏ hiện có giá tham khảo khoảng 100.000-200.000đ mỗi tháng; cấu hình cao hơn cho AI hoặc xử lý video sẽ cao hơn mức này, tuỳ nhà cung cấp và cần so sánh bảng giá trước khi chọn.

Khoản mụcChi phí/thời gian tham khảo
VPS 2-4GB RAM100.000 - 200.000đ/tháng
VPS 8GB RAM trở lên (AI, video)Cao hơn mức trên, tuỳ nhà cung cấp
Tên miềnTính theo năm, tuỳ đuôi miền và nhà đăng ký
Thời gian tự cài lần đầuNửa ngày đến vài ngày, tuỳ mức quen thuộc với Linux và Docker

Câu hỏi thường gặp

VPS bao nhiêu RAM là đủ để chạy n8n?
2GB RAM chạy được vài workflow đơn giản, 4GB thoải mái hơn cho chục workflow kèm PostgreSQL. Nếu workflow dùng AI hoặc xử lý video, nên tính từ 8GB RAM trở lên.
Nên cài n8n trên VPS bằng Docker hay npm?
Docker Compose dễ bảo trì và nâng cấp hơn cho phần lớn người dùng vì đóng gói sẵn đúng phiên bản Node.js. npm phù hợp khi đã quen quản trị Linux và muốn kiểm soát chi tiết hơn.
SQLite có đủ dùng cho n8n hay phải chuyển sang PostgreSQL?
SQLite phù hợp để dùng thử hoặc chạy vài workflow nhẹ. Khi chạy thật cho doanh nghiệp, hoặc muốn mở rộng bằng queue mode sau này, nên chuyển sang PostgreSQL ngay từ đầu để khỏi phải di chuyển dữ liệu về sau.
Mất N8N_ENCRYPTION_KEY có khôi phục được không?
Không. Khoá này dùng để mã hoá toàn bộ credentials đã lưu; mất khoá mà không có bản sao lưu đồng nghĩa phải nhập lại toàn bộ thông tin đăng nhập của các workflow.
Có cần dùng queue mode ngay từ đầu không?
Không cần. Queue mode chỉ cần thiết khi số lượng webhook chạy đồng thời hoặc workflow nặng làm nghẽn hàng chờ trên một tiến trình duy nhất — doanh nghiệp nhỏ mới bắt đầu thường chưa tới ngưỡng này.
Có thể tự host n8n mà không biết lập trình không?
Được, cài đặt cơ bản không cần biết lập trình, nhưng cần quen thao tác dòng lệnh Linux cơ bản. Nếu bên anh/chị không có ai trực kỹ thuật, thuê đơn vị cài trọn gói sẽ an toàn hơn về lâu dài.

Xem thêm

Tư vấn ngayNhắn Zalo