Trong bài viết này, Gia sẽ hướng dẫn cài đặt n8n trên VPS chạy Ubuntu đã cài sẵn script quản lý vps hocvps. Nếu bạn là người mới, bài viết này sẽ giúp bạn tiết kiệm hàng giờ, thậm chí hàng ngày loay hoay cài đặt. Mời bạn tham khảo!
Giới thiệu n8n và lý do chọn cài đặt n8n lên VPS
N8n là một nền tảng automation/workflow giúp bạn kết nối các dịch vụ và ứng dụng lại với nhau mà không cần viết quá nhiều code. Ví dụ: khi có email mới đến → tự động lưu file đính kèm vào Google Drive → gửi thông báo qua Telegram.
Mình chọn cài n8n trên VPS thay vì máy cá nhân bởi các lý do sau:
- VPS chạy 24/7, không lo máy tắt là mất tác vụ.
- Có thể truy cập qua domain riêng (
n8n.maivangia.com
). - Dễ dàng tích hợp SSL (HTTPS) qua Nginx (nhiều tính năng n8n yêu cầu SLL để hoạt động)
2. Các bước cài đặt n8n trên VPS bằng Docker
Điều kiện để cài đặt n8n trên VPS bao gồm:
- Đã có domain riêng trên vps chạy ubuntu 20.4 có script quản lý như hocvps (hỗ trợ quản lý domain và cài chứng chỉ SLL miễn phí)
- Tạo sub domain trên domain chính ví dụ như n8n.maivangia.com (có thể dùng cloudflare hoặc công cụ của nhà cung cấp domain) và trỏ về IP của VPS và cài thành công SLL cho nó
- Ram VPS ít nhất 1,5G
Bước 1: Chuẩn bị VPS
- VPS chạy Ubuntu 20.04 hoặc 22.04.
- Có quyền root hoặc user sudo.
- Trỏ tên miền về IP VPS (ví dụ:
n8n.maivangia.com
).
Bước 2: Cài đặt Docker & Docker Compose
Trước tiên, mình cài Docker và Docker Compose trên VPS bằng các lệnh sau (Nếu lần đầu nghe về Docker, hãy tìm hiểu về nó trước rồi tiếp tục bài viết nhé!):
# Cập nhật hệ thống
sudo apt update && sudo apt upgrade -y
# Cài Docker
curl -fsSL https://get.docker.com | sh
# Kiểm tra Docker
docker --version
# Cài Docker Compose
sudo apt install docker-compose -y
# Kiểm tra
docker-compose --version
👉 Giải thích:
apt update && apt upgrade
: cập nhật hệ thống.curl -fsSL https://get.docker.com | sh
: script cài đặt Docker chính thức.docker-compose --version
: kiểm tra đã cài Compose chưa.
Bước 3: Tạo thư mục cho n8n
Mình đặt toàn bộ file n8n vào /home/n8n
để dễ quản lý.
# Tạo thư mục lưu dữ liệu của n8n trên vps
mkdir -p /home/n8n/data
cd /home/n8n
# Tạo chuỗi hex 32 ký tự lát nữa dán vào N8N_ENCRYPTION_KEY để bảo vệ credentials (quan trọng khi update/khôi phục).
openssl rand -hex 32
Bước 4: Tạo file .env
cấu hình
Trong thư mục /home/n8n
, mình tạo file .env
(file này sẽ lưu cấu hình cài đặt của n8n):
nano .env
Nội dung:
GENERIC_TIMEZONE=Asia/Ho_Chi_Minh
N8N_ENCRYPTION_KEY="<ĐIỀN KEY CỦA BẠN>"
N8N_HOST=n8n.maivangia.com
N8N_PROTOCOL=http
N8N_PORT=5678
WEBHOOK_URL=https://n8n.maivangia.com/
N8N_BASIC_AUTH_ACTIVE=true
N8N_BASIC_AUTH_USER=admin
N8N_BASIC_AUTH_PASSWORD=matkhaucuaban
DB_SQLITE_POOL_SIZE=5
N8N_RUNNERS_ENABLED=true
N8N_BLOCK_ENV_ACCESS_IN_NODE=false
N8N_ENFORCE_SETTINGS_FILE_PERMISSIONS=true
👉 Giải thích:
N8N_HOST
: domain của bạn.N8N_PROTOCOL=http
: vì mình đã cài đặt Nginx proxy SSL nên n8n chỉ cần chạy HTTP là đủ. (Lưu ý nếu để https thì lúc chạy có thể bị báo lỗi)WEBHOOK_URL
: phải là HTTPS vì nhiều ứng dụng/API yêu cầu SLL để giao tiếp với nhauN8N_BASIC_AUTH_*
: bảo vệ n8n bằng user/password.N8N_ENCRYPTION_KEY
: điền 32 ký tự đã tạo ở bước trên
Bước 5: Tạo file docker-compose.yml
nano docker-compose.yml
File này sẽ chịu trách nhiệm set các biến môi trường mặc định khi khởi chạy n8n. (Dùng Docker Compose để quản lý & nâng cấp dễ hơn, chi tiết bạn có thể tra google để tìm hiểu thêm ) Nội dung cấu hình như bên dưới, bạn có thể sao chép và tùy chỉnh phù hợp với vps của bạn.
version: "3.3"
services:
n8n:
image: n8nio/n8n:1.97.0
container_name: n8n
restart: always
network_mode: "host"
env_file:
- .env
volumes:
- ./data:/home/node/.n8n
👉 Giải thích:
image
: chọn version ổn định (mình dùng1.97.0
).network_mode: host
: container dùng luôn network của VPS, giúp Nginx dễ kết nối.volumes
: lưu dữ liệu bền vững.
Bước 6: Khởi động n8n
docker-compose up -d
👉 Giải thích:
up -d
: giúp n8n có thể chạy nền ngay cả khi tắt cửa sổ điều khiển (detached mode).- Docker sẽ tải image và chạy container n8n.
Bước 7: Kiểm tra n8n
docker-compose logs -f n8n
Nếu mọi thứ ok, sẽ thấy dòng:
Editor is now accessible via: https://n8n.maivangia.com
Bước 8: Cấu hình Nginx làm reverse proxy
Sau khi trỏ domain chạy n8n về VPS, bạn cần cài đặt SSL cho domain này. Ở đây mình dùng hocvps script để cài đặt SLL nên file cấu hình SSL được lưu tại đường dẫn /etc/nginx/conf.d/n8n.maivangia.com.conf
. Chúng ta cần thêm thêm proxy request trong file cấu hình này để khi truy cập vào n8n.maivangia.com, hệ thống sẽ trỏ về địa chỉ http://127.0.0.1:5678
(container n8n).
File cấu hình Nginx: /etc/nginx/conf.d/n8n.maivangia.com.conf
server {
listen 80;
server_name n8n.maivangia.com www.n8n.maivangia.com;
listen [::]:80;
return 301 https://$host$request_uri;
}
server {
listen 443 ssl http2;
listen [::]:443 ssl http2;
server_name n8n.alancrypto.com www.n8n.maivangia.com;
ssl_certificate /etc/nginx/ssl/n8n.maivangia.com/n8n.maivangia.com.crt;
ssl_certificate_key /etc/nginx/ssl/n8n.maivangia.com/n8n.maivangia.com.key;
ssl_trusted_certificate /etc/nginx/ssl/n8n.maivangia.com/n8n.maivangia.com.ca;
access_log /home/n8n.maivangia.com/logs/access.log;
error_log /home/n8n.maivangia.com/logs/error.log;
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_read_timeout 3600;
proxy_send_timeout 3600;
proxy_cache_bypass $http_upgrade;
}
}
👉 Giải thích:
proxy_pass http://127.0.0.1:5678
: forward traffic HTTPS → n8n .proxy_set_header
: giữ nguyên thông tin request.ssl_certificate
: SSL tự tạo hoặc ZeroSSL/Let’s Encrypt.
Kiểm tra & nạp lại Nginx:
sudo nginx -t # kiểm tra cú pháp Nginx
sudo systemctl reload nginx # nạp lại cấu hình
3. Các lỗi mình đã gặp và cách khắc phục
❌ Lỗi 502 Bad Gateway
Nguyên nhân: nginx không kết nối được đến n8n container.
Cách khắc phục:
- Dùng
network_mode: host
. - Kiểm tra container có chạy chưa:
docker ps
. - Test nội bộ:
curl http://127.0.0.1:5678
.
❌ Lỗi “Connection reset by peer”
Nguyên nhân: N8N_PROTOCOL
để https
trong .env
→ n8n nghe SSL, nhưng nginx cũng SSL → xung đột.
Khắc phục: đổi N8N_PROTOCOL=http
.
❌ Lỗi Permission denied /home/node/.n8n/config
Nguyên nhân: quyền folder data
không đúng.
Khắc phục:
sudo chown -R 1000:1000 /home/n8n/data
❌ Webhook sinh sai URL (ví dụ còn http://
hoặc cổng 5678)
Kiểm tra .env
(WEBHOOK_URL, N8N_HOST/PROTOCOL/PORT) → docker compose restart
.
4. Các lệnh thường dùng để quản lý n8n với Docker
- Khởi động n8n:
docker-compose up -d
- Tắt n8n:
docker-compose down
- Xem logs:
docker-compose logs -f n8n
- Restart:
docker-compose restart n8n
- Vào trong container:
docker exec -it n8n sh
- Xem container đang chạy:
docker ps
- Sao lưu dữ liệu (thư mục ./data – chứa DB/credentials/workflows) của n8n:
tar czf n8n-backup-$(date +%F).tar.gz -C ~/n8n data
5. Lưu ý khi cài proxy với Nginx
- Luôn để n8n chạy HTTP, chỉ SSL ở Nginx.
- Nếu có nhiều domain, hãy chắc chắn file
.conf
không bị trùngserver_name
.
6. Tổng kết
Qua hành trình này, mình học được:
- Docker giúp dễ triển khai, nhưng cần cẩn thận với cấu hình
.env
. - Vấn đề lớn nhất thường nằm ở proxy/nginx chứ không phải bản thân n8n.
- Kiểm tra theo từng lớp (container → localhost → nginx → domain) là cách debug nhanh nhất.
Với các bước trên, giờ đây bạn có thể chạy n8n ổn định, có HTTPS, bảo mật cơ bản bằng password, và có thể bắt đầu xây dựng workflow automation ngay lập tức. Gia chúc bạn thành công 🚀