Tổng Hợp VPS

n8n + Claude API trên VPS: build AI automation toàn team startup

Tự host n8n trên VPS, gắn node Claude API để xây workflow AI automation cho cả team startup VN. Setup multi-user, credentials, webhook, n8n + Claude examples.

Thanh Nguyễn Cập nhật Đăng 10 phút đọc 7 khối lệnh

n8n + Claude API trên VPS: build AI automation toàn team startup
Mục lục bài viết
  1. 1. Vì sao tự host n8n thay vì dùng cloud
  2. 2. Yêu cầu VPS và stack
  3. 3. Cài Docker và chuẩn bị thư mục
  4. 4. File docker-compose.yml chuẩn production
  5. 5. Caddyfile cho HTTPS tự động
  6. 6. File .env quản lý secrets
  7. 7. Tạo user team và phân quyền
  8. 8. Gắn Claude API vào n8n
  9. 9. Workflow mẫu 1: phân loại lead email tự động
  10. 10. Workflow mẫu 2: AI viết draft blog SEO tiếng Việt
  11. 11. Workflow mẫu 3: tóm tắt PR GitHub gửi Slack
  12. 12. Backup và disaster recovery
  13. 13. Monitoring và alert
  14. FAQ

Năm 2026, mọi startup tại VN đều dùng AI để tự động hoá công việc lặp lại. Nhưng Zapier 30$/user/tháng, Make.com 20$/user, cộng thêm 25$ Claude Team... nhân 10 người là gần 700$/tháng. Quá đắt cho startup giai đoạn seed. Giải pháp: tự host n8n trên VPS, gắn API Claude trực tiếp, dùng chung credentials, chia user.

Bài này hướng dẫn full setup n8n + Claude API trên VPS cho team startup, từ Docker compose tới workflow mẫu thật mình đang chạy tại TND: gửi đơn hàng vào Slack có Claude tóm tắt risk, scrape tin tức ngành rồi summary tiếng Việt, viết draft blog SEO từ keyword list.

Mục tiêu cuối bài: bạn có n8n production-ready chạy HTTPS trên domain riêng, gắn Claude làm "AI engine" cho mọi workflow team. Tổng thời gian setup: 45 phút. Tổng chi phí: dưới 600k/tháng cho team 10 người.

1. Vì sao tự host n8n thay vì dùng cloud

n8n là tool automation open source mạnh ngang Zapier nhưng có thể self-host. Đây là khác biệt chính:

Tiêu chín8n Cloud (managed)n8n Self-host VPSZapier/Make
Pricing 10 user50$/tháng team starter250-500k VPS200-300$/tháng
Execution không giới hạnQuota tierKhông giới hạnCó quota
Self-host dataTrên cloud n8nVPS của bạnCloud SaaS
Custom nodeHạn chếTự code Node.js TypeScriptKhông
Webhook không giới hạn IPCó (license)CóCó

Self-host trên VPS Cloud TND tiết kiệm ~80% chi phí so với Zapier, kèm bonus: data nội bộ không rời server, custom node tự viết, scale theo CPU/RAM thay vì theo "execution count".

2. Yêu cầu VPS và stack

  • VPS: tối thiểu 2GB RAM 2 vCPU; khuyến nghị 4GB cho team 5-10 người. Cloud VPS TND gói Pro 4GB hoặc tương đương.
  • OS: Ubuntu 24.04 LTS hoặc AlmaLinux 9. Mình thích Ubuntu vì Docker repo update sớm hơn.
  • Domain: n8n.your-domain.com trỏ A record về IP VPS.
  • Stack: Docker + Docker Compose, n8n image official, Postgres 16 làm DB, Caddy 2 làm reverse proxy + auto Let's Encrypt SSL.

3. Cài Docker và chuẩn bị thư mục

