Cấu hình VPS cho n8n production: queue mode, worker và PostgreSQL

Cấu hình VPS cho n8n production giúp bạn chạy workflow tự động với main, worker, PostgreSQL và Redis riêng vai trò. n8n nhận dữ liệu từ ứng dụng, xử lý theo workflow và gửi kết quả tới dịch vụ đích. Bài viết này sẽ hướng dẫn bạn chọn cấu hình, dựng queue mode bằng Docker Compose và kiểm tra từng bước trên Ubuntu 24.04.


Những điểm chính

  • Kiến trúc: Main nhận yêu cầu, Redis giữ hàng đợi, worker xử lý và PostgreSQL lưu dữ liệu.
  • Code node: Mỗi worker ghép một task runner cùng phiên bản.
  • Tài nguyên: Chọn CPU, RAM theo dữ liệu và số execution chạy cùng lúc.
  • Khôi phục: Giữ database, volume và khóa mã hóa ở nơi an toàn ngoài VPS.
  • Góc nhìn VPSMMO: Nên tách tác vụ nặng khỏi tiến trình giao diện trước khi tăng lượng workflow production.

n8n production là gì?

n8n production là môi trường chạy workflow phục vụ công việc thực tế, có theo dõi lỗi, sao lưu và quy trình khôi phục. Khác với bản chạy thử, bạn cần giữ dữ liệu và credential an toàn trong suốt quá trình vận hành.

Bạn có thể dùng n8n để nhận webhook, đồng bộ dữ liệu hoặc chạy lịch gọi API. Khi nhiều tác vụ cùng hoạt động, việc tách vai trò xử lý giúp giao diện dễ sử dụng và thuận tiện kiểm tra từng thành phần.

Các thành phần chính của cấu hình VPS cho n8n gồm:

  • Main: Quản lý editor, lịch chạy và nhận webhook.
  • Worker: Thực thi workflow từ hàng đợi.
  • Task runner: Xử lý tác vụ Code node theo cấu hình external mode.
  • PostgreSQL: Lưu workflow, credential và dữ liệu execution.
  • Redis: Điều phối hàng đợi giữa main và worker.

Bài dùng n8n 2.43.7 và runner cùng phiên bản. Trước khi cài, bạn nên kiểm tra bản stable mới nhất cùng release notes để chọn bộ image phù hợp.

Cấu hình VPS cho n8n: so sánh chạy thử và môi trường production


Queue mode trong n8n hoạt động như thế nào?

n8n queue mode chuyển việc thực thi từ main sang worker thông qua Redis. Main tạo execution, đưa mã execution vào hàng đợi; worker lấy mã đó, đọc dữ liệu từ PostgreSQL rồi chạy workflow.

Theo tài liệu queue mode của n8n, main và các worker cùng dùng database, Redis và khóa mã hóa. n8n worker ghi kết quả vào PostgreSQL, sau đó báo trạng thái hoàn thành qua hàng đợi.

Ví dụ, bạn nhận dữ liệu đơn hàng qua webhook. Main nhận yêu cầu, worker lấy workflow để gọi API kế toán, còn kết quả được lưu trong database để bạn xem lại trên giao diện.

Với Code node, mỗi worker kết nối tới một task runner riêng. Bạn giữ cùng phiên bản image và token runner cho các cặp này để việc thực thi mã diễn ra đúng thành phần.

Khi nào bạn nên dùng queue mode?

Bạn nên dùng queue mode khi nhiều workflow cùng chạy, tác vụ nặng làm editor chậm hoặc cần mở rộng tiến trình thực thi. Nếu đang chạy ít workflow tuần tự và hệ thống đáp ứng tốt, bạn có thể giữ kiến trúc gọn trước.

Benchmark của n8n ghi nhận một instance đạt tới khoảng 220 execution mỗi giây với workflow đơn giản. Workflow gọi API, xử lý tệp hoặc Code node cần được đo trên dữ liệu thực tế trước khi chọn tải production.

Cấu hình VPS cho n8n cần đi cùng cách viết workflow. Khi API đích chậm hoặc giới hạn request, hãy chỉnh luồng xử lý và mức song song trước khi tăng thêm worker.

Kiến trúc cấu hình VPS cho n8n với main, Redis, worker, runner và PostgreSQL


Yêu cầu hệ thống và cấu hình VPS cho n8n

VPSMMO gợi ý khởi điểm 4 vCPU, 8 GB RAM để dựng main, 2 worker, PostgreSQL, Redis và Nginx. Đây là mức gợi ý để bạn bắt đầu đánh giá, sau đó điều chỉnh bằng số đo workflow của bạn.

Trước khi cài, bạn cần chuẩn bị:

  • Hệ điều hành: Ubuntu 24.04 mới, chưa có stack hoặc panel xung đột.
  • CPU và RAM: Đủ cho main, worker, runner và các dịch vụ dữ liệu.
  • Ổ lưu trữ: NVMe còn chỗ cho database, execution, log và backup.
  • Quyền quản trị: Root hoặc tài khoản sudo; có sẵn nano, openssl và ufw.
  • Tên miền: Một tên miền như n8n.tenmien.vn cùng quyền sửa DNS.
  • Kết nối: Internet để tải image, cổng SSH và cổng HTTP/HTTPS để quản trị, cấp SSL.

