- VPS 4GB RAM đủ chạy n8n self-host cho team 5-10 người, chi phí ~250k/tháng tại TND.
- n8n + Claude API mở khả năng: trả lời email tự động, phân loại lead, tóm tắt PR GitHub, viết draft blog SEO.
- Cài qua Docker Compose, Postgres làm DB, Caddy auto SSL, mất 30 phút.
- Cost vận hành: VPS 250-500k + Claude API ~10-30$/tháng cho team nhỏ. Rẻ hơn Zapier+Make 5-10x.
- Bonus: tách credentials theo user, multi-tenant, gắn webhook xử lý realtime.
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 VPS | Zapier/Make |
|---|---|---|---|
| Pricing 10 user | 50$/tháng team starter | 250-500k VPS | 200-300$/tháng |
| Execution không giới hạn | Quota tier | Không giới hạn | Có quota |
| Self-host data | Trên cloud n8n | VPS của bạn | Cloud SaaS |
| Custom node | Hạn chế | Tự code Node.js TypeScript | Không |
| Webhook không giới hạn IP | Có (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
# SSH vào VPS root
ssh [email protected]
# Cài Docker chính chủ
curl -fsSL https://get.docker.com | sh
systemctl enable --now docker
docker compose version
# Tạo user n8n có quyền docker
useradd -m -s /bin/bash -G docker n8n
mkdir -p /opt/n8n/{data,postgres,caddy}
chown -R n8n:n8n /opt/n8n
su - n8n
cd /opt/n8nMì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.
# /opt/n8n/docker-compose.yml
services:
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
# /opt/n8n/caddy/Caddyfile
n8n.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
# /opt/n8n/.env
POSTGRES_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 DBLuô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.
# Khởi động stack
cd /opt/n8n
docker compose up -d
docker compose logs -f n8n
# Truy cập https://n8n.your-domain.com
# Lần đầu tạo admin user owner7. 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
# Script backup hằng đêm
# /opt/n8n/backup.sh
#!/bin/bash
DATE=$(date +%F)
mkdir -p /backup/n8n
docker compose -f /opt/n8n/docker-compose.yml exec -T postgres pg_dump -U n8n n8n | gzip > /backup/n8n/n8n-$DATE.sql.gz
tar -czf /backup/n8n/data-$DATE.tar.gz -C /opt/n8n data
# Giữ 14 ngày
find /backup/n8n -mtime +14 -delete
# Sync sang R2/S3 nếu cần
# rclone copy /backup/n8n r2:tnd-backups/n8n/# Cron
crontab -e
# 0 2 * * * /opt/n8n/backup.sh > /var/log/n8n-backup.log 2>&1Kế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.
VPS 4GB chạy n8n + Claude cho team startup
Cloud VPS TND sẵn AlmaLinux 9, Ubuntu 22/24, Debian 12/13. SSD CEPH, snapshot 1-click, backup hằng ngày, network 200Mbps trong nước. Đủ resource cho n8n queue mode + Postgres + Caddy 24/7, latency thấp tới API Anthropic.
Xem 8 cấu hình Cloud VPS →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.