Terminal3. Cài Docker và chuẩn bị thư mụcbash
# SSH vào VPS rootssh [email protected] # Cài Docker chính chủcurl -fsSL https://get.docker.com | shsystemctl enable --now dockerdocker compose version # Tạo user n8n có quyền dockeruseradd -m -s /bin/bash -G docker n8nmkdir -p /opt/n8n/{data,postgres,caddy}chown -R n8n:n8n /opt/n8nsu - n8ncd /opt/n8n

Mình luôn tạo user riêng cho mỗi dịch vụ self-host. Tách quyền filesystem, dễ backup, hạn chế blast radius khi container bị compromise.

4. File docker-compose.yml chuẩn production

Đây là compose stack mình đang chạy ổn định 9 tháng. Postgres làm DB chính, n8n queue mode (worker tách process), Caddy reverse proxy.

File cấu hình4. File docker-compose.yml chuẩn productionyaml
# /opt/n8n/docker-compose.ymlservices:  postgres:    image: postgres:16-alpine    restart: unless-stopped    environment:      POSTGRES_DB: n8n      POSTGRES_USER: n8n      POSTGRES_PASSWORD: $POSTGRES_PASSWORD    volumes:      - ./postgres:/var/lib/postgresql/data    healthcheck:      test: ["CMD-SHELL", "pg_isready -U n8n"]      interval: 10s   n8n:    image: n8nio/n8n:latest    restart: unless-stopped    depends_on:      postgres:        condition: service_healthy    environment:      DB_TYPE: postgresdb      DB_POSTGRESDB_HOST: postgres      DB_POSTGRESDB_DATABASE: n8n      DB_POSTGRESDB_USER: n8n      DB_POSTGRESDB_PASSWORD: $POSTGRES_PASSWORD      N8N_HOST: n8n.your-domain.com      N8N_PORT: 5678      N8N_PROTOCOL: https      WEBHOOK_URL: https://n8n.your-domain.com/      N8N_ENCRYPTION_KEY: $N8N_ENCRYPTION_KEY      GENERIC_TIMEZONE: Asia/Ho_Chi_Minh      TZ: Asia/Ho_Chi_Minh    volumes:      - ./data:/home/node/.n8n   caddy:    image: caddy:2-alpine    restart: unless-stopped    ports:      - "80:80"      - "443:443"    volumes:      - ./caddy/Caddyfile:/etc/caddy/Caddyfile      - caddy_data:/data      - caddy_config:/config volumes:  caddy_data:  caddy_config:

5. Caddyfile cho HTTPS tự động

PowerShell5. Caddyfile cho HTTPS tự độngpowershell
# /opt/n8n/caddy/Caddyfilen8n.your-domain.com {    reverse_proxy n8n:5678    encode gzip    header {        Strict-Transport-Security "max-age=31536000;"        X-Content-Type-Options "nosniff"        X-Frame-Options "DENY"    }}

Caddy tự xin Let's Encrypt SSL trong vòng 30 giây. Không cần config certbot, không lo renew. Reload tự động khi đổi Caddyfile.

6. File .env quản lý secrets

Terminal6. File .env quản lý secretsbash
# /opt/n8n/.envPOSTGRES_PASSWORD=$(openssl rand -base64 32)N8N_ENCRYPTION_KEY=$(openssl rand -base64 32)# Lưu lại N8N_ENCRYPTION_KEY trong password manager# Mất key = mất hết credentials trong n8n DB

Luôn backup N8N_ENCRYPTION_KEY vào Bitwarden/1Password. Mất nó = mất toàn bộ credentials (OAuth token, API key) lưu trong DB Postgres. Coi key này quan trọng như mật khẩu DB.

Terminal6. File .env quản lý secretsbash
# Khởi động stackcd /opt/n8ndocker compose up -ddocker compose logs -f n8n# Truy cập https://n8n.your-domain.com# Lần đầu tạo admin user owner

7. Tạo user team và phân quyền

