0

Hướng dẫn cài n8n VPS mượt nhất để chạy nhiều Workflow

Share

Arcane: dùng để quản trị container dễ dàng. Chỉnh sửa, bật tắt, cài mới …dành cho ai không biết sử dụng unbutu. Và nó khá tiện và dễ sử dụng với những bạn không biết sử dụng SSH VPS.

Cloudflare Tunnel: để truy cập Arcane, n8n … thông qua tunnel (truy cập ở dạng URL)

Cần có VPS cài sẵn Ubuntu 22.04 LTS Server 64-Bit trở lên để cài nhé.

Đây là các hoạt động.

Dưới đây là sơ đồ của n8n hoạt động nhé.

Mình đang chạy cách này cho host hiện tại của mình. Và mình mới test khi chạy 4 worker từ lúc 16h -> 22h. Trên VPS FREE với cấu hình 4vCPU – 8GRAM – 160GB mình có đăng trong nhóm hôm nay. Nếu bạn muốn reg VPS FREE thì xem bài này nhé. Với cấu hình như trên và chạy 4 worker thì các worker dùng khoảng 30-35% nhé.

Bước 1: Cài Docker & Docker Compose

Cập nhật hệ thống ubuntu

apt update && apt upgrade -y

Cài docker và docker-compose

curl -fsSL https://get.docker.com | sh
apt install docker-compose-plugin -y

Kiểm tra:

docker compose version

Bước 2: Cài nano

apt update && apt install nano -y

Kiểm tra:

nano --version

Bước 3: Tạo thư mục cài Arcane

mkdir -p /opt/arcane
cd /opt/arcane

Tạo file docker-compose.yml bằng nano

nano docker-compose.yml

Bước 4: Lấy CLOUDFLARE_TUNNEL_TOKEN và cài Docker Compose hoàn chỉnh (Arcane + Cloudflare Tunnel)

Cách lấy YOUR_CLOUDFLARE_TUNNEL_TOKEN

Bạn cần domain đã add vào Cloudflare và đã bật proxy (icon mây cam).

Tạo Tunnel trên Cloudflare Dashboard:

Vào Cloudflare Dashboard -> Zero Trust → Networks → Tunnels (hoặc gõ tunnels trên thanh search)

Chọn Create tunnel –> Cloudflared ->Đặt tên cho tunnel -> save tunnel -> phần Choose your environment chọn Docker -> phần Install and run a connector ấn vào biểu tượng copy

Khi đó sẽ copy được file này:

docker run cloudflare/cloudflared:latest tunnel --no-autoupdate run --token eyJhIjoiM2I1Nzg0OGNiMjBmMzliMDljNGQ4NmNlZmMxMDBkYWQiLCJ0IjoiOGQ5MDY4ZTMtN2UyNS00N2Y1LWI0YTYtMjM5MGI3MzllYjNiIiwicyI6IlpEWTBNbUZtT1RRdFl6UXdNeTAwWkdabUxUZ3hOamN0T1dOaE9HWTVaR0U1TWpsayJ9

Thì YOUR_CLOUDFLARE_TUNNEL_TOKEN chính là chuỗi ký tự sau chữ token.

Dán TOÀN BỘ nội dung dưới đây vào nano. Nhớ thay YOUR_CLOUDFLARE_TUNNEL_TOKEN cho đúng nhé.

version: "3.9"

services:
  arcane:
    image: ghcr.io/getarcaneapp/arcane:latest
    container_name: arcane
    restart: unless-stopped
    ports:
      - "3552:3552"
    volumes:
      - /var/run/docker.sock:/var/run/docker.sock
      - arcane-data:/app/data
    environment:
      APP_URL: http://localhost:3552
      PUID: 1000
      PGID: 1000
      ENCRYPTION_KEY: aaee0c97bd77f78df34c3892ac40c83c08b596947cba15d272026b84b8536bf1
      JWT_SECRET: b265add813fb28930470d5a5f1b5e9016fa4a470a8a488f3426eb1d4a5582d7c
      LOG_LEVEL: info
      LOG_JSON: "false"
      OIDC_ENABLED: "false"
      DATABASE_URL: file:data/arcane.db?_pragma=journal_mode(WAL)&_pragma=busy_timeout(2500)&_txlock=immediate

  cloudflared:
    image: cloudflare/cloudflared:latest
    container_name: cloudflared-arcane
    restart: unless-stopped
    command: tunnel --no-autoupdate run
    environment:
      TUNNEL_TOKEN: YOUR_CLOUDFLARE_TUNNEL_TOKEN
    depends_on:
      - arcane

