❤️ AZDIGI chính thức cập nhật hệ thống blog mới hoàn chỉnh. Tuy nhiên có thể một số bài viết bị sai lệch hình ảnh, hãy ấn nút Báo cáo bài viết ở cuối bài để AZDIGI cập nhật trong thời gian nhanh nhất. Chân thành cám ơn.

Bạn đã quyết định self-host (tự host) n8n để tiết kiệm chi phí và kiểm soát hoàn toàn dữ liệu thay vì dùng n8n cloud? Đây là lựa chọn đúng đắn. Tuy nhiên, nhiều người dùng gặp khó khăn với các lỗi như connection timeout, SSL certificate, hay cấu hình domain của n8n. Trong bài viết này, AZDIGI sẽ hướng dẫn bạn cài đặt n8n trên VPS từ A-Z, bao gồm cả cách xử lý các lỗi phổ biến mà cộng đồng thường gặp.

Kiến trúc n8n - cách n8n hoạt động trên máy chủ
Cách n8n hoạt động trên máy chủ

Tại sao nên tự host n8n trên VPS?

Trước khi bắt đầu cài đặt, hãy hiểu rõ lợi ích của việc tự host n8n so với sử dụng n8n Cloud.

So sánh Self-hosted vs Cloud

Tiêu chín8n Self-hostedn8n Cloud
Chi phíChỉ trả tiền VPS (~79.000đ/tháng)Từ $20/tháng (~500.000đ)
ExecutionsKhông giới hạnGiới hạn theo plan
Dữ liệuLưu trên server của bạnLưu trên cloud n8n
Kiểm soátHoàn toànHạn chế
Cập nhậtTự quản lýTự động
SupportCommunityCó team hỗ trợ

Khi nào nên self-host?

Phù hợp nếu:

  • Bạn có kiến thức cơ bản về Linux/Docker
  • Cần chạy nhiều workflows không giới hạn
  • Muốn tiết kiệm chi phí dài hạn
  • Yêu cầu dữ liệu lưu trong nước (compliance)
  • Tích hợp với hệ thống internal

Không phù hợp nếu:

  • Chưa bao giờ dùng terminal/SSH
  • Cần dùng ngay, không có thời gian setup
  • Không có người quản lý server

Yêu cầu cấu hình VPS

n8n không đòi hỏi cấu hình quá cao. Tuy nhiên, cấu hình phù hợp sẽ đảm bảo hệ thống chạy ổn định.

Cấu hình tối thiểu

Thông sốCấu hình tối thiểuCấu hình khuyến nghị
CPU1 vCPU2 vCPU
RAM2 GB4 GB
Storage20 GB SSD40 GB NVMe
OSUbuntu 20.04+Ubuntu 22.04 LTS
Network100 Mbps1 Gbps

Lời khuyên chọn VPS

Với cấu hình phù hợp cho n8n với chi phí phù hợp, bạn có thể tham khảo VPS X-Platinum của AZDIGI:

Gói VPSCấu hìnhGiá/thángPhù hợp cho
Tăng Tốc 11 vCPU, 2GB RAM, 30GB NVMe79.000đThử nghiệm, cá nhân
Tăng Tốc – 22 vCPU, 4GB RAM, 50GB NVMe159.000đSMB, 10-50 workflows
Tăng Tốc – 34 vCPU, 8GB RAM, 80GB NVMe299.000đDoanh nghiệp lớn

Cách 1: Cài đặt n8n tự động (Khuyến nghị – áp dụng tại AZDIGI)

Nếu bạn là người mới không am hiểu về kỹ thuật thì có thể sử dụng cách cài đặt n8n tự động theo template được AZDIGI cung cấp sẵn. Chỉ cần chọn template n8n khi đăng ký VPS, hoặc dùng chức năng Reinstall (cài đặt lại) trong VPS và chọn template n8n.

Lưu ý: Không cài n8n bằng template với VPS đã có dữ liệu.

Xem chi tiết: Cách cài n8n tự động khi dùng VPS tại AZDIGI

Cách 2: Cài đặt n8n bằng Docker (Khuyến khích cho kỹ thuật)