n8n từ v1.8 hỗ trợ multi-user với Project (project-based access). Bước tạo user team:

  • Settings -> Users -> Invite. Gửi link mời cho mỗi member team.
  • Tạo Project "Marketing", Project "Engineering", Project "Sales". Mỗi project có workflow + credentials riêng.
  • Phân role: Owner (admin), Editor (sửa workflow), Viewer (chỉ xem).
  • Credentials API Claude lưu trong Project shared "Engineering" hoặc tách per-user nếu cần track usage.

Lợi ích: Marketing team không nhìn thấy workflow Dev. Sales team không sửa được node Claude của ai. Audit log tự động ghi mọi thay đổi.

8. Gắn Claude API vào n8n

n8n đã có node Anthropic Claude chính thức từ v1.5. Cách gắn:

  • Lấy API key tại console.anthropic.com, plan Workbench pay-as-you-go đủ cho startup nhỏ.
  • Trong n8n, Credentials -> New -> Anthropic API. Paste key, save.
  • Trong workflow editor, thêm node Anthropic Chat Model -> chọn model claude-sonnet-4-7. Cấu hình system prompt, max tokens 4096, temperature 0.7.
  • Test với input "Tóm tắt câu này" - thấy response trả về thì OK.

Pro tip: tạo 2 credential Claude, một cho production (model Sonnet/Opus), một cho test (model Haiku rẻ hơn 10 lần). Tránh đốt tiền khi debug workflow lớn.

9. Workflow mẫu 1: phân loại lead email tự động

Use case phổ biến nhất startup VN: Sales nhận 30-100 email lead/ngày, phải phân loại "hot/warm/cold" thủ công. Tự động hoá:

  • Trigger: Gmail Trigger (poll mỗi 5 phút, label INBOX).
  • Node Claude: prompt "Phân tích email lead sau, output JSON: {category: hot|warm|cold, reason, suggested_reply}".
  • Node Switch: route theo category. Hot -> gửi Slack #sales-hot kèm summary. Warm -> tạo task Notion. Cold -> reply auto template.
  • Node Gmail Send: gửi reply tự động cho cold lead.

Chi phí: ~500 token/email * 100 email/ngày * 22 ngày = 1.1M token/tháng. Sonnet 4.7 ~3$/1M token = 3.3$/tháng. Rẻ hơn Zapier + GPT add-on cả chục lần.

10. Workflow mẫu 2: AI viết draft blog SEO tiếng Việt

Marketing team có list 50 keyword cần blog/tuần. Workflow tự động hoá:

  • Trigger: Google Sheets row added (sheet "Keywords pending").
  • Node Claude 1: research outline cho keyword (system prompt "bạn là SEO chuyên gia VN, output H2/H3 outline JSON").
  • Node Claude 2: viết draft 1500 từ từ outline (system prompt "viết blog SEO tiếng Việt, structure H2/H3/list/table, tone chuyên gia thân thiện").
  • Node WordPress: POST tới /wp-json/wp/v2/posts với status draft.
  • Node Slack: ping #content-review "draft mới /wp-admin/post.php?post=X&action=edit".

Đầu ra: 50 draft blog/tuần, Marketing editor chỉ tinh chỉnh và publish. Tiết kiệm 25-30 giờ/tuần. Chi phí Claude ~15$/tháng cho khối lượng này.

11. Workflow mẫu 3: tóm tắt PR GitHub gửi Slack

  • Trigger: GitHub Webhook pull_request opened.
  • Node HTTP Request: gọi GitHub API GET /repos/owner/repo/pulls/X/files để lấy diff.
  • Node Claude: prompt "Tóm tắt PR diff sau, đánh giá rủi ro 1-5, đề xuất reviewer chính (ai trong team có expertise nhất)".
  • Node Slack: post vào channel #engineering kèm link PR + summary AI.

Team dev đỡ phải tự đọc 20 PR/ngày, chỉ focus vào PR risk cao. ROI cực cao cho team 10+ engineer.

12. Backup và disaster recovery

