# Hướng dẫn cài đặt n8n trên VPS và tự động hóa quy trình kinh doanh từ A-Z cho Solopreneur

URL: https://opcaios.org/blog/cai-dat-n8n-tren-vps
Ngày: 2026-11-09
Cập nhật: 2026-11-04
Tác giả: Lê Quốc Nghĩa
Chuyên mục: Hướng dẫn

Cài đặt [n8n](/tien-ich/n8n) trên VPS là gì? Là việc chạy công cụ tự động hoá n8n trên một máy chủ riêng của bạn (thường bằng Docker), gắn một tên miền có HTTPS, rồi dựng các quy trình (workflow) nối biểu mẫu, email, CRM, bảng tính và AI với nhau để thay phần việc lặp lại của công ty một người. Theo tài liệu n8n (đọc ngày 25/10/2026), cách cài chính thức dùng Docker Compose, cần một bản ghi DNS (A record) trỏ tên miền phụ về máy chủ, một tệp `.env`, và n8n chỉ phục vụ qua HTTPS; dữ liệu và khoá mã hoá nằm trong một volume. Bài này là hướng dẫn từng bước: chuẩn bị máy chủ, cài n8n bằng Docker, đặt sau nginx hoặc Traefik, các biến môi trường cần có, sao lưu và cập nhật, giấy phép (n8n không phải mã nguồn mở thuần tuý), năm quy trình đầu tiên cho solopreneur, và kinh nghiệm của OPCAIOS (chúng tôi chạy n8n trên máy chủ). Thời gian cài thực tế phụ thuộc kinh nghiệm của bạn; chúng tôi không hứa một con số cố định.

