Cài n8n trên VPS: tự host tự động hoá với Docker, HTTPS và sao lưu
Hướng dẫn cài n8n trên VPS bằng Docker, chạy sau nginx với HTTPS, webhook đúng tên miền, sao lưu workflow và cập nhật an toàn, hoặc cài một chạm bằng ZoPanel.

Ý chính
- n8n chạy tốt trong Docker với một volume lưu dữ liệu tại /home/node/.n8n.
- Chỉ mở cổng 5678 trên 127.0.0.1 và cho truy cập qua reverse proxy có HTTPS.
- Phải đặt WEBHOOK_URL đúng tên miền, nếu không webhook sẽ nhận sai địa chỉ.
- Sao lưu cả workflow lẫn khoá mã hoá trong thư mục .n8n, nếu không credential không khôi phục được.
Để cài n8n trên VPS, cách gọn và an toàn nhất là chạy image Docker chính thức n8nio/n8n với một volume lưu dữ liệu, chỉ mở cổng 5678 trên 127.0.0.1, rồi đặt nginx làm reverse proxy có HTTPS cho một tên miền con như n8n.example.com, kèm các biến N8N_HOST, N8N_PROTOCOL=https và WEBHOOK_URL. Một VPS 2 GB RAM là đủ để bắt đầu với các workflow thông thường. Nếu VPS đã có ZoPanel, bạn cài n8n một chạm từ Kho ứng dụng, SSL được cấp tự động.
Bài viết hướng dẫn cả hai cách: thủ công từng lệnh trên Ubuntu/Debian, và bằng ZoPanel. Kèm theo là những điều thường bị bỏ qua: giấy phép của n8n, cách sao lưu để không mất credential, cách cập nhật và cách giữ instance an toàn.
Vì sao nên tự host n8n?
n8n là công cụ xây dựng workflow trực quan (giống Zapier hay Make) kết nối hàng trăm dịch vụ: khi có đơn hàng mới thì gửi tin Telegram, cập nhật Google Sheets, gọi API, hay chạy một AI Agent dùng mô hình của OpenAI hoặc Anthropic.
Lý do tự host:
- Không tính tiền theo lượt chạy. Tại thời điểm viết (tháng 10/2026), các gói n8n Cloud tính theo số lần chạy workflow mỗi tháng; gói Starter là 20 €/tháng (thanh toán theo năm) cho 2.500 lần chạy. Tự host thì giới hạn chỉ là tài nguyên VPS của bạn. Hãy kiểm tra giá hiện hành trên trang của n8n.
- Dữ liệu ở lại server của bạn, kể cả token và mật khẩu của các dịch vụ bạn kết nối.
- Tự do cấu hình: múi giờ, thời gian lưu lịch sử chạy, kết nối mạng nội bộ.
Lưu ý về giấy phép
n8n không phải phần mềm mã nguồn mở theo định nghĩa OSI; bản community phát hành theo Sustainable Use License. Theo License FAQ của n8n, bạn được dùng n8n để vận hành doanh nghiệp của mình, cho dự án cá nhân, và được thu phí khách hàng cho việc xây dựng, cài đặt và bảo trì workflow. Bạn không được host n8n như một dịch vụ để khách hàng tự xây workflow. Nếu bạn là công ty hosting định bán "n8n cho khách", hãy đọc kỹ giấy phép hoặc liên hệ n8n trước.
Cần VPS cấu hình bao nhiêu để cài n8n?
n8n bản thân không nặng CPU, nhưng RAM tăng theo workflow: xử lý file lớn, nhiều workflow chạy cùng lúc hay node Code phức tạp sẽ cần nhiều bộ nhớ hơn.
- Chỉ chạy n8n: VPS 2 GB RAM, 1 đến 2 vCPU là điểm bắt đầu hợp lý (khoảng 1 GB cho n8n, phần còn lại cho hệ thống và reverse proxy).
- n8n cùng website và database trên một VPS: 4 GB RAM trở lên.
- Ổ đĩa: lịch sử chạy được lưu trong database (mặc định SQLite trong volume), nên hãy để dư vài GB và cấu hình xoá lịch sử cũ nếu chạy nhiều.
Bạn cũng cần một tên miền con (ví dụ n8n.example.com) có bản ghi A trỏ về VPS. Nếu chưa làm, xem bài trỏ tên miền về VPS.
Cách 1: Cài n8n trên VPS bằng ZoPanel (một chạm)
Nếu VPS đã cài ZoPanel, n8n có sẵn trong Kho ứng dụng:
- Cài Docker nếu chưa có: Kho ứng dụng → Cài Docker (hoặc Thành phần → Docker).
- Mở Kho ứng dụng, chọn n8n.
- Nhập tên miền, ví dụ
n8n.example.com. Quản trị viên chọn thêm tài khoản hosting sở hữu ứng dụng. - Bấm Cài đặt. Nhật ký tác vụ hiển thị quá trình tải image và khởi động.
- Trỏ bản ghi A của tên miền về server nếu chưa trỏ. SSL được cấp tự động.
Thiết lập lần đầu. Với n8n, người đầu tiên mở tên miền sẽ tạo tài khoản chủ (owner). Vì vậy ZoPanel giữ ứng dụng ở chế độ riêng tư sau khi cài: người khác chỉ thấy trang "đang được thiết lập". Ở tab Docker của website, bấm Mở ứng dụng (chỉ mình tôi), điền form tài khoản chủ (email, tên, mật khẩu), rồi bấm Đã thiết lập xong — mở công khai. Lần đầu n8n cần khoảng nửa phút đến hai phút để khởi động. URL webhook đã dùng sẵn tên miền của bạn với HTTPS.
Quản lý hằng ngày ở tab Docker: trạng thái, bộ nhớ và log; quản trị viên có thêm nút khởi động lại và Cập nhật bản mới (kéo image mới, giữ nguyên dữ liệu). Khách trên tài khoản hosting nhờ nhà cung cấp cập nhật.
ZoPanel cấu hình gì cho bạn (theo tài liệu Kho ứng dụng):
- n8n chạy với giới hạn 1024 MB RAM và 1 CPU, dữ liệu lưu trong thư mục chỉ root và container đọc được.
- Container dùng user namespace, chỉ mở cổng trên
127.0.0.1, truy cập từ ngoài đi qua nginx có SSL. - Container bị chặn khỏi mạng nội bộ của server và không kết nối được với nhau. Trên chính server, container chỉ tới được những cổng mà Internet cũng tới được (web, mail, DNS), không tới được database, Redis hay panel. Nghĩa là workflow n8n không truy vấn trực tiếp MariaDB của các website trên cùng server; hãy đi qua API của ứng dụng hoặc một database bên ngoài. Đổi lại, một workflow bị lợi dụng cũng không chạm được dữ liệu của các khách khác.
- Với công ty hosting: khách tự cài n8n được khi gói cho phép, đặt ở Gói hosting → Ứng dụng Docker; bộ nhớ của ứng dụng được tính vào RAM của gói.
Xem thêm phần mô tả n8n trong Ứng dụng làm gì.
Cách 2: Cài n8n trên VPS thủ công với Docker Compose
Cách này dành cho VPS chưa có control panel chạy Ubuntu 24.04 hoặc Debian 12. Nếu server đã có panel quản lý nginx, đừng sửa nginx bằng tay mà dùng tính năng của panel.
Bước 1: Cài Docker từ kho chính thức
Làm theo hướng dẫn cài Docker Engine chính thức, không dùng script lạ. Trên Ubuntu:
sudo apt update
sudo apt install ca-certificates curl
sudo install -m 0755 -d /etc/apt/keyrings
sudo curl -fsSL https://download.docker.com/linux/ubuntu/gpg -o /etc/apt/keyrings/docker.asc
sudo chmod a+r /etc/apt/keyrings/docker.asc
sudo tee /etc/apt/sources.list.d/docker.sources <<EOF
Types: deb
URIs: https://download.docker.com/linux/ubuntu
Suites: $(. /etc/os-release && echo "${UBUNTU_CODENAME:-$VERSION_CODENAME}")
Components: stable
Architectures: $(dpkg --print-architecture)
Signed-By: /etc/apt/keyrings/docker.asc
EOF
sudo apt update
sudo apt install docker-ce docker-ce-cli containerd.io docker-buildx-plugin docker-compose-plugin
Trên Debian, thay ubuntu bằng debian trong hai URL và dùng VERSION_CODENAME.
Bước 2: Tạo file Docker Compose cho n8n
sudo mkdir -p /opt/n8n && cd /opt/n8n
sudo nano compose.yaml
Nội dung (thay tên miền, và thay latest bằng số phiên bản cụ thể khi chạy thật):
services:
n8n:
image: n8nio/n8n:latest
restart: unless-stopped
ports:
- "127.0.0.1:5678:5678"
mem_limit: 1g
environment:
- N8N_HOST=n8n.example.com
- N8N_PORT=5678
- N8N_PROTOCOL=https
- NODE_ENV=production
- WEBHOOK_URL=https://n8n.example.com/
- GENERIC_TIMEZONE=Asia/Ho_Chi_Minh
- TZ=Asia/Ho_Chi_Minh
- N8N_ENFORCE_SETTINGS_FILE_PERMISSIONS=true
volumes:
- n8n_data:/home/node/.n8n
volumes:
n8n_data:
Các điểm quan trọng, theo tài liệu Docker Compose của n8n:
127.0.0.1:5678:5678: chỉ mở cổng trên localhost. Nếu ghi5678:5678, Docker sẽ mở cổng ra Internet và bỏ qua luật UFW, vì Docker tự thêm luật iptables riêng. Đây là lỗi phổ biến nhất khi tự host.WEBHOOK_URL: n8n chạy sau proxy không tự biết địa chỉ công khai. Thiếu biến này, URL webhook hiện trong giao diện sẽ làhttp://localhost:5678/…và dịch vụ bên ngoài không gọi được.GENERIC_TIMEZONE: múi giờ cho node Schedule Trigger. Đặt sai, workflow "chạy lúc 8 giờ sáng" sẽ chạy lệch giờ.- Volume
/home/node/.n8n: chứa database SQLite và khoá mã hoá credential. Mất volume là mất hết.
Khởi động:
sudo docker compose up -d
sudo docker compose logs -f n8n
Bước 3: Cấu hình nginx và HTTPS
sudo apt install nginx certbot python3-certbot-nginx
sudo nano /etc/nginx/sites-available/n8n.conf
server {
listen 80;
server_name n8n.example.com;
location / {
proxy_pass http://127.0.0.1:5678;
proxy_http_version 1.1;
proxy_set_header Upgrade $http_upgrade;
proxy_set_header Connection "upgrade";
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;
proxy_buffering off;
proxy_read_timeout 3600s;
}
}
Hai dòng Upgrade và Connection cần cho WebSocket mà giao diện n8n dùng; thiếu chúng, trình soạn workflow sẽ báo mất kết nối.
sudo ln -s /etc/nginx/sites-available/n8n.conf /etc/nginx/sites-enabled/
sudo nginx -t && sudo systemctl reload nginx
sudo certbot --nginx -d n8n.example.com
Certbot cấp chứng chỉ Let's Encrypt, thêm khối HTTPS và chuyển hướng HTTP sang HTTPS. Bản ghi A phải trỏ về VPS và cổng 80 phải mở trước khi chạy lệnh này.
Bước 4: Tường lửa
Nếu dùng UFW, mở SSH trước rồi mới bật, để không tự khoá mình ngoài server:
sudo ufw allow OpenSSH
sudo ufw allow 'Nginx Full'
sudo ufw enable
Mở https://n8n.example.com và tạo tài khoản chủ ngay, vì người đầu tiên vào sẽ trở thành owner.
Bảo mật instance n8n
n8n giữ token và mật khẩu của mọi dịch vụ bạn kết nối, nên nó là mục tiêu đáng giá:
- Tạo tài khoản owner ngay sau khi cài, dùng mật khẩu mạnh, và bật xác thực hai lớp tại Settings → Personal trong n8n.
- Không mở cổng 5678 ra Internet; chỉ truy cập qua HTTPS.
- Cập nhật thường xuyên: n8n là ứng dụng web có nhiều node tích hợp, các bản vá bảo mật ra đều đặn.
- Cẩn thận với node Code và Execute Command khi nhiều người cùng dùng instance.
- Webhook là cửa vào công khai: dùng xác thực header hoặc chuỗi bí mật cho webhook nhận dữ liệu quan trọng.
Các nguyên tắc chung khi chạy Docker trên VPS có trong bài bảo mật VPS Ubuntu.
Sao lưu và khôi phục n8n
Có hai lớp sao lưu nên làm:
1. Xuất workflow và credential định kỳ bằng CLI của n8n:
sudo docker compose exec -u node n8n n8n export:workflow --backup --output=/home/node/.n8n/backups/workflows/
sudo docker compose exec -u node n8n n8n export:credentials --backup --output=/home/node/.n8n/backups/credentials/
Credential được xuất ở dạng đã mã hoá, nên chỉ khôi phục được với cùng khoá mã hoá.
2. Sao lưu toàn bộ volume (gồm database và khoá mã hoá) ra ngoài server:
sudo docker compose stop n8n
sudo docker run --rm -v n8n_n8n_data:/data -v /root:/backup alpine \
tar czf /backup/n8n-data-$(date +%F).tar.gz -C /data .
sudo docker compose start n8n
Tên volume thực tế có tiền tố là tên thư mục dự án (ở đây n8n_n8n_data); kiểm tra bằng sudo docker volume ls. Sau đó chép file .tar.gz sang nơi khác (S3, máy khác). Bản sao lưu chỉ nằm trên cùng VPS thì mất cùng VPS.
Cập nhật n8n an toàn
- Sao lưu như trên.
- Đọc ghi chú phát hành, đặc biệt khi lên phiên bản lớn (ví dụ từ 1.x lên 2.x), vì có thể có thay đổi không tương thích.
- Sửa số phiên bản trong
compose.yaml, rồi:
cd /opt/n8n
sudo docker compose pull
sudo docker compose up -d
Ghim số phiên bản cụ thể thay vì latest giúp bạn biết chính xác đang chạy gì và quay lại được khi có lỗi. Trên ZoPanel, nút Cập nhật bản mới trong tab Docker làm bước kéo image và khởi động lại, dữ liệu được giữ.
Lỗi hay gặp khi cài n8n trên VPS
| Hiện tượng | Nguyên nhân | Cách xử lý |
|---|---|---|
URL webhook hiện localhost:5678 |
Thiếu WEBHOOK_URL |
Đặt WEBHOOK_URL=https://ten-mien/ rồi khởi động lại |
| Giao diện báo "Connection lost" | Proxy không chuyển WebSocket | Thêm Upgrade và Connection vào cấu hình nginx |
| Workflow theo lịch chạy sai giờ | Sai GENERIC_TIMEZONE |
Đặt đúng múi giờ, ví dụ Asia/Ho_Chi_Minh |
| Container khởi động lại liên tục, log báo hết bộ nhớ | Workflow xử lý dữ liệu lớn vượt giới hạn RAM | Tăng giới hạn, chia nhỏ dữ liệu, giảm số workflow chạy song song |
| Cổng 5678 truy cập được từ ngoài | Ghi 5678:5678 thay vì 127.0.0.1:5678:5678 |
Sửa compose, chạy lại docker compose up -d |
| Credential lỗi sau khi chuyển server | Mất khoá mã hoá trong .n8n |
Khôi phục cả volume cũ, không chỉ workflow |
Kết luận
Tự host n8n trên VPS không khó: Docker, một volume, reverse proxy HTTPS và ba biến môi trường đúng. Phần quyết định là vận hành: không mở cổng thừa, sao lưu cả khoá mã hoá và cập nhật đều đặn. Nếu không muốn tự cấu hình nginx, SSL và cách ly container, ZoPanel cài n8n một chạm với giới hạn tài nguyên và cô lập mạng sẵn có; gói Free đã gồm Kho ứng dụng. Cài trên server mới bằng:
curl -fsSL https://get.zopanel.net | sudo bash
Xem bảng giá và hướng dẫn cài đặt.
Câu hỏi thường gặp
Tự host n8n có miễn phí không?
Bản community của n8n tự host được mà không phải trả phí license, theo Sustainable Use License, cho việc dùng nội bộ doanh nghiệp và cá nhân. Bạn chỉ trả tiền VPS. Một số tính năng nâng cao như SSO cần license trả phí của n8n.
Cài n8n cần VPS bao nhiêu RAM?
Với workflow thông thường, VPS 2 GB RAM là điểm bắt đầu hợp lý, trong đó n8n dùng khoảng 1 GB. Nếu xử lý file lớn, chạy nhiều workflow song song hoặc chạy chung với website, hãy dùng 4 GB trở lên.
Nên dùng SQLite hay PostgreSQL cho n8n?
SQLite (mặc định) đủ cho một instance cá nhân hoặc nhóm nhỏ. Khi số lần chạy lớn, nên chuyển sang PostgreSQL, đặc biệt nếu muốn mở rộng bằng nhiều worker (queue mode). Dù dùng database nào, vẫn phải giữ volume .n8n vì nó chứa khoá mã hoá.
Có thể cho khách hàng dùng n8n trên server của tôi không?
Bạn có thể xây workflow cho khách và thu phí dịch vụ đó. Nhưng theo giấy phép của n8n, bạn không được host n8n như một dịch vụ để khách tự tạo hoặc sửa workflow. Hãy đọc License FAQ của n8n trước khi đưa vào gói dịch vụ.
Làm sao để n8n gửi email?
Dùng node Send Email với thông tin SMTP của một hộp thư, ví dụ hộp thư tên miền trên chính server của bạn qua cổng 587. Với ZoPanel, container được phép tới các cổng mail của server, nên dùng được hộp thư tạo trong panel.
Đọc tiếp

Cài Flowise trên VPS năm 2026, và việc Flowise ngừng phát triển nghĩa là gì
Hướng dẫn cài Flowise trên VPS bằng Docker và HTTPS, bảo vệ API key, sao lưu flow, và những điều cần biết về việc Flowise hết vòng đời tháng 8/2026.

Tự host ChatGPT riêng với Open WebUI trên VPS: hướng dẫn đầy đủ
Cách tự host ChatGPT riêng bằng Open WebUI trên VPS: Docker, nginx, HTTPS, kết nối API OpenAI hoặc Ollama, làm tay hoặc một cú bấm với ZoPanel.

Chạy ứng dụng Docker trên VPS an toàn: 9 việc cần làm đúng
Cách chạy ứng dụng Docker trên VPS an toàn - cổng chỉ mở nội bộ, user namespace, giới hạn RAM, cách ly mạng, SSL - kèm cấu hình mẫu và cách làm với ZoPanel.