volumes:
  arcane-data:
    driver: local

Lưu & thoát nano (rất quan trọng)

Ctrl + X   →  Y  →  Enter

Bước 5: Chạy Arcane + Cloudflare Tunnel

docker compose up -d

Kiểm tra:

docker compose ps

Kết quả đúng:

arcane              Up
cloudflared-arcane  Up

Xem log để chắc chắn chạy OK

Log Arcane

docker logs -f arcane

Log Cloudflare Tunnel

docker logs -f cloudflared-arcane

Nếu thấy dòng kiểu:

Registered tunnel connection

→ Tunnel đã OK

Bước 6: Truy cập và cài đặt Arcane.

Do Arcane dùng port 3552 nên sẽ truy cập vào theo dạng.

ip:3552

Username và password mặc định của Arcane là:

Username: arcane
Password: arcane-admin

Sau khi truy cập vào trang quản trị của Arcane -> đổi mật khẩu -> seting -> user -> thêm user admin. Thêm xong thì bạn có thể xóa user mặc định của Arcane.

Bước 7: Route tunnel để truy cập Arcane qua URL

Sau khi chạy bước 5 kết thúc. Đợi khoảng 1->5 phút thì phần Connectors trong Configure sẽ hiện kết nối. Ấn next để qua phần Published application routes -> Ấn vào nút Add a published application routes như hình bên dưới.

Điền thông tin mà bạn muốn để tạo URL truy cập vào Arcane.

Phần Service thì điền:

Type: HTTP
URL: ip:3552 (thay ip thành địa chỉ ip của VPS)

Ấn Save -> truy cập vào URL vừa tạo -> login tài khoản

Bước 8: Cài n8n qua Arcane

Đây là file cài đã chỉnh sửa để tối ưu hơn với các chức năng:

  • Sử dụng Postgres để lưu trữ.
  • Redis Queue Mode hàng chờ, phân tải.
  • Lưu trữ File Binary vào ổ cứng (mặc định sẽ lưu trên Ram khi tác vụ nặng sẽ không chạy được)
  • Chạy nhiều worker để tăng hiệu quả xử lý khi nhiều tác vụ.
  • Giới hạn job xử lý trên mỗi worker.
  • Lưu execution
  • Auto prune execution

Cài qua Arcane

Vào Arcane -> Projects -> Tạo Project -> khi này sẽ mở cửa sổ như này.

Xóa toàn bộ dữ liệu trong: Tệp Docker ComposeMôi trường (.env) đi và copy file dưới đây.

Tệp Docker Compose (docker-compose.yml) n8n

version: "3.8"