Lưu ý: Bạn nên dùng máy mới cho bộ lệnh trong bài. Nếu VPS đã có workflow, hãy sao lưu database, khóa mã hóa và volume trước khi thay đổi kiến trúc.

Chọn RAM và concurrency

RAM tăng theo JSON, binary data, số node, Code node và số workflow chạy đồng thời. Chạy thủ công còn cần dữ liệu cho editor, vì vậy bạn nên đo cả lúc chỉnh workflow lẫn khi chạy production.

Worker mặc định có concurrency 10; tài liệu khuyên từ 5 trở lên. VPSMMO gợi ý bắt đầu trong khoảng 5 đến 10, rồi xem RAM, CPU và thời gian chờ để điều chỉnh.

Bạn cần để RAM cho database, Redis, runner và hệ điều hành. Số worker không tính bằng một công thức cố định theo vCPU; hãy tăng theo hàng đợi và mức tài nguyên còn trống.

Các gói dưới bắt đầu từ 12 GB RAM để còn bộ nhớ cho tải phát sinh. Bố trí trong bảng là gợi ý khởi đầu của VPSMMO:

3 gói VPS n8n tại VPSMMO cho queue mode

GóivCPURAMNVMe U.2MạngGiá/ThángBố trí gợi ý
Basic612 GB120 GB300 Mbps380.000đ2 worker, concurrency 5; main nhận webhook
Standard816 GB160 GB500 Mbps580.000đ2 worker, concurrency 10; tách webhook khi main chịu tải đầu vào cao
Premium1232 GB200 GB500 Mbps860.000đThêm cặp worker/runner theo tải; cân nhắc webhook processor riêng

Các bước cài đặt và cấu hình VPS cho n8n

Bạn sẽ lần lượt trỏ tên miền, cài Docker, tạo biến môi trường, khai báo các dịch vụ rồi khởi động. Làm từng bước và kiểm tra kết quả trước khi chuyển sang phần tiếp theo.

Bước 1: Trỏ tên miền về IP của VPS

Tạo bản ghi A cho n8n trong trang DNS đang sử dụng. Giá trị bản ghi là IPv4 của VPS, không thêm giao thức hoặc đường dẫn vào ô địa chỉ.

Khi tên miền đã trỏ đúng IP, bạn có thể cấp SSL ở phần Nginx. Xem thêm hướng dẫn chọn gói, tên miền và SSL nếu bạn cần chuẩn bị từ bước đặt dịch vụ.

Bước 2: Cài Docker Engine và Compose plugin

Bạn dùng kho Docker chính thức theo hướng dẫn Docker cho Ubuntu. Quá trình tải gói và image có thể mất vài phút, tùy mạng và cấu hình VPS.

Lưu ý: Khối dưới có lệnh gỡ gói Docker xung đột. Với máy đang chạy dịch vụ, bạn cần kiểm tra kế hoạch chuyển đổi và backup trước khi thực hiện.

Trước tiên, hãy mở phiên root và cài Docker cùng Compose plugin:

VPSMMO Tutorial
sudo -i
apt remove $(dpkg --get-selections docker.io docker-compose docker-compose-v2 docker-doc docker-buildx podman-docker containerd runc | cut -f1)
apt update
apt install -y ca-certificates curl
install -m 0755 -d /etc/apt/keyrings
curl -fsSL https://download.docker.com/linux/ubuntu/gpg -o /etc/apt/keyrings/docker.asc
chmod a+r /etc/apt/keyrings/docker.asc
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
apt update
apt install -y docker-ce docker-ce-cli containerd.io docker-buildx-plugin docker-compose-plugin
docker run hello-world
docker compose version
systemctl status docker --no-pager

Lệnh này sẽ thêm kho Docker, cài các gói cần thiết rồi chạy kiểm tra. Khi hoàn tất, bạn sẽ thấy phiên bản Compose và trạng thái dịch vụ Docker.

Nếu bạn muốn làm quen với luồng cài đơn giản trước, xem hướng dẫn Docker và n8n cơ bản. Trong bài này, bạn tiếp tục dựng PostgreSQL, Redis và các worker.

Bước 3: Tạo .env và script khởi tạo PostgreSQL

Bạn cần tạo .env trước lần chạy đầu tiên. Tệp này chứa phiên bản image, mật khẩu database, khóa mã hóa credential và token kết nối runner.

Lưu ý: Chạy khối dưới từng dòng. Khi nano mở init-data.sh, dán script ngay bên dưới; khi mở docker-compose.yml, dán cấu hình tại Bước 4. Chỉ chạy kiểm tra Compose sau khi đã lưu cả hai tệp.

Tạo thư mục và các tệp cấu hình theo thứ tự sau:

VPSMMO Tutorial
mkdir -p /opt/n8n/backup
cd /opt/n8n
cat > .env <<EOF
N8N_VERSION=2.43.7
POSTGRES_USER=n8n_admin
POSTGRES_PASSWORD=DoiMatKhauManh@2026
POSTGRES_DB=n8n
POSTGRES_NON_ROOT_USER=n8n_app
POSTGRES_NON_ROOT_PASSWORD=DoiMatKhauKhac@2026
N8N_ENCRYPTION_KEY=$(openssl rand -hex 32)
RUNNERS_AUTH_TOKEN=$(openssl rand -hex 32)
EOF
chmod 600 .env
cat .env
nano init-data.sh
chmod 755 init-data.sh
nano docker-compose.yml
docker compose config --quiet && echo OK
  • Thay DoiMatKhauManh@2026 bằng mật khẩu quản trị PostgreSQL của bạn.
  • Thay DoiMatKhauKhac@2026 bằng mật khẩu riêng cho user ứng dụng.

Lệnh này sẽ tạo khóa ngẫu nhiên và đặt quyền đọc .env cho chủ tệp. Dòng kiểm tra cuối chỉ in OK khi Compose đọc được cấu hình.

Lưu ý: Giữ mật khẩu mẫu mới không có dấu đô la hoặc nháy đơn để tránh thay biến Compose và lỗi SQL. Tệp .env có bí mật; không gửi ảnh hoặc log chứa nội dung tệp này.

Tiếp theo, dán script sau vào init-data.sh đang mở:

VPSMMO Tutorial
#!/bin/bash
set -e
if [ -n "${POSTGRES_NON_ROOT_USER:-}" ] && [ -n "${POSTGRES_NON_ROOT_PASSWORD:-}" ]; then
psql -v ON_ERROR_STOP=1 --username "$POSTGRES_USER" --dbname "$POSTGRES_DB" <<EOSQL
CREATE USER ${POSTGRES_NON_ROOT_USER} WITH PASSWORD '${POSTGRES_NON_ROOT_PASSWORD}';
GRANT ALL PRIVILEGES ON DATABASE ${POSTGRES_DB} TO ${POSTGRES_NON_ROOT_USER};
GRANT CREATE ON SCHEMA public TO ${POSTGRES_NON_ROOT_USER};
EOSQL
fi

Script sẽ tự động:

  • Tạo user n8n_app theo biến đã khai báo.
  • Cấp quyền database và quyền tạo đối tượng trong schema public cho ứng dụng.
  • Dừng khởi tạo khi câu lệnh SQL báo lỗi.

Lưu ý: Script chỉ chạy khi volume PostgreSQL còn trống. Nếu database đã tồn tại, thay mật khẩu trong .env sẽ không tự đổi mật khẩu của user đã tạo.

Bạn hãy lưu N8N_ENCRYPTION_KEY ở nơi an toàn ngoài VPS. Main, worker và bản khôi phục phải dùng đúng khóa để đọc credential.

Bước 4: Khai báo main, worker và task runner

Bạn sẽ chạy main, PostgreSQL, Redis và 2 cặp worker/runner bằng một tệp Compose. Mỗi worker có runner và đường dẫn event log riêng.

Dán cấu hình sau vào docker-compose.yml đang mở:

VPSMMO Tutorial
name: n8n

x-n8n-env: &n8n-env
  DB_TYPE: postgresdb
  DB_POSTGRESDB_HOST: postgres
  DB_POSTGRESDB_PORT: 5432
  DB_POSTGRESDB_DATABASE: ${POSTGRES_DB}
  DB_POSTGRESDB_USER: ${POSTGRES_NON_ROOT_USER}
  DB_POSTGRESDB_PASSWORD: ${POSTGRES_NON_ROOT_PASSWORD}
  EXECUTIONS_MODE: queue
  QUEUE_BULL_REDIS_HOST: redis
  QUEUE_BULL_REDIS_PORT: 6379
  QUEUE_HEALTH_CHECK_ACTIVE: "true"
  OFFLOAD_MANUAL_EXECUTIONS_TO_WORKERS: "true"
  N8N_ENCRYPTION_KEY: ${N8N_ENCRYPTION_KEY}
  N8N_HOST: n8n.tenmien.vn
  N8N_PROTOCOL: https
  N8N_EDITOR_BASE_URL: https://n8n.tenmien.vn/
  N8N_WEBHOOK_URL: https://n8n.tenmien.vn/
  N8N_PROXY_HOPS: 1
  GENERIC_TIMEZONE: Asia/Ho_Chi_Minh
  TZ: Asia/Ho_Chi_Minh
  N8N_DEFAULT_BINARY_DATA_MODE: database
  EXECUTIONS_DATA_PRUNE: "true"
  EXECUTIONS_DATA_MAX_AGE: 168
  EXECUTIONS_DATA_PRUNE_MAX_COUNT: 50000
  N8N_RUNNERS_MODE: external
  N8N_RUNNERS_AUTH_TOKEN: ${RUNNERS_AUTH_TOKEN}
  N8N_RUNNERS_BROKER_LISTEN_ADDRESS: 0.0.0.0

x-worker: &worker
  image: docker.n8n.io/n8nio/n8n:${N8N_VERSION}
  restart: always
  command: ["worker", "--concurrency=10"]
  stop_grace_period: 40s
  volumes:
    - n8n_storage:/home/node/.n8n
  healthcheck:
    test: ["CMD-SHELL", "wget -qO- http://localhost:5678/healthz/readiness || exit 1"]
    interval: 30s
    timeout: 10s
    retries: 5
    start_period: 60s
  depends_on:
    postgres:
      condition: service_healthy
    redis:
      condition: service_healthy
    n8n:
      condition: service_started

