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 Compose và Mô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 và .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-1 và n8n-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 RAM | 4 vCPU – 8GB RAM | 8 vCPU – 16GB RAM | |
| Worker | 1-2 | 2-3 | 4–6 |
| Concurrency | 8-10 | 10-12 | 12-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