services:
  # ============ DATABASE ============
  postgres:
    image: postgres:16-alpine
    container_name: n8n-postgres
    restart: always
    environment:
      - POSTGRES_USER=${POSTGRES_USER}
      - POSTGRES_PASSWORD=${POSTGRES_PASSWORD}
      - POSTGRES_DB=${POSTGRES_DB}
    volumes:
      - postgres_data:/var/lib/postgresql/data
    healthcheck:
      test: ["CMD-SHELL", "pg_isready -h localhost -U ${POSTGRES_USER} -d ${POSTGRES_DB}"]
      interval: 5s
      timeout: 5s
      retries: 10
    networks:
      - n8n-internal

  # ============ REDIS ============
  redis:
    image: redis:7-alpine
    container_name: n8n-redis
    restart: always
    command: redis-server --appendonly yes
    volumes:
      - redis_data:/data
    healthcheck:
      test: ["CMD", "redis-cli", "ping"]
      interval: 5s
      timeout: 5s
      retries: 10
    networks:
      - n8n-internal

  # ============ N8N MAIN ============
  n8n:
    image: docker.n8n.io/n8nio/n8n:latest
    container_name: n8n-main
    restart: always
    ports:
      - "5678:5678"
    env_file:
      - .env
    volumes:
      - n8n_data:/home/node/.n8n
    depends_on:
      postgres:
        condition: service_healthy
      redis:
        condition: service_healthy
    networks:
      - n8n-internal

  # ============ N8N WORKERS (4 instances) ============
  n8n-worker:
    image: docker.n8n.io/n8nio/n8n:latest
    restart: always
    command: worker
    env_file:
      - .env
    volumes:
      - n8n_data:/home/node/.n8n
    depends_on:
      postgres:
        condition: service_healthy
      redis:
        condition: service_healthy
      n8n:
        condition: service_started
    networks:
      - n8n-internal
    deploy:
      replicas: 2
      resources:
        limits:
          memory: 2G
          cpus: '1'
        reservations:
          memory: 256M
          cpus: '0.1'
    logging:
      driver: "json-file"
      options:
        max-size: "30m"
        max-file: "3"

volumes:
  postgres_data:
  redis_data:
  n8n_data:

networks:
  n8n-internal:
    driver: bridge

Cấu hình worker để xử lý. Tùy theo cấu hình VPS mà cấu hình worker sao cho hợp lý. Dưới đây là file cấu hình tạo 2 worker. Mỗi worker có:

  • Ram tối đa: 2G
  • Ram tối thiểu luôn có: 256MB
  • CPU tối đa: 1 core
  • CPU tối thiểu: 0.1 core
  • Định dạng lưu log: Json
  • File tốc tối đa: 30MB -> tạo file log mới
  • Giữ tối đa: 3 file log
    deploy:
      replicas: 2
      resources:
        limits:
          memory: 1G
          cpus: '0.5'
        reservations:
          memory: 256M
          cpus: '0.1'
    logging:
      driver: "json-file"
      options:
        max-size: "30m"
        max-file: "3"

Nếu host n8n của bạn chạy nhiều, nặng, tải cao thì có thể nâng số worker lớn hơn 2. Tăng cấu hình của từng worker nữa. Việc đặt cấu hình của worker để tránh việc 1 worker có thể chiếm hết tài nguyên của VPS.

Môi trường (.env)

# ========================================
# N8N CONFIGURATION - N8N.ASIA
# ========================================

# ====== POSTGRESQL ======
POSTGRES_USER=n8n_user
POSTGRES_PASSWORD=NHAP_PASS_TAI_DAY
POSTGRES_DB=n8n_db

# ====== DATABASE CONNECTION ======
DB_TYPE=postgresdb
DB_POSTGRESDB_HOST=postgres
DB_POSTGRESDB_PORT=5432
DB_POSTGRESDB_DATABASE=n8n_db
DB_POSTGRESDB_USER=n8n_user
DB_POSTGRESDB_PASSWORD=NHAP_PASS_TAI_DAY

# ====== REDIS QUEUE ======
EXECUTIONS_MODE=queue
QUEUE_BULL_REDIS_HOST=redis
QUEUE_BULL_REDIS_PORT=6379
QUEUE_BULL_REDIS_DB=0
QUEUE_HEALTH_CHECK_ACTIVE=true

# ====== N8N DOMAIN ======
N8N_HOST=domain.com
N8N_PORT=5678
N8N_PROTOCOL=https
N8N_EDITOR_BASE_URL=https://domain.com
WEBHOOK_URL=https://domain.com

# ====== ENCRYPTION KEY (KHÔNG THAY ĐỔI SAU KHI CÀI) ======
N8N_ENCRYPTION_KEY=NHAP_KEY_TAI_DAY

# ====== EXECUTIONS ======
EXECUTIONS_DATA_SAVE_ON_ERROR=all
EXECUTIONS_DATA_SAVE_ON_SUCCESS=all
EXECUTIONS_DATA_SAVE_ON_PROGRESS=false
EXECUTIONS_DATA_SAVE_MANUAL_EXECUTIONS=true
EXECUTIONS_DATA_PRUNE=true
EXECUTIONS_DATA_MAX_AGE=168
EXECUTIONS_DATA_PRUNE_MAX_COUNT=30000
EXECUTIONS_DATA_PRUNE_HARD_DELETE_BUFFER=24