x-runner: &runner
  image: n8nio/runners:${N8N_VERSION}
  restart: always

services:
  postgres:
    image: postgres:18
    restart: always
    environment:
      POSTGRES_USER: ${POSTGRES_USER}
      POSTGRES_PASSWORD: ${POSTGRES_PASSWORD}
      POSTGRES_DB: ${POSTGRES_DB}
      POSTGRES_NON_ROOT_USER: ${POSTGRES_NON_ROOT_USER}
      POSTGRES_NON_ROOT_PASSWORD: ${POSTGRES_NON_ROOT_PASSWORD}
      PGDATA: /var/lib/postgresql/data
    volumes:
      - db_storage:/var/lib/postgresql/data
      - ./init-data.sh:/docker-entrypoint-initdb.d/init-data.sh
    healthcheck:
      test: ["CMD-SHELL", "pg_isready -h localhost -U ${POSTGRES_USER} -d ${POSTGRES_DB}"]
      interval: 5s
      timeout: 5s
      retries: 10

  redis:
    image: redis:7-alpine
    restart: always
    volumes:
      - redis_storage:/data
    healthcheck:
      test: ["CMD", "redis-cli", "ping"]
      interval: 5s
      timeout: 5s
      retries: 10

  n8n:
    image: docker.n8n.io/n8nio/n8n:${N8N_VERSION}
    restart: always
    ports:
      - "127.0.0.1:5678:5678"
    environment:
      <<: *n8n-env
    volumes:
      - n8n_storage:/home/node/.n8n
    healthcheck:
      test: ["CMD-SHELL", "wget -qO- http://localhost:5678/healthz || exit 1"]
      interval: 30s
      timeout: 10s
      retries: 5
      start_period: 60s
    depends_on:
      postgres:
        condition: service_healthy
      redis:
        condition: service_healthy

  n8n-runner:
    <<: *runner
    environment:
      N8N_RUNNERS_AUTH_TOKEN: ${RUNNERS_AUTH_TOKEN}
      N8N_RUNNERS_TASK_BROKER_URI: http://n8n:5679
    depends_on:
      - n8n

  n8n-worker-1:
    <<: *worker
    environment:
      <<: *n8n-env
      N8N_EVENTBUS_LOGWRITER_LOGFULLPATH: /home/node/.n8n/n8nEventLog-worker-1.log

  n8n-worker-1-runner:
    <<: *runner
    environment:
      N8N_RUNNERS_AUTH_TOKEN: ${RUNNERS_AUTH_TOKEN}
      N8N_RUNNERS_TASK_BROKER_URI: http://n8n-worker-1:5679
    depends_on:
      - n8n-worker-1

  n8n-worker-2:
    <<: *worker
    environment:
      <<: *n8n-env
      N8N_EVENTBUS_LOGWRITER_LOGFULLPATH: /home/node/.n8n/n8nEventLog-worker-2.log

  n8n-worker-2-runner:
    <<: *runner
    environment:
      N8N_RUNNERS_AUTH_TOKEN: ${RUNNERS_AUTH_TOKEN}
      N8N_RUNNERS_TASK_BROKER_URI: http://n8n-worker-2:5679
    depends_on:
      - n8n-worker-2

volumes:
  db_storage:
  n8n_storage:
  redis_storage:
  • Thay n8n.tenmien.vn bằng tên miền bạn đã trỏ về VPS.
  • Giữ cùng N8N_VERSION cho main, worker và runner.

Cấu hình này sẽ giữ PostgreSQL và Redis trong mạng nội bộ Docker. Cổng n8n chỉ mở trên 127.0.0.1 để Nginx đứng phía trước.

Bạn lưu tệp rồi chạy dòng kiểm tra Compose ở cuối Bước 3. Nếu có lỗi thụt dòng hoặc biến môi trường, sửa đúng vị trí được báo trước khi khởi động.

Kiểm tra tệp Docker Compose hợp lệ khi cấu hình VPS cho n8n

Lưu ý: Giữ PGDATA và tên project n8n như mẫu để dữ liệu PostgreSQL và tên volume khớp phần backup. Khi đổi tên project, bạn phải đối chiếu lại tên volume.

Bước 5: Khởi động và kiểm tra cấu hình VPS cho n8n

Bạn hãy đợi tải xong các image rồi kiểm tra từng container. Với lệnh theo dõi log liên tục, nhấn Ctrl+C để thoát chế độ xem trước khi chạy dòng tiếp theo; container vẫn tiếp tục hoạt động.

Khởi động hệ thống và kiểm tra trạng thái bằng các lệnh sau:

VPSMMO Tutorial
cd /opt/n8n
docker compose pull
docker compose up -d
docker compose ps
docker compose logs -f n8n
docker compose logs -f n8n-worker-1
docker compose logs --tail=100 n8n-worker-1-runner
curl -s http://127.0.0.1:5678/healthz
docker compose exec n8n-worker-1 wget -qO- http://localhost:5678/healthz/readiness
docker stats --no-stream