Terminal12. Backup và disaster recoverybash
# Script backup hằng đêm# /opt/n8n/backup.sh#!/bin/bashDATE=$(date +%F)mkdir -p /backup/n8ndocker compose -f /opt/n8n/docker-compose.yml exec -T postgres pg_dump -U n8n n8n | gzip > /backup/n8n/n8n-$DATE.sql.gztar -czf /backup/n8n/data-$DATE.tar.gz -C /opt/n8n data# Giữ 14 ngàyfind /backup/n8n -mtime +14 -delete# Sync sang R2/S3 nếu cần# rclone copy /backup/n8n r2:tnd-backups/n8n/
Terminal12. Backup và disaster recoverybash
# Croncrontab -e# 0 2 * * * /opt/n8n/backup.sh > /var/log/n8n-backup.log 2>&1

Kết hợp snapshot 1-click trên panel VPS TND (giữ 7 ngày tự động), bạn có double protection. Test restore quý 1 lần để chắc backup không bị corrupt.

13. Monitoring và alert

  • Cài Uptime Kuma trên cùng VPS (port 3001) để monitor n8n endpoint 30s/lần. Alert qua Telegram bot.
  • Bật N8N_LOG_LEVEL=info trong .env, dùng docker logs hoặc Loki/Promtail nếu muốn.
  • Workflow critical (lead, payment) nên có "Error Workflow" gắn riêng - khi fail, gửi alert ngay vào Slack #ops.

FAQ

n8n self-host có miễn phí hoàn toàn không?

n8n core hoàn toàn miễn phí dạng "Fair Code License". Bạn chỉ trả tiền VPS và API model (Claude/OpenAI). Tính năng Enterprise (SSO SAML, LDAP, audit log nâng cao) cần license trả phí. Startup 10-30 người không cần Enterprise, bản community đủ tốt.

Có dùng Claude Code (CLI) thay node Claude trong n8n được không?

Không hợp lý. Claude Code là agent terminal, không phải HTTP API. Bạn nên dùng node Anthropic Chat Model trong n8n để gọi API trực tiếp. Nếu workflow cần "agent" thật (đa bước, đa tool), cân nhắc tách thành sub-workflow hoặc dùng node AI Agent (built-in v1.6+) trong n8n.

n8n có nuốt RAM không?

Idle 250-400MB. Khi chạy workflow heavy (vài execution song song), peak 800MB-1.2GB. Với VPS 2GB chạy được nhưng dễ OOM khi spike. Khuyến nghị 4GB cho production, kèm Postgres tách container chiếm thêm 200MB. Queue mode (worker tách process) giúp scale ngang khi cần.

Có thể gắn cả Claude và GPT trong cùng workflow?

Có. Tạo 2 credential khác nhau (Anthropic + OpenAI). Trong workflow, node 1 dùng Claude để hiểu input tiếng Việt sâu, node 2 dùng GPT-5 để gọi function tool ổn định hơn. Mỗi node độc lập về model. Phổ biến: dùng Haiku cho task đơn giản rẻ, Sonnet cho task phức tạp, GPT-5-mini cho tool calling chuẩn.

Webhook n8n có chịu được lượng request lớn?

n8n single process xử lý ~50-100 req/s nếu workflow nhẹ. Với throughput cao hơn, bật queue mode: 1 process main + N worker process. Worker scale theo CPU. VPS 4GB chạy 2 worker, VPS 8GB chạy 4 worker. Đủ cho startup tới 1000 lead/ngày.

Cách track Claude API usage cost theo team member?

Cách 1: tạo nhiều API key Anthropic, mỗi key gắn vào 1 credential n8n riêng (per Project hoặc per user). Console Anthropic hiển thị usage per key. Cách 2: log mọi gọi node Claude vào Postgres table custom, attribute theo user, dashboard Grafana. Phức tạp hơn nhưng linh hoạt.

Chia sẻ:Facebook

Thanh Nguyễn

TND

Tư vấn bản quyền, VPS và máy chủ kèm hóa đơn VAT, hợp đồng đầy đủ cho doanh nghiệp.