# ====== BINARY DATA ======
N8N_BINARY_DATA_MODE=filesystem
N8N_BINARY_DATA_STORAGE_PATH=/home/node/.n8n/binaryData

# ====== WORKER ======
N8N_CONCURRENCY_PRODUCTION_LIMIT=10

# ====== TIMEZONE ======
GENERIC_TIMEZONE=Asia/Ho_Chi_Minh
TZ=Asia/Ho_Chi_Minh

# ====== SECURITY ======
N8N_SECURE_COOKIE=true
NODE_ENV=production

Nhớ chỉnh các thông tin dưới đây đúng với thông tin khi bạn muốn truy cập n8n qua URL nhé:

  • N8N_HOST
  • N8N_EDITOR_BASE_URL
  • WEBHOOK_URL
  • N8N_ENCRYPTION_KEY (bạn tự tạo key nhé -> đây là key mã hóa dữ liệu cho các credentials)
  • DB_POSTGRESDB_PASSWORD (bạn tự tạo pass ké -> đây là pass của Postgres DB)
  • EXECUTIONS_DATA_MAX_AGE (thời gian lưu EXECUTIONS tính theo giờ, mặc định là 168 giờ là 7 ngày)
  • EXECUTIONS_DATA_PRUNE_MAX_COUNT (số EXECUTIONS lưu tối đa, mặc định là 30.000 EXECUTIONS)

Khi copy 2 file Docker Compose.env thì sẽ đặt trên và lưu Project trên Arcane lại. Xong bạn ấn Pull để đợi tải về và cài đặt. Xong thì bạn ấn nút Up để cho n8n chạy

Với replicas: 2 trong docker-compose.yml sẽ có 2 worker được tạo.

Như trên ảnh sẽ là n8n-n8n-worker-1n8n-n8n-worker-2

Hiện tại cả 2 worker đang chạy. Nếu ít workflow đang chạy thì bạn có thể stop bớt worker đi. Nếu chạy nhiều thì bật worker đã off lên.

Lưu ý cấu hình trên sẽ không thể truy cập dạng ip:5678 nên sẽ phải Tunnel mới dùng được nhé.

Route Tunnel để truy cập n8n qua URL

Trong Connectors -> tại phầnYour Cloudflare Tunnels -> chọn tunnel đã tạo từ bước 7 -> edit -> Published application routes -> Add a published application routes -> cấu hình như bước 7

Phần Service thì điền:

Type: HTTP
URL: ip:5678 (thay ip thành địa chỉ ip của VPS, port n8n là 5678)

Ấn Save -> truy cập vào URL vừa tạo -> lần đầu tiên truy cập thì sẽ tạo tài khoản quản trị -> sau cứ truy cập theo tài khoản đó là được.

Gợi ý setup số lượng Worker và Concurrency theo cấu hình của VPS

Dưới đây là cấu hình gợi ý, thực tế còn phụ thuộc vào loại CPU/RAM của VPS đang dùng. Tốt thì có thể nâng thêm hoặc giảm xuống nhé.

2 vCPU – 4GB RAM4 vCPU – 8GB RAM8 vCPU – 16GB RAM
Worker1-22-34–6
Concurrency8-1010-1212-20

Khi tải bình thường thì 1 worker là được. Khi chạy tải nặng thì tăng theo cấu hình.

Cập nhật n8n qua Arcane

Bạn vào project -> chọn project n8n của bạn -> ấn nút Down để tắt n8n -> ấn Pull để kéo bản mới nhất -> đợi Pull xong -> Ấn Up để chạy.

Với cách này mình test trên VPS 2vCPU – 4G RAM thì 1 ngày vẫn chạy cả triệu executions.


By: Giáp Đức Thắng – đại sứ n8n tại Việt Nam.

Tham gia Cộng đồng n8n AI Automation Việt Nam trên Facebook tại đây

Trang chủ n8n.io