Tự host n8n automation trên VPS 2GB: workflow cá nhân không tốn Zapier

Chia sẻ bài viết

Mục lục
TL;DR
  • 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 Cloudn8n Self-host VPSZapier/Make
Pricing cá nhân20$/tháng Starter~250k VPS20-30$/tháng
Execution không giới hạn2500/tháng tierKhông giới hạnCó quota
Data on your serverKhôngKhông
Custom JS code nodeCó (sandbox)Có (full)Hạn chế
Webhook publicCó (cần domain)

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/n8n

4. 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_Minh

Lư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 -delete

Combine 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.

Cloud VPS cho vibe coder

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.

2009
15+ năm vận hành liên tục
10+
tập đoàn lớn tin dùng
100+
doanh nghiệp SMB Việt
30 ngày
đổi key lỗi miễn phí
Phần mềm bản quyền chính hãng chúng tôi cung cấp
Bản quyền chính hãng Hóa đơn VAT đầy đủ Đổi key lỗi 30 ngày Vận hành từ 2009 MST 0200994870 Hotline 0225.999.6666