Lệnh này sẽ tải image, tạo container và hiển thị log, healthcheck cùng tài nguyên sử dụng. Readiness của worker cần xác nhận kết nối được PostgreSQL và Redis.

Kiểm tra readiness của n8n worker và healthz của main

Main chạy được là bước đầu. Bạn còn cần kiểm tra worker và runner trước khi nhận workflow production; nếu một thành phần báo lỗi, chuyển tới mục xử lý sự cố ở cuối bài.


Cấu hình tường lửa, Nginx và SSL

Bạn cần mở đúng cổng SSH và web, đặt Nginx làm reverse proxy rồi cấp SSL cho tên miền. Trong ví dụ, chỉ Nginx tiếp nhận kết nối công khai, còn n8n nghe trên localhost.

Bước 6: Mở cổng, tạo reverse proxy và cấp SSL

Lưu ý: Nếu SSH dùng cổng riêng, hãy cho phép cổng đó trước khi bật UFW. Giữ phiên SSH hiện tại và kiểm tra thêm một phiên đăng nhập mới để chắc chắn còn đường quản trị.

Cài Nginx, cho phép các kết nối cần thiết và mở tệp site:

VPSMMO Tutorial
apt install -y nginx
ufw allow OpenSSH
ufw allow 'Nginx Full'
ufw enable
nano /etc/nginx/sites-available/n8n.tenmien.vn

Lệnh này sẽ cài Nginx, cho phép nhóm cổng web và bật UFW. Bạn nhập xác nhận khi được hỏi, rồi tiếp tục sửa tệp cấu hình tên miền.

Dán nội dung reverse proxy vào tệp Nginx vừa mở:

VPSMMO Tutorial
map $http_upgrade $connection_upgrade {
    default upgrade;
    ''      close;
}

server {
    listen 80;
    listen [::]:80;
    server_name n8n.tenmien.vn;

    client_max_body_size 200m;

    location / {
        proxy_pass http://127.0.0.1:5678;
        proxy_http_version 1.1;
        proxy_set_header Upgrade $http_upgrade;
        proxy_set_header Connection $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-Host $host;
        proxy_set_header X-Forwarded-Proto $scheme;
        proxy_buffering off;
        proxy_cache off;
        proxy_read_timeout 3600s;
        proxy_send_timeout 3600s;
    }
}
  • Thay n8n.tenmien.vn bằng tên miền của bạn.

Cấu hình này sẽ chuyển request tới n8n, giữ các header tên miền và HTTPS, đồng thời hỗ trợ kết nối WebSocket.

Lưu ý: Mẫu dùng N8N_PROXY_HOPS=1 cho một tầng Nginx. Nếu bạn có proxy khác phía trước, cần chỉnh theo số tầng thực tế. Kiểm tra khối map đã có ở site khác để tránh khai báo trùng.

Sau khi lưu tệp, hãy bật site và cấp chứng chỉ bằng Certbot:

VPSMMO Tutorial
ln -s /etc/nginx/sites-available/n8n.tenmien.vn /etc/nginx/sites-enabled/
nginx -t
systemctl reload nginx
apt install -y certbot python3-certbot-nginx
certbot --nginx -d n8n.tenmien.vn
certbot renew --dry-run
curl -I https://n8n.tenmien.vn/healthz
  • Thay n8n.tenmien.vn ở cả đường dẫn cấu hình và tên miền cấp chứng chỉ.

Lệnh này sẽ kiểm tra Nginx, cài Certbot bản apt và cấp SSL cho tên miền. Lượt dry-run giúp bạn kiểm tra quy trình gia hạn.

Kết quả nginx -t khi cấu hình reverse proxy cho n8n

Nếu Nginx báo lỗi cú pháp, hãy dừng để sửa rồi mới nạp lại. Sau khi SSL hoàn tất, mở địa chỉ HTTPS của tên miền để tạo tài khoản chủ sở hữu và kiểm tra giao diện.

Bước 7: Kiểm tra worker nhận và thực thi workflow

Bạn hãy tạo một workflow nhỏ gồm webhook và Code node, kích hoạt rồi gửi yêu cầu thử. Đối chiếu execution trên giao diện với log worker, runner để xác nhận công việc đi đúng thành phần.

Mẫu đặt OFFLOAD_MANUAL_EXECUTIONS_TO_WORKERS=true để đưa cả chạy thủ công sang worker. Khi cấu hình VPS cho n8n, bạn nên kiểm cả thao tác thử, webhook production và lịch chạy theo múi giờ đã chọn.


Thêm worker và theo dõi tải

Bạn thêm worker bằng cách bổ sung cả cặp worker/runner, sau đó theo dõi RAM, CPU và hàng đợi. Tăng số tiến trình khi còn tài nguyên và hàng đợi tiếp tục dồn việc.

Thêm cặp worker thứ 3

Chép hai khối worker-2 và worker-2-runner thành cặp mới. Đổi số ở tên dịch vụ, địa chỉ broker và đường dẫn event log; giữ cùng phiên bản image, khóa mã hóa và kết nối database.