Docker là cách đơn giản và an toàn nhất để cài đặt n8n, việc cập nhật phiên bản n8n cũng rất thuận tiện. Bạn không cần lo về sự phụ thuộc hay xung đột với các ứng dụng khác.

Để thuận tiện, AZDIGI sẽ hướng dẫn áp dụng với VPS/Server sử dụng hệ điều hành Ubuntu.

Bước 1: Cập nhật hệ thống và cài Docker

SSH vào VPS và chạy các lệnh sau:

# Cập nhật hệ thống
sudo apt update && sudo apt upgrade -y

# Cài đặt Docker curl -fsSL https://get.docker.com -o get-docker.sh sudo sh get-docker.sh

# Thêm user hiện tại vào group docker sudo usermod -aG docker $USER

# Khởi động Docker sudo systemctl enable docker sudo systemctl start docker

Logout và login lại để áp dụng group docker:

exit
# SSH lại vào server

Bước 2: Tạo thư mục lưu trữ dữ liệu

# Tạo thư mục cho n8n data
mkdir -p ~/.n8n
# Phân quyền (quan trọng để tránh lỗi permission)
sudo chown -R 1000:1000 ~/.n8n

Bước 3: Chạy n8n container

Cách đơn giản (development/test):

docker run -d 
  --name n8n 
  --restart unless-stopped 
  -p 5678:5678 
  -v ~/.n8n:/home/node/.n8n 
  n8nio/n8n

Cách đầy đủ với biến môi trường (phù hợp khi chạy chính thức):

docker run -d 
  --name n8n 
  --restart unless-stopped 
  -p 5678:5678 
  -v ~/.n8n:/home/node/.n8n 
  -e N8N_HOST="n8n.yourdomain.com" 
  -e N8N_PORT=5678 
  -e N8N_PROTOCOL=https 
  -e NODE_ENV=production 
  -e WEBHOOK_URL="https://n8n.yourdomain.com/" 
  -e GENERIC_TIMEZONE="Asia/Ho_Chi_Minh" 
  -e TZ="Asia/Ho_Chi_Minh" 
  n8nio/n8n

Bước 4: Kiểm tra n8n đã chạy

# Kiểm tra container đang chạy
docker ps

# Xem logs docker logs n8n

# Kiểm tra port curl http://localhost:5678

Nếu mọi thứ OK, bạn có thể truy cập http://YOUR_VPS_IP:5678 để thấy giao diện n8n.

Sử dụng Docker Compose (Khuyến nghị cho production)

Tạo file docker-compose.yml:

version: '3.8'

services: n8n: image: n8nio/n8n container_name: n8n restart: unless-stopped ports: - "5678:5678" volumes: - n8n_data:/home/node/.n8n environment: - N8N_HOST=n8n.yourdomain.com - N8N_PORT=5678 - N8N_PROTOCOL=https - NODE_ENV=production - WEBHOOK_URL=https://n8n.yourdomain.com/ - GENERIC_TIMEZONE=Asia/Ho_Chi_Minh - TZ=Asia/Ho_Chi_Minh # Tùy chọn: Database PostgreSQL thay vì SQLite # - DB_TYPE=postgresdb # - DB_POSTGRESDB_HOST=postgres # - DB_POSTGRESDB_DATABASE=n8n # - DB_POSTGRESDB_USER=n8n # - DB_POSTGRESDB_PASSWORD=your_password

volumes: n8n_data:

Chạy với:

docker compose up -d

Cập nhật phiên bản n8n khi sử dụng Docker / Docker Compose

Trường hợp 1: Chạy n8n bằng Docker (docker run)

# Kéo image n8n mới nhất
docker pull n8nio/n8n:latest

# Dừng container n8n hiện tại docker stop n8n

# Xoá container cũ (KHÔNG xoá volume) docker rm n8n

# Chạy lại container với image mới docker run -d --name n8n --restart unless-stopped -p 5678:5678 -v ~/.n8n:/home/node/.n8n -e N8N_HOST="n8n.yourdomain.com" -e N8N_PORT=5678 -e N8N_PROTOCOL=https -e NODE_ENV=production -e WEBHOOK_URL="https://n8n.yourdomain.com/" -e GENERIC_TIMEZONE="Asia/Ho_Chi_Minh" -e TZ="Asia/Ho_Chi_Minh" n8nio/n8n:latest