![Sơ đồ cài n8n trên VPS: máy chủ, Docker, tên miền và HTTPS, biến môi trường, volume dữ liệu, sao lưu, cập nhật; năm quy trình đầu tiên cho solopreneur; giấy phép Sustainable Use](https://opcaios.org/images/blog/cai-dat-n8n-tren-vps/so-do.webp)
*Máy chủ, Docker, tên miền, HTTPS, sao lưu; rồi mới tới quy trình. Sơ đồ: OPCAIOS.*

## Trước khi bắt đầu: bạn cần gì?

| Hạng mục | Ghi chú |
|---|---|
| VPS Linux | Xem [VPS là gì?](/blog/vps-la-gi); chọn gói đủ RAM cho n8n và cơ sở dữ liệu |
| Tên miền | Tạo A record cho tên miền phụ (ví dụ `n8n`) trỏ về địa chỉ IP của VPS |
| Docker và Docker Compose | Kiểm tra bằng `docker --version` và `docker compose version` (xem [Docker là gì?](/blog/docker-la-gi)) |
| Email cho chứng chỉ | Dùng khi cấp chứng chỉ HTTPS (Let's Encrypt) |
| Kiến thức cơ bản về SSH | Để đăng nhập và chạy lệnh |

Tài liệu n8n không nêu cấu hình tối thiểu trong trang chúng tôi đọc; hãy xem mục Install options của n8n và để dư tài nguyên.

## Bước 1: Chuẩn bị máy chủ

1. Đăng nhập SSH, cập nhật hệ điều hành, cài Docker theo hướng dẫn cho bản Linux của bạn.
2. Tạo người dùng không phải root cho Docker nếu có thể (`sudo usermod -aG docker ${USER}`).
3. Mở cổng 80 và 443 trên tường lửa; không mở cổng 5678 ra Internet (xem phần bảo mật).
4. Trỏ DNS: tạo A record cho tên miền phụ về IP máy chủ; đợi DNS lan truyền.

## Bước 2: Cài n8n bằng Docker Compose

Cách chính thức theo tài liệu (Docker Compose với Traefik làm reverse proxy):

1. Tạo thư mục dự án (`mkdir n8n-compose && cd n8n-compose`).
2. Tạo tệp `.env` với `DOMAIN_NAME` (tên miền gốc), `SUBDOMAIN` (ví dụ `n8n`), `GENERIC_TIMEZONE` (múi giờ cho các nút lên lịch) và `SSL_EMAIL`.
3. Tạo thư mục `local-files` (n8n thấy nó ở `/files`).
4. Tạo `compose.yaml` gồm hai dịch vụ: `traefik` (cấp chứng chỉ TLS, mở cổng 80 và 443, gắn Docker socket chỉ đọc) và `n8n` (ảnh `n8nio/n8n`, cổng 5678 chỉ gắn vào localhost, nhãn Traefik theo `${SUBDOMAIN}.${DOMAIN_NAME}`); hai volume `n8n_data` (gắn vào `/home/node/.n8n`, chứa cơ sở dữ liệu SQLite và khoá mã hoá) và `traefik_data` (chứng chỉ). Hãy lấy tệp mẫu đầy đủ trên trang tài liệu của n8n thay vì tự gõ lại, vì cấu hình Traefik cần chính xác.
5. Khởi động: `docker compose up -d`; dừng: `docker compose stop`.
6. Mở `https://<SUBDOMAIN>.<DOMAIN_NAME>` và tạo tài khoản chủ sở hữu. Nếu không truy cập được, kiểm tra tường lửa và DNS.

### Biến môi trường quan trọng (theo tài liệu)

| Biến | Ý nghĩa |
|---|---|
| `N8N_HOST` | Tên máy chủ n8n phục vụ |
| `N8N_PORT` | 5678 |
| `N8N_PROTOCOL` | `https` |
| `N8N_WEBHOOK_URL` | Địa chỉ công khai để dựng URL webhook (từ n8n 2.30.0; bản cũ dùng `WEBHOOK_URL`, nay đã bị khai tử dần) |
| `GENERIC_TIMEZONE`, `TZ` | Múi giờ (đặt `Asia/Ho_Chi_Minh` nếu cần giờ Việt Nam) |
| `NODE_ENV` | `production` |
| `N8N_PROXY_HOPS` | `1` khi chạy sau một reverse proxy |

## Bước 3: Dùng nginx thay Traefik (cách OPCAIOS làm)

Nếu máy chủ của bạn đã có nginx (xem [Nginx là gì?](/blog/nginx-la-gi)), bạn có thể chạy n8n chỉ lắng nghe localhost và để nginx làm HTTPS. Theo tài liệu n8n, khi đứng sau proxy bạn đặt `N8N_WEBHOOK_URL=https://n8n.tenmiencuaban.com/` và `N8N_PROXY_HOPS=1`, đồng thời proxy cuối phải chuyển các tiêu đề `X-Forwarded-For`, `X-Forwarded-Host`, `X-Forwarded-Proto`. Giao diện n8n còn cần nâng cấp kết nối (WebSocket) qua proxy; đây là yêu cầu theo thực hành chung, hãy kiểm tra tài liệu mục reverse proxy của n8n và cấu hình `Upgrade` và `Connection` trong nginx. Nếu không đặt `N8N_WEBHOOK_URL` đúng, n8n dựng URL webhook sai (cổng 5678 thay vì 443) và dịch vụ bên ngoài không gọi được.

## Bước 4: Webhook, thử và chạy thật

Theo tài liệu nút Webhook: có URL thử (hoạt động khi bạn bấm lắng nghe sự kiện thử, hiện dữ liệu trong trình soạn) và URL sản xuất (chỉ hoạt động khi quy trình đã bật; xem kết quả ở tab Executions). Hỗ trợ các phương thức GET, POST, PUT, PATCH, DELETE, HEAD; giới hạn payload mặc định 16 MB (đổi bằng `N8N_PAYLOAD_SIZE_MAX`); xác thực bằng Basic, tiêu đề, JWT; có danh sách IP cho phép. Hãy luôn bật xác thực hoặc kiểm tra chữ ký cho webhook nhận dữ liệu nhạy cảm (xem [Webhook là gì?](/blog/webhook-la-gi) và [API là gì?](/blog/api-la-gi)).

## Bước 5: Sao lưu và cập nhật

Sao lưu n8n là việc bảo vệ hai thứ: dữ liệu quy trình và khoá mã hoá dùng để đọc thông tin xác thực đã lưu. Thứ tự ưu tiên là sao lưu trước, cập nhật sau, giám sát cuối cùng. Ví dụ, trước mỗi lần kéo ảnh mới, hãy chép volume `n8n_data` ra nơi ngoài máy chủ để có đường lui nếu bản mới lỗi.

- **Sao lưu volume `n8n_data`:** nó chứa khoá mã hoá; mất khoá là mất khả năng đọc thông tin xác thực đã lưu. Thêm sao lưu cơ sở dữ liệu nếu dùng PostgreSQL riêng. Lưu bản sao ngoài máy chủ.
- **Xuất quy trình:** xuất workflow ra tệp JSON và lưu trong Git (xem [GitHub là gì?](/blog/github-la-gi)); không đưa thông tin xác thực vào tệp xuất.
- **Cập nhật:** tài liệu trang chúng tôi đọc không có lệnh cập nhật; cách thông thường với Docker Compose là kéo ảnh mới rồi khởi động lại (`docker compose pull` và `docker compose up -d`), sau khi sao lưu và đọc ghi chú phát hành. Chúng tôi nêu đây là thực hành chung, không phải trích tài liệu.
- **Giám sát:** thêm kiểm tra sức khoẻ và cảnh báo khi n8n ngừng; dùng quy trình báo lỗi (nút Error Trigger) gửi tin về Telegram.

## Giấy phép: n8n có miễn phí cho kinh doanh không?

n8n dùng "Sustainable Use License": theo trang giấy phép, bạn được dùng và sửa cho mục đích kinh doanh nội bộ của mình hoặc phi thương mại; phân phối cho người khác chỉ được miễn phí và phi thương mại; không gỡ thông báo bản quyền; tệp có ".ee." thuộc giấy phép Enterprise riêng. Điều đó nghĩa là dùng n8n để tự động hoá công việc của chính bạn thì được, còn bán n8n như một dịch vụ hoặc gắn thương hiệu riêng cho người khác không nằm trong cấp phép; nếu bạn làm dịch vụ tự động hoá cho khách, hãy đọc kỹ giấy phép và hỏi n8n hoặc luật sư (đây là tóm tắt, không phải tư vấn pháp lý). Gói và giá của n8n xem [n8n là gì?](/blog/n8n-la-gi).

## Năm quy trình đầu tiên cho solopreneur

| # | Quy trình | Nút gợi ý |
|---|---|---|
| 1 | Biểu mẫu liên hệ → CRM hoặc bảng tính → email chào | Webhook, bảng tính hoặc CRM, SMTP |
| 2 | Báo cáo buổi sáng (lead mới, việc cần làm, cảnh báo) gửi Telegram | Schedule Trigger, các nút dữ liệu, Telegram (xem [Telegram bot là gì?](/blog/telegram-bot-la-gi)) |
| 3 | Nhắc thanh toán và theo dõi hoá đơn | Schedule Trigger, bảng tính, email |
| 4 | Tổng hợp nội dung, soạn nháp bằng AI chờ duyệt | HTTP Request tới mô hình AI, lưu bản nháp (xem [Phòng marketing 1 người](/blog/phong-marketing-1-nguoi-bang-ai)) |
| 5 | Cảnh báo lỗi cho mọi quy trình khác | Error Trigger, Telegram |

Mỗi quy trình nên có điểm dừng để bạn duyệt trước khi gửi cho khách và nên ghi nhật ký. Ví dụ đầy đủ của quy trình số 1 xem [Điền form Tally → AI tạo báo cáo → gửi email](/blog/tu-dong-hoa-phau-form-tally-ai-bao-cao-ca-nhan-hoa).

## Lưu ý bảo mật

1. Không mở cổng 5678 ra Internet; chỉ qua proxy HTTPS.
2. Bật xác thực hai lớp và mật khẩu mạnh cho tài khoản chủ sở hữu.
3. Dùng thông tin xác thực riêng cho từng dịch vụ, quyền tối thiểu.
4. Webhook công khai cần xác thực hoặc kiểm tra chữ ký, giới hạn IP nếu được.
5. Đừng chạy mã tuỳ ý từ người lạ trong nút Code.
6. Cập nhật định kỳ và đọc ghi chú phát hành.

## Kinh nghiệm của OPCAIOS

Chúng tôi chạy n8n bằng Docker trên máy chủ riêng, kèm một PostgreSQL riêng cho n8n, đứng sau nginx; kiểm tra ngày 25/10/2026 cho thấy trang kiểm tra sức khoẻ của dịch vụ trả mã 200 và ảnh Docker dùng thẻ `latest`. Chúng tôi cũng ghi nhận một bài học vận hành: một quy trình định tuyến liên tác tử từng chưa được nhập vào n8n nên điểm cuối của nó trả 404, nên tài liệu nội bộ ghi rõ "kiểm tra trước khi tin". Với một số việc (như bảng sản xuất nội dung), chúng tôi chọn tự xây trong website thay vì dùng n8n. Chúng tôi chưa đo thời gian tiết kiệm hay công bố số quy trình, và bài này không khẳng định một bộ quy trình chung hiệu quả cho mọi doanh nghiệp.

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

### Cài n8n trên VPS mất bao lâu?
Tuỳ kinh nghiệm: người quen Docker và DNS có thể cài trong một buổi; người mới nên dành thêm thời gian cho DNS, HTTPS và sao lưu. Chúng tôi không hứa một con số.

### n8n cần cấu hình VPS thế nào?
Trang tài liệu n8n mà chúng tôi đọc (ngày 25/10/2026) không nêu cấu hình tối thiểu, nên bài này không đưa con số cụ thể. Cách chọn an toàn gồm ba bước. Đầu tiên, xem mục Install options của n8n để cập nhật thông tin mới nhất. Tiếp theo, chọn VPS Linux đủ RAM cho n8n, cơ sở dữ liệu và reverse proxy, và để dư tài nguyên thay vì chọn mức sát nhất. Cuối cùng, theo dõi mức dùng RAM và CPU khi số quy trình tăng, rồi nâng gói khi cần. Ví dụ, nếu cùng một VPS còn chạy PostgreSQL riêng và nginx, hãy tính cả hai dịch vụ đó vào nhu cầu RAM. OPCAIOS chạy n8n bằng Docker trên máy chủ riêng nhưng chưa công bố số đo tài nguyên.

### n8n có miễn phí không?
n8n tự lưu trữ miễn phí cho mục đích kinh doanh nội bộ theo giấy phép Sustainable Use, theo tệp giấy phép trên GitHub của n8n (đọc ngày 25/10/2026), còn gói đám mây của n8n tính phí (xem [n8n là gì?](/blog/n8n-la-gi)). Miễn phí phần mềm không có nghĩa là không tốn chi phí: bạn vẫn trả tiền thuê VPS, tên miền và thời gian vận hành. Ranh giới cấp phép cần nhớ gồm ba điểm. Thứ nhất, dùng n8n để tự động hoá công việc của chính công ty bạn là được. Thứ hai, bán n8n như một dịch vụ hoặc gắn thương hiệu riêng cho người khác không nằm trong cấp phép. Thứ ba, tệp có ".ee." thuộc giấy phép Enterprise riêng. Ví dụ, chủ cửa hàng tự chạy n8n để nối biểu mẫu với bảng tính thì nằm trong phạm vi; đây là tóm tắt, không phải tư vấn pháp lý.

### Dùng Traefik hay nginx?
Cách chính thức theo tài liệu n8n dùng Traefik làm reverse proxy, còn nginx là lựa chọn hợp lý khi máy chủ đã có nginx, như cách OPCAIOS làm. Với nginx, phải đặt đúng ba thứ. Thứ nhất, biến `N8N_WEBHOOK_URL` trỏ về tên miền công khai, nếu không n8n dựng URL webhook sai với cổng 5678. Thứ hai, các tiêu đề `X-Forwarded-For`, `X-Forwarded-Host` và `X-Forwarded-Proto` cùng `N8N_PROXY_HOPS=1`. Thứ ba, `Upgrade` và `Connection` để WebSocket hoạt động. Ví dụ, một webhook từ cổng thanh toán sẽ gọi thất bại nếu URL hiển thị trong n8n vẫn là cổng 5678.

### Có an toàn khi để n8n công khai không?
n8n chỉ an toàn khi công khai nếu chạy qua HTTPS, có xác thực, webhook kiểm tra chữ ký và được cập nhật định kỳ. Đầu tiên, không mở cổng 5678 ra Internet; chỉ mở cổng 80 và 443 rồi để nginx hoặc Traefik chuyển tiếp vào n8n. Tiếp theo, bật xác thực hai lớp cho tài khoản chủ sở hữu và dùng thông tin xác thực riêng, quyền tối thiểu cho từng dịch vụ. Sau đó, bật xác thực Basic, tiêu đề hoặc JWT cho các webhook nhận dữ liệu nhạy cảm, theo tài liệu nút Webhook của n8n (đọc ngày 25/10/2026). Cuối cùng, sao lưu volume `n8n_data` ra ngoài máy chủ vì nó chứa khoá mã hoá. Ví dụ, webhook nhận biểu mẫu liên hệ nên có kiểm tra chữ ký để người lạ không tạo lead giả. Muốn học cách dựng quy trình tự động an toàn, xem [khoá đào tạo ứng dụng AI](/services/dao-tao-ung-dung-ai) của OPCAIOS.

*Nguồn: tài liệu n8n (cài Docker Compose, URL webhook, nút Webhook) và tệp giấy phép Sustainable Use License trên GitHub, đọc ngày 25/10/2026; chưa đọc cấu hình tối thiểu và lệnh cập nhật chính thức. Kinh nghiệm là của OPCAIOS theo kiểm tra trực tiếp.*