Sau khi lưu tệp Compose, cập nhật các dịch vụ:

VPSMMO Tutorial
docker compose up -d
docker compose ps

Lệnh này sẽ tạo dịch vụ mới và hiển thị trạng thái container. Bạn kiểm tra runner đã trỏ tới đúng worker trước khi cho cặp mới nhận việc.

Lưu ý: Không dùng cách scale một dịch vụ worker trong mẫu ghép cặp này. Mỗi runner phải kết nối đúng worker; phương án internal runner không được khuyên dùng cho production.

Điều chỉnh concurrency theo tải

Bạn dùng số liệu tài nguyên ở bước kiểm tra để đối chiếu thời gian execution. Nếu tăng concurrency làm RAM tăng mạnh hoặc API báo quá giới hạn, hãy giảm mức song song rồi đo lại.

N8N_CONCURRENCY_PRODUCTION_LIMIT khi khác -1 sẽ ghi đè concurrency của worker. Kiểm tra biến này trước khi kết luận tham số worker không có tác dụng.

Với workflow xử lý nhiều JSON hoặc tệp, bạn nên chia lô và bỏ dữ liệu không cần giữ. Với công việc gọi API, hãy xét giới hạn dịch vụ đích để tránh tăng worker rồi dồn nhiều lỗi hơn.

Khi nào nên tách webhook processor?

Bạn nên tách khi webhook production làm main bận hoặc cần thêm lớp nhận request. Bộ Compose trong bài vẫn dùng main nhận webhook; chỉ bổ sung lớp riêng khi số đo đầu vào cho thấy cần thiết.

Khi tách, các đường /webhook/ và /webhook-waiting/ đi tới cụm webhook; đường khác, kể cả /webhook-test/, về main. Bạn cần kiểm riêng các trigger đang dùng trước khi chuyển định tuyến.


Sao lưu và nâng cấp n8n an toàn

Bạn cần giữ database, .env chứa khóa và volume n8n_storage trước khi nâng cấp. Sao thêm bản backup ra ngoài VPS để có thể dựng lại hệ thống khi máy chủ gặp sự cố.

Tạo script sao lưu tự động

Tạo tệp /opt/n8n/backup.sh rồi dán script sau:

VPSMMO Tutorial
#!/bin/bash
set -e
cd /opt/n8n
NGAY=$(date +%F)
docker compose exec -T postgres pg_dump -U n8n_admin -d n8n -Fc > /opt/n8n/backup/n8n-db-$NGAY.dump
cp /opt/n8n/.env /opt/n8n/backup/n8n-env-$NGAY.txt
chmod 600 /opt/n8n/backup/n8n-env-$NGAY.txt
docker run --rm -v n8n_n8n_storage:/data:ro -v /opt/n8n/backup:/backup alpine tar czf /backup/n8n-storage-$NGAY.tar.gz -C /data .
find /opt/n8n/backup -name 'n8n-db-*.dump' -mtime +7 -delete
find /opt/n8n/backup -name 'n8n-storage-*.tar.gz' -mtime +7 -delete
find /opt/n8n/backup -name 'n8n-env-*.txt' -mtime +7 -delete

Script sẽ tự động:

  • Tạo bản dump database theo ngày.
  • Chép .env và đặt quyền bảo vệ tệp có khóa, mật khẩu.
  • Nén volume n8n_storage vào thư mục backup.
  • Dọn các bản cũ theo điều kiện đã đặt trong script.

Lưu ý: Bạn nên giữ thư mục backup chỉ cho người quản trị đọc. Tên volume trong script gắn với project n8n; nếu đổi tên project, đối chiếu volume trước khi chạy.

Cấp quyền, chạy thử script rồi mở lịch cron:

VPSMMO Tutorial
chmod 700 /opt/n8n/backup.sh
/opt/n8n/backup.sh
ls -lh /opt/n8n/backup
docker volume ls
crontab -e

Lệnh này sẽ tạo một lượt backup để bạn kiểm tra trước khi đặt lịch. Bạn cần thấy file dump, .env và archive volume trong thư mục đích.

Thêm dòng sau vào crontab đang mở:

VPSMMO Tutorial
30 2 * * * /opt/n8n/backup.sh >> /var/log/n8n-backup.log 2>&1

Dòng này sẽ gọi script theo lịch và ghi kết quả vào log. Bạn kiểm tra cả log lẫn file backup sau lượt chạy đầu tiên.

Script tạo các bản sao nối tiếp khi ứng dụng vẫn có thể ghi dữ liệu. Trước nâng cấp lớn, bạn nên chặn nguồn việc mới, đợi các execution đang chạy kết thúc rồi tạo backup theo một mốc thống nhất.

Khôi phục database trước khi mở lại workflow

Lệnh dưới sẽ thay dữ liệu database đích. Bạn cần chọn đúng file và dừng các tiến trình n8n trước khi thực hiện.

Giữ PostgreSQL chạy và phục hồi database bằng các lệnh sau:

VPSMMO Tutorial
cd /opt/n8n
docker compose stop n8n n8n-runner n8n-worker-1 n8n-worker-1-runner n8n-worker-2 n8n-worker-2-runner
docker compose exec -T postgres pg_restore -U n8n_admin -d n8n --clean --if-exists --no-owner --role=n8n_app < /opt/n8n/backup/n8n-db-2026-10-18.dump
docker compose up -d
  • Thay ngày 2026-10-18 trong tên tệp bằng ngày của bản dump cần khôi phục.

Lệnh này sẽ dừng main, worker, runner, khôi phục bản dump rồi khởi động dịch vụ. Bạn kiểm tra log và một lượt execution trước khi nhận lại công việc.

Lưu ý: Đây là phần khôi phục database. Khi phục hồi cả máy, bạn còn phải đặt lại .env với khóa cũ và volume tương ứng trước khi khởi động. Mất N8N_ENCRYPTION_KEY sẽ không đọc được credential.

Ghim phiên bản trước khi nâng cấp

Bạn hãy tạo backup và đọc release notes trước khi sửa N8N_VERSION. Main, worker và runner cần dùng cùng phiên bản để tránh lệch thành phần.

Đổi phiên bản trong .env rồi cập nhật image:

VPSMMO Tutorial
cd /opt/n8n
nano .env
docker compose pull
docker compose up -d
docker compose logs -f n8n

Lệnh này sẽ tải image theo phiên bản mới và tạo lại container. Bạn xem log, kiểm tra credential và chạy workflow mẫu trước khi xác nhận nâng cấp hoàn tất.

Nếu cần quay lại, sử dụng bản sao tương thích trước nâng cấp. Không chỉ đổi tag image khi database đã có migration của phiên bản mới.


Bản Community và chi phí n8n production

Community dùng được queue mode, worker, PostgreSQL, Redis và task runner theo giấy phép n8n. Bạn trả thêm khi cần các tính năng như multi-main HA, SSO hoặc quản trị doanh nghiệp.

Main là điểm lỗi duy nhất trong bản Community dù có nhiều worker. Bạn cần backup, giám sát và phương án phục hồi; nhiều main hoạt động song song thuộc phương án Enterprise.

Xem bảng tính năng và giá n8n khi chọn license. Phí VPS và phí bản quyền n8n là hai khoản riêng:

Phân biệt Community và tính năng trả phí

Tính năngCommunityBản trả phí phù hợp
Queue mode, worker, Redis, PostgreSQLCóKhông cần mua để dùng queue mode
External task runner, dọn executionCóTùy yêu cầu tính năng khác
Multi-main HAKhôngSelf-hosted Enterprise
Trang xem worker trong SettingsKhôngSelf-hosted Enterprise
SSO, log streaming, external secrets, GitKhôngChọn license hỗ trợ từng tính năng
Lưu binary ngoài S3/AzureKhôngSelf-hosted Business hoặc Enterprise

Các khoản chi phí cần chuẩn bị

Bạn cần dự toán gói VPS, tên miền, lưu trữ backup, thời gian quản trị và API bên ngoài. Nếu workflow gọi AI, phí model được tính theo nhà cung cấp API, tách khỏi giá thuê máy.

Bảng dưới giúp bạn ghi rõ khoản đã có trong dịch vụ và khoản cần mua thêm:

Các khoản chi cần kiểm trước khi vận hành

KhoảnCách dự toán
VPSTừ 380.000đ/tháng với gói Basic 6 vCPU, 12 GB RAM tại VPSMMO
Tên miềnMua và gia hạn tại nhà đăng ký
SSL Let’s EncryptChứng chỉ miễn phí, cần kiểm gia hạn
n8n Community0đ tiền license trong phạm vi giấy phép áp dụng
License nâng caoTheo tính năng và gói n8n lựa chọn
API AI, ứng dụng ngoàiTheo chính sách nhà cung cấp model hoặc dịch vụ
Backup ngoài VPSDung lượng lưu trữ và phương án truyền bản sao
Công quản trịCài đặt, cập nhật, kiểm cảnh báo và thử khôi phục

Một số mẹo và lưu ý

Bạn nên bảo vệ khóa, dọn dữ liệu đúng lịch và theo dõi ổ đĩa ngay từ lúc cấu hình VPS cho n8n. Các việc nhỏ này giúp giảm lỗi sau khi workflow đã chạy thường xuyên.

  • Giữ khóa mã hóa: Lưu khóa cũ ngoài VPS, dùng cùng khóa trên main và các worker.
  • Dọn execution: Mặc định n8n giữ 336 giờ và giới hạn 10.000 bản; mẫu trong bài dùng 168 giờ, 50.000 bản để minh họa chính sách.
  • Lưu binary data: Mẫu queue mode dùng database. Tính dữ liệu tệp vào dung lượng PostgreSQL và backup.
  • Chọn nơi lưu backup: Giữ thêm bản sao độc lập, thử khôi phục để biết dữ liệu sử dụng được.
  • Giới hạn log Docker: Đặt max-size và max-file cho log driver; bộ Compose trong bài chưa có cấu hình xoay vòng log.
  • Giữ cổng nội bộ: Chỉ Nginx nhận truy cập bên ngoài; PostgreSQL, Redis và task broker nằm trong mạng Docker.