Dữ liệu workflow, credentials vẫn được giữ nguyên vì đã mount volume ~/.n8n.

Trường hợp 2: Chạy n8n bằng Docker Compose (Khuyến nghị)

# Vào thư mục chứa docker-compose.yml
cd /path/to/n8n

# Kéo image mới nhất docker compose pull

# Khởi động lại container với phiên bản mới docker compose up -d

Nếu muốn đảm bảo container cũ được recreate hoàn toàn:

docker compose down
docker compose up -d

Kiểm tra phiên bản n8n sau khi cập nhật

docker logs n8n | head -n 20

Hoặc vào giao diện n8n → Settings → About n8n để kiểm tra version.

Lưu ý quan trọng khi cập nhật n8n

  • Nên backup thư mục dữ liệu (~/.n8n hoặc volume Docker) trước khi update:tar -czvf n8n-backup-$(date +%F).tar.gz ~/.n8n
  • Với môi trường production lớn:
    • Tránh update ngay phiên bản major mới (ví dụ 1.x → 2.x) nếu chưa đọc changelog
    • Test trước trên VPS staging nếu có
  • Không nên dùng tag latest nếu cần sự ổn định lâu dài → có thể pin version:image: n8nio/n8n:1.34.2

Cách này giúp bạn chủ động nâng cấp, rollback và vận hành n8n ổn định lâu dài trên VPS.

Cách 2: Cài đặt n8n bằng npm

Phương pháp này phù hợp nếu bạn muốn kiểm soát chi tiết hơn hoặc cần debug.

Hướng dẫn nay áp dụng trên hệ điều hành Ubuntu/Debian.

Bước 1: Cài đặt Node.js

n8n yêu cầu Node.js 18 trở lên:

# Cài đặt Node.js 20 LTS
curl -fsSL https://deb.nodesource.com/setup_20.x | sudo -E bash -
sudo apt install -y nodejs
# Kiểm tra version
node -v  # Phải >= 18.x
npm -v

Bước 2: Cài đặt n8n global

sudo npm install n8n -g

Bước 3: Chạy n8n

# Chạy đơn giản
n8n start
# Chạy với các tùy chọn
N8N_HOST=0.0.0.0 N8N_PORT=5678 n8n start

Bước 4: Tạo systemd service (để chạy như service)

Tạo file /etc/systemd/system/n8n.service:

[Unit]
Description=n8n Workflow Automation
After=network.target

[Service] Type=simple User=root Environment="N8N_HOST=0.0.0.0" Environment="N8N_PORT=5678" Environment="GENERIC_TIMEZONE=Asia/Ho_Chi_Minh" ExecStart=/usr/bin/n8n start Restart=on-failure RestartSec=10

[Install] WantedBy=multi-user.target

Kích hoạt service:

sudo systemctl daemon-reload
sudo systemctl enable n8n
sudo systemctl start n8n
sudo systemctl status n8n

Cấu hình SSL với Let’s Encrypt

Bắt buộc cho production! Không có SSL, dữ liệu (bao gồm credentials) sẽ truyền không mã hóa.

Cách 1: Dùng Nginx làm Reverse Proxy (Khuyến nghị)

Bước 1: Cài đặt Nginx và Certbot

sudo apt install nginx certbot python3-certbot-nginx -y

Bước 2: Tạo cấu hình Nginx

Tạo file /etc/nginx/sites-available/n8n:

server {
    listen 80;
    server_name n8n.yourdomain.com;
location / {
        proxy_pass http://localhost: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_cache_bypass $http_upgrade;
        proxy_read_timeout 86400;
        chunked_transfer_encoding off;
        proxy_buffering off;
    }
}

Bước 3: Kích hoạt site

sudo ln -s /etc/nginx/sites-available/n8n /etc/nginx/sites-enabled/
sudo nginx -t
sudo systemctl reload nginx

Bước 4: Lấy SSL certificate

sudo certbot --nginx -d n8n.yourdomain.com

