- VPS 2GB RAM Ubuntu 24.04 chạy n8n self-host dư thoải mái cho 100-500 execution/ngày cá nhân.
- Tiết kiệm 95% chi phí so với Zapier (29$/tháng) hoặc Make.com (19$/tháng).
- Setup 20 phút qua Docker Compose: n8n + Postgres + Caddy SSL auto.
- 8 workflow phổ biến: backup Notion, scrape giá, AI summary Telegram, RSS to email, file backup S3.
- Bonus: tách worker queue mode khi cần scale, monitor Uptime Kuma.
Zapier và Make.com là tool automation tuyệt vời nhưng đắt với dev VN cá nhân: 19-29$/tháng cho 750-2000 task. Tự host n8n trên VPS 2GB chỉ tốn 200-250k/tháng, không giới hạn execution, full quyền data. Bài này hướng dẫn setup từ A-Z cho personal use, kèm 8 workflow thực tế mình đang chạy 24/7.
n8n (n minus 8) là tool automation open source Fair Code, có 400+ integration sẵn (Google, Slack, Notion, GitHub, Telegram, Twitter, Stripe, Postgres, MongoDB, AWS, OpenAI, Anthropic). Drag drop workflow như Zapier nhưng chạy trên server bạn. Quan trọng nhất: không giới hạn execution.
Mục tiêu bài: cuối bài bạn có n8n production chạy HTTPS trên domain riêng, gắn 1-2 workflow đầu tiên, biết cách backup và monitor. Tổng setup 25-30 phút.
1. Vì sao tự host thay vì n8n Cloud?
| Tiêu chí | n8n Cloud | n8n Self-host VPS | Zapier/Make |
|---|---|---|---|
| Pricing cá nhân | 20$/tháng Starter | ~250k VPS | 20-30$/tháng |
| Execution không giới hạn | 2500/tháng tier | Không giới hạn | Có quota |
| Data on your server | Không | Có | Không |
| Custom JS code node | Có (sandbox) | Có (full) | Hạn chế |
| Webhook public | Có | Có (cần domain) | Có |
Cá nhân chạy 100-500 execution/ngày (3000-15000/tháng) vượt quota Starter ngay. Self-host tiết kiệm cả tiền lẫn không lo cap.
2. Yêu cầu VPS
- VPS: 2GB RAM 2 vCPU, 40GB SSD. Cloud VPS TND gói Basic vừa đủ.
- OS: Ubuntu 24.04 LTS.
- Domain: n8n.your-domain.com trỏ A record về IP VPS (cần cho HTTPS).
- Stack: Docker Compose + n8n latest + Postgres 16 + Caddy 2 (auto SSL).
3. Cài Docker
ssh [email protected]
apt update && apt upgrade -y
curl -fsSL https://get.docker.com | sh
systemctl enable --now docker
docker compose version
# Tạo user n8n
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/n8n4. File .env
# /opt/n8n/.env
POSTGRES_PASSWORD=$(openssl rand -base64 32 | tr -d /=+)
N8N_ENCRYPTION_KEY=$(openssl rand -base64 32 | tr -d /=+)
N8N_HOST=n8n.your-domain.com
N8N_PROTOCOL=https
WEBHOOK_URL=https://n8n.your-domain.com/
GENERIC_TIMEZONE=Asia/Ho_Chi_MinhLưu N8N_ENCRYPTION_KEY vào Bitwarden ngay - mất key = mất hết credentials trong DB. Đây là key encrypt OAuth token, API key trong DB.
5. docker-compose.yml
# /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_HOST
N8N_PROTOCOL: $N8N_PROTOCOL
WEBHOOK_URL: $WEBHOOK_URL
N8N_ENCRYPTION_KEY: $N8N_ENCRYPTION_KEY
GENERIC_TIMEZONE: $GENERIC_TIMEZONE
TZ: $GENERIC_TIMEZONE
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
volumes:
caddy_data:6. Caddyfile
# /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"
}
}# Khởi động
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 owner account (email + password)Caddy tự xin Let's Encrypt SSL trong 30 giây. Truy cập n8n.your-domain.com qua HTTPS, tạo owner account. Xong setup hạ tầng.
7. Workflow 1: backup Notion daily về Google Drive
- Trigger: Schedule node (cron 0 2 * * * - 2h sáng mỗi ngày).
- Node Notion: list all pages workspace.
- Loop Over Items: với mỗi page, gọi Notion API export markdown.
- Node Google Drive: upload file md vào folder /backups/notion/YYYY-MM-DD/.
- Node Telegram: gửi message "Backup xong N pages".
Workflow này thay Notion Pro (10$/tháng cho version history). Mỗi sáng có backup markdown đầy đủ trong Drive, search dễ, không lo Notion outage.
8. Workflow 2: scrape giá VPS competitor hằng tuần
- Trigger: Schedule (mỗi thứ 2, 9h sáng).
- Node HTTP Request: GET trang pricing 5 competitor.
- Node HTML Extract: parse giá theo CSS selector.
- Node Code (JavaScript): tính chênh lệch so với tuần trước (lưu vào Postgres).
- Node Google Sheets: append row vào sheet "Competitor pricing".
- Node Telegram: alert nếu chênh lệch >5%.
9. Workflow 3: AI summary email Gmail mỗi sáng
- Trigger: Schedule 7h sáng.
- Node Gmail: lấy email unread 24h qua, filter important.
- Node Anthropic Chat: prompt "Tóm tắt từng email 2 câu, ưu tiên action items".
- Node Telegram: gửi summary kèm link gốc.
Tiết kiệm 20-30 phút mỗi sáng đọc inbox. Chi phí Claude ~0.5-1$/tháng.
10. Workflow 4: RSS to Telegram channel
- Trigger: RSS Feed Read (poll mỗi 30 phút) - feed Hacker News, /r/programming, dev.to.
- Node Set: filter chỉ post có upvote >100 (tránh spam).
- Node Anthropic: dịch tiêu đề + tóm tắt 1 câu tiếng Việt.
- Node Telegram: post vào channel cá nhân.
11. Workflow 5: backup project Git về S3/R2
- Trigger: Schedule (mỗi thứ 6, 23h).
- Node Execute Command:
tar czf /tmp/projects.tar.gz /home/dev/projects. - Node AWS S3 (R2 endpoint): upload tar.gz, key projects/YYYY-MM-DD.tar.gz.
- Node Execute Command: rm /tmp/projects.tar.gz.
- Node Telegram: confirm.
12. Workflow 6: scrape giá vé máy bay, alert khi rẻ
- Trigger: Schedule mỗi 2h.
- Node HTTP Request: gọi Skyscanner/Vietnam Airlines API (hoặc HTML scrape).
- Node Code: parse giá vé SGN-HAN cho 30 ngày tới.
- Node Postgres: lưu vào table prices.
- Node If: giá < threshold (mình set 1.2tr).
- Node Telegram: alert kèm link booking.
13. Workflow 7: monitor uptime website
- Trigger: Schedule mỗi 5 phút.
- Node HTTP Request: GET 10 URL quan trọng (5s timeout).
- Node If: status != 200.
- Node Telegram: alert "X down".
- Node Postgres: log status để dashboard sau.
14. Workflow 8: AI viết draft blog từ keyword
- Trigger: Google Sheets row added (sheet "Blog ideas").
- Node Anthropic 1: outline H2/H3 cho keyword.
- Node Anthropic 2: viết draft 1500 từ tiếng Việt từ outline.
- Node WordPress: POST /wp-json/wp/v2/posts status=draft.
- Node Slack: ping "/wp-admin/post.php?post=X".
15. Tối ưu RAM trên VPS 2GB
- Bật N8N_LOG_LEVEL=warn (giảm log spam).
- Schedule workflow nặng không trùng giờ (đêm 2h-4h sáng).
- Bật swap 2GB nếu peak RAM:
fallocate -l 2G /swap && chmod 600 /swap && mkswap /swap && swapon /swap. - Postgres tune: shared_buffers 256MB, work_mem 8MB (qua postgresql.conf).
- Không cài MoreAware/Sentry trên VPS 2GB - chiếm 300-400MB.
16. Backup và monitor
# Backup script (cron daily)
#!/bin/bash
DATE=$(date +%F)
docker compose -f /opt/n8n/docker-compose.yml exec -T postgres
pg_dump -U n8n n8n | gzip > /backup/n8n-$DATE.sql.gz
tar -czf /backup/n8n-data-$DATE.tar.gz -C /opt/n8n data
find /backup -mtime +14 -deleteCombine với snapshot 1-click VPS TND (giữ 7 ngày tự động), bạn có double protection. Cài Uptime Kuma trên VPS khác để monitor n8n.your-domain.com 30s/lần, alert Telegram khi down.
VPS 2GB chạy n8n + Postgres + Caddy automation cá nhân
Cloud VPS TND Ubuntu 24.04, SSD CEPH, snapshot 1-click, backup hằng ngày, network 200Mbps. Đủ resource cho n8n + Postgres + Caddy chạy 24/7 với 500 execution/ngày. Tiết kiệm 90% so với Zapier/Make.
Xem 8 cấu hình Cloud VPS →FAQ
VPS 1GB có chạy được n8n không?
Có thể nhưng không tối ưu. n8n + Postgres idle ~700-900MB, peak khi vài workflow song song có thể OOM. Khuyến nghị tối thiểu 2GB cho cá nhân; 1GB chỉ phù hợp test nghịch chơi, không production. Bật swap 1GB để safe nếu phải dùng 1GB.
n8n self-host có nhận được update tự động không?
Không auto. Dùng image n8nio/n8n:latest và docker compose pull && docker compose up -d khi muốn update. Khuyến nghị pin version (vd n8nio/n8n:1.78.0) để tránh breaking change. Cài Watchtower nếu muốn auto update (cẩn thận test trước).
Có thể chạy n8n cùng WordPress trên cùng VPS?
Được, cần VPS 4GB+ để comfort. n8n và WordPress dùng port khác nhau (5678 vs 80/443), Caddy reverse proxy phân biệt domain. Cài cả hai trên VPS Pro 4GB của TND thoải mái. Tuy nhiên nếu WordPress traffic cao có thể ảnh hưởng workflow n8n - tách VPS riêng tốt hơn.
Workflow n8n có chạy được offline (không internet) không?
Nếu trigger và action đều local (Postgres, filesystem, code node) thì có. Hầu hết workflow gọi API ngoài (Gmail, Slack, Notion) nên cần internet. Workflow xử lý data local (parse CSV, biến đổi JSON) chạy offline OK.
Cách share workflow giữa team mà không cấp credential?
Export workflow JSON (Settings -> Export). Người import phải tự setup credential mới. Bonus: dùng Project (n8n v1.8+) - workflow ở Project A, credential ở Project A, member team chỉ access Project được phép. Phân quyền chi tiết bằng role Owner/Editor/Viewer.
Webhook URL có cần domain HTTPS không?
Nên có. Nhiều service (Stripe, Notion, GitHub) chỉ accept HTTPS webhook. Caddy auto SSL miễn phí qua Let's Encrypt, setup 30 giây với 1 dòng Caddyfile. Trừ khi test local thì HTTP OK. Production luôn HTTPS.