Khi dùng reverse proxy khác phía trước Nginx, hãy kiểm lại header và số proxy hops. Với máy nhiều dịch vụ, kiểm thêm dung lượng ổ và lịch backup để tránh các tác vụ nặng chạy cùng lúc.


Xử lý sự cố khi cấu hình VPS cho n8n

Bạn kiểm tra theo thứ tự cấu hình, trạng thái container, log và kết nối. Tìm thành phần lỗi trước khi khởi động lại toàn bộ hệ thống để tránh bỏ mất dấu vết cần chẩn đoán.

Lỗi Compose không đọc được tệp cấu hình

Bạn kiểm tra thụt dòng, dấu nháy và tên biến .env. Sửa lỗi được báo trước khi khởi động lại.

Trong thư mục /opt/n8n, kiểm tra cấu hình Compose:

VPSMMO Tutorial
docker compose config --quiet && echo OK

Lệnh này sẽ in OK nếu cấu hình hợp lệ; nếu có lỗi, bạn sửa đúng dòng được báo. Không gửi bản cấu hình đã nội suy mật khẩu lên kênh công khai.

Lỗi không truy cập được giao diện web

Bạn kiểm tra main ở localhost và cấu hình Nginx, sau đó đối chiếu DNS, cổng web và chứng chỉ.

Kiểm tra phản hồi main và cú pháp Nginx:

VPSMMO Tutorial
curl -s http://127.0.0.1:5678/healthz
nginx -t

Lệnh này sẽ giúp phân biệt main không phản hồi với lỗi cú pháp proxy. Nếu main hoạt động, bạn tiếp tục kiểm đường truy cập bên ngoài và tên miền.

Lỗi worker hoặc Code node không nhận việc

Bạn đối chiếu phiên bản image, token runner, địa chỉ broker, khóa mã hóa và kết nối Redis/PostgreSQL. Kiểm tra trạng thái cùng log runner.

Xem trạng thái dịch vụ và log runner đầu tiên:

VPSMMO Tutorial
docker compose ps
docker compose logs --tail=100 n8n-worker-1-runner

Lệnh này sẽ cho bạn thông tin container và lỗi kết nối runner. Sửa giá trị sai trong .env hoặc Compose rồi cập nhật dịch vụ theo phần hướng dẫn.

Lỗi bộ nhớ khi chạy nhiều execution

Bạn kiểm tra container nào tăng RAM, dữ liệu đầu vào và concurrency. Giảm công việc đồng thời hoặc chia lô dữ liệu trước khi thử lại.

Xem mức dùng tài nguyên của các container:

VPSMMO Tutorial
docker stats --no-stream

Lệnh này sẽ hiển thị số liệu tại thời điểm kiểm tra. Đối chiếu lúc workflow nặng chạy để chọn điều chỉnh RAM, worker hay dữ liệu xử lý.


Kết luận

Bạn đã đi qua cách chọn cấu hình VPS cho n8n, dựng queue mode, ghép worker với runner, cấp SSL và chuẩn bị backup. Trước khi chạy workflow quan trọng, hãy thử một vòng webhook, Code node và khôi phục trên dữ liệu kiểm tra.

VPSMMO cung cấp Cloud VPS, VPS Linux, VPS giá rẻ, VPS hiệu năng cao và Dedicated Server tại Việt Nam, trên hạ tầng KVM, NVMe Enterprise và hệ thống quản trị trực tuyến Portal VPSMMO. Thuê VPS tại VPSMMO phù hợp cho website, WordPress, SEO, ứng dụng, API, Docker, DevOps và AI Agent.

Khi chọn VPS n8n, bạn có thể dùng N8N Install hoặc N8ndocker-Template để khởi tạo môi trường Docker. Với quyền root, bạn chủ động mở rộng queue mode; đội kỹ thuật VPSMMO hỗ trợ hạ tầng khi cần.

Kho ứng dụng AI CLI và Agent có N8N khi đặt VPS

Hạ tầng sử dụng Intel Xeon Platinum Series 8, RAM DDR4 ECC và NVMe Enterprise U.2. Backup hằng ngày, thao tác tự sao lưu và khôi phục giúp bạn chuẩn bị trước mỗi lần cập nhật.

Sao lưu và khôi phục VPS hằng ngày tại VPSMMO

Đội kỹ thuật VPSMMO hỗ trợ 24/7. Khi thuê VPS n8n, bạn được ưu đãi thuê 12 tháng tặng 3 tháng, thuê 3 năm tặng 12 tháng; hãy chọn gói theo dữ liệu, tải đồng thời và kế hoạch vận hành.

 

 

 

CÔNG TY TNHH VPSMMO

  • VP: 8B đường B31, KDC 91B, Phường Tân An, Thành phố Cần Thơ
  • Tel: 0589549338
  • Email: info@vpsmmo.vn

Leave a Reply

? Dedicated Gi� c?c r?

VPSMMO cung c?p gi?i ph�p cho thu� m�y ch? Dedicated gi� r? nh?t Vi?t Nam! Tri?n khai h? th?ng an to�n m� ch?ng ng?i chi ph� cao!

// Script VPSMMO Price VPS