Certbot sẽ tự động cập nhật cấu hình Nginx với SSL.

Cách 2: Dùng Caddy (Đơn giản hơn)

Caddy tự động xử lý SSL mà không cần cấu hình phức tạp.

Cài đặt Caddy:

sudo apt install -y debian-keyring debian-archive-keyring apt-transport-https
curl -1sLf 'https://dl.cloudsmith.io/public/caddy/stable/gpg.key' | sudo gpg --dearmor -o /usr/share/keyrings/caddy-stable-archive-keyring.gpg
curl -1sLf 'https://dl.cloudsmith.io/public/caddy/stable/debian.deb.txt' | sudo tee /etc/apt/sources.list.d/caddy-stable.list
sudo apt update
sudo apt install caddy

Tạo Caddyfile /etc/caddy/Caddyfile:

n8n.yourdomain.com {
    reverse_proxy localhost:5678
}

Khởi động Caddy:

sudo systemctl restart caddy

Xong! Caddy tự động lấy SSL từ Let’s Encrypt.

cài đặt n8n từ A tới Z lên VPS

Cấu hình Domain/Subdomain

Bước 1: Tạo DNS Record

Vào quản lý DNS của domain và tạo A record:

TypeNameValueTTL
An8nYOUR_VPS_IP300

Chờ 5-15 phút để DNS propagate.

Bước 2: Cập nhật biến môi trường n8n

Với Docker, cập nhật lại container:

docker stop n8n
docker rm n8n
docker run -d 
  --name n8n 
  --restart unless-stopped 
  -p 5678:5678 
  -v ~/.n8n:/home/node/.n8n 
  -e N8N_HOST="n8n.yourdomain.com" 
  -e N8N_PROTOCOL=https 
  -e WEBHOOK_URL="https://n8n.yourdomain.com/" 
  -e GENERIC_TIMEZONE="Asia/Ho_Chi_Minh" 
  n8nio/n8n

Bước 3: Test webhook

Tạo một workflow đơn giản với Webhook trigger và test URL:

https://n8n.yourdomain.com/webhook/test-webhook

Backup dữ liệu n8n

Dữ liệu cần backup

n8n lưu trữ tất cả trong thư mục ~/.n8n:

  • database.sqlite – Workflows, credentials, executions
  • config – Cấu hình
  • .n8n/ – Encryption keys (quan trọng!)

Script backup tự động

Tạo file /root/backup-n8n.sh:

#!/bin/bash

# Cấu hình BACKUP_DIR="/root/backups/n8n" N8N_DATA="$HOME/.n8n" KEEP_DAYS=7

# Tạo thư mục backup mkdir -p $BACKUP_DIR

# Tên file backup với timestamp BACKUP_FILE="$BACKUP_DIR/n8n-backup-$(date +%Y%m%d-%H%M%S).tar.gz"

# Tạo backup tar -czvf $BACKUP_FILE $N8N_DATA

# Xóa backup cũ hơn 7 ngày find $BACKUP_DIR -name "*.tar.gz" -mtime +$KEEP_DAYS -delete

echo "Backup completed: $BACKUP_FILE"

Đặt lịch chạy hàng ngày với cron:

chmod +x /root/backup-n8n.sh
# Thêm vào crontab (chạy lúc 3h sáng mỗi ngày)
(crontab -l 2>/dev/null; echo "0 3 * * * /root/backup-n8n.sh") | crontab -

Restore từ backup

# Dừng n8n
docker stop n8n

# Restore tar -xzvf /root/backups/n8n/n8n-backup-YYYYMMDD.tar.gz -C /

# Khởi động lại docker start n8n

Troubleshooting: 5 lỗi thường gặp

Dựa trên phản hồi từ các hội nhóm Facebook và n8n Community, đây là các lỗi phổ biến nhất:

Lỗi 1: Permission denied khi mount volume

Triệu chứng:

Error: EACCES: permission denied, open '/home/node/.n8n/database.sqlite'

Nguyên nhân: Container n8n chạy với user ID 1000, nhưng thư mục host không đúng quyền.

Cách sửa:

sudo chown -R 1000:1000 ~/.n8n

Lỗi 2: Webhook không hoạt động

Triệu chứng: Webhook URL không nhận được request từ bên ngoài.

Nguyên nhân thường gặp:

  • Firewall chặn port
  • WEBHOOK_URL không đúng
  • SSL chưa cấu hình

Cách sửa:

# Mở port firewall
sudo ufw allow 5678
sudo ufw allow 80
sudo ufw allow 443
# Kiểm tra biến môi trường
docker exec n8n env | grep WEBHOOK

Lỗi 3: Connection timeout khi tạo workflow

Triệu chứng: Giao diện n8n load chậm hoặc timeout.

Nguyên nhân: VPS thiếu RAM hoặc CPU quá yếu.

Cách sửa:

  • Upgrade VPS lên cấu hình cao hơn
  • Hoặc tối ưu: tắt executions logging để giảm tải database
docker run <n8n_container_name> -e EXECUTIONS_DATA_SAVE_ON_ERROR=none 
               -e EXECUTIONS_DATA_SAVE_ON_SUCCESS=none 
               n8nio/n8n

Lỗi 4: SSL certificate không valid

Triệu chứng: Trình duyệt cảnh báo “Not Secure” dù đã cấu hình SSL.

Nguyên nhân: Certbot chưa renew hoặc cấu hình Nginx sai.

Cách sửa:

# Kiểm tra certificate
sudo certbot certificates

# Renew thủ công sudo certbot renew --dry-run

# Nếu lỗi, xóa và tạo lại sudo certbot --nginx -d n8n.yourdomain.com --force-renewal

Lỗi 5: n8n tự restart liên tục

Triệu chứng: Container restart loop, logs hiện lỗi memory.

Nguyên nhân: Out of memory (OOM killed).

Cách sửa:

# Kiểm tra memory usage
docker stats n8n
# Thêm swap nếu cần
sudo fallocate -l 2G /swapfile
sudo chmod 600 /swapfile
sudo mkswap /swapfile
sudo swapon /swapfile
echo '/swapfile none swap sw 0 0' | sudo tee -a /etc/fstab

Cập nhật n8n lên version mới

Với Docker

# Pull image mới nhất
docker pull n8nio/n8n:latest

# Dừng container cũ docker stop n8n docker rm n8n

# Chạy lại với image mới (giữ nguyên data volume) docker run -d --name n8n --restart unless-stopped -p 5678:5678 -v ~/.n8n:/home/node/.n8n n8nio/n8n:latest

Với npm

sudo npm update -g n8n
sudo systemctl restart n8n

Lưu ý: Luôn backup trước khi update. n8n 2.0 có nhiều breaking changes.

Kết luận

Việc cài đặt n8n trên VPS không quá phức tạp nếu bạn làm theo từng bước. Tóm tắt các bước chính:

  1. Chuẩn bị VPS tối thiểu 2GB RAM, cài Docker
  2. Chạy n8n container với volume mount
  3. Cấu hình Nginx/Caddy làm reverse proxy với SSL
  4. Trỏ domain và cập nhật WEBHOOK_URL
  5. Setup backup tự động hàng ngày

Với chi phí chỉ từ 79.000đ/tháng cho VPS, bạn có thể chạy n8n không giới hạn workflows và executions – tiết kiệm đáng kể so với n8n Cloud hay Zapier.

Bước tiếp theo:

Nếu bạn cần VPS phù hợp để self-host n8n, AZDIGI cung cấp X-Platinum VPS với ổ cứng NVMe tốc độ cao và hỗ trợ kỹ thuật 24/7. Đội ngũ kỹ thuật sẵn sàng hỗ trợ bạn cấu hình n8n nếu gặp khó khăn.

Chia sẻ:
Bài viết đã được kiểm duyệt bởi AZDIGI Team

Về tác giả

Thạch Phạm

Thạch Phạm

Đồng sáng lập và Giám đốc điều hành của AZDIGI. Có hơn 15 năm kinh nghiệm trong phổ biến kiến thức liên quan đến WordPress tại thachpham.com, phát triển website và phát triển hệ thống.

Hơn 10 năm phục vụ 80.000+ khách hàng

Bắt đầu dự án web của bạn với AZDIGI