Tự động hóa công việc bằng n8n và AI trên VPS

Bạn đang dành mỗi sáng 30 phút để lọc email, trả lời tin nhắn lặp lại, gõ lại cùng một đoạn nội dung cho các yêu cầu giống hệt nhau? Đó chính là lúc n8n kết hợp với AI (OpenAI hoặc DeepSeek) trở nên đáng giá. Thay vì để model AI "chat chơi", bạn gắn nó vào luồng xử lý dữ liệu thật: n8n nhận sự kiện, gọi API AI để phân tích hoặc sinh nội dung, rồi tự động ghi vào database, gửi email, đăng bài. Bài này mình sẽ hướng dẫn bạn thiết lập môi trường n8n + AI trên VPS Ubuntu 24.04 (thuê VPS Linux là chạy được ngay), kết nối cả OpenAI lẫn DeepSeek, và xây 2 workflow mẫu áp dụng thực tế. Toàn bộ thao tác đều actionable, copy-paste là chạy.
Yêu cầu trước khi bắt đầu
- Một VPS Ubuntu 24.04 đã cài Docker và Docker Compose (bài cách cài Docker trên VPS Ubuntu có hướng dẫn đầy đủ).
- Domain trỏ về IP VPS nếu muốn truy cập n8n qua HTTPS (khuyến nghị dùng Nginx Proxy Manager hoặc Caddy).
- API key OpenAI (platform.openai.com) hoặc DeepSeek (platform.deepseek.com). Cả hai đều tính phí theo usage, không cần trả trước.
- Hiểu cơ bản về JSON và khái niệm webhook. Không cần biết lập trình.
Nếu chưa có VPS, bạn cần một máy có full root, tối thiểu 2 GB RAM (gói VPS NVMe 2 GB là đủ cho n8n + vài workflow AI nhẹ). Nếu chạy nhiều workflow xử lý văn bản dài, nâng lên 4 GB sẽ thoải mái hơn.
Vì sao n8n là lựa chọn hợp lý cho AI workflow
n8n không phải công cụ automation riêng biệt, nhưng với người muốn tự chủ dữ liệu thì nó là lựa chọn hàng đầu. Khác với Zapier hay Make (chạy trên cloud, tính phí theo số task), n8n self-hosted trên VPS của bạn: trả một lần chi phí server, không giới hạn số workflow, không giới hạn số lần thực thi. Bạn sở hữu toàn bộ dữ liệu, bao gồm cả prompt và kết quả AI trả về.
Điểm mạnh thứ hai là khả năng nối với gần như mọi thứ: HTTP Request node gọi bất kỳ API nào, Webhook node nhận request từ bên ngoài, cùng hàng trăm integration có sẵn (Google Sheets, Telegram, PostgreSQL, Slack...). Khi bạn muốn gắn AI vào, chỉ cần một HTTP Request node gọi API OpenAI hoặc DeepSeek, hoặc dùng node AI Agent có sẵn của n8n nếu thích giao diện trực quan hơn.
Thứ ba, n8n chạy bằng Docker Compose, cập nhật đơn giản, backup dễ dàng (chỉ cần copy thư mục dữ liệu). Đây là lý do mình khuyên chạy n8n trên VPS thay vì máy cá nhân: nó cần hoạt động liên tục, và VPS có uptime 99.9% + nguồn điện ổn định.
Bước 1 - Cài đặt n8n bằng Docker Compose
Tạo thư mục làm việc và file cấu hình:
mkdir -p ~/n8n && cd ~/n8n
nano docker-compose.yml
Dán nội dung sau vào file:
services:
n8n:
image: docker.n8n.io/n8nio/n8n:latest
container_name: n8n
restart: unless-stopped
ports:
- "5678:5678"
environment:
- N8N_HOST=n8n.yourdomain.com
- N8N_PROTOCOL=https
- WEBHOOK_URL=https://n8n.yourdomain.com/
- GENERIC_TIMEZONE=Asia/Ho_Chi_Minh
- TZ=Asia/Ho_Chi_Minh
volumes:
- n8n_data:/home/node/.n8n
volumes:
n8n_data:
Giải thích vài biến quan trọng: N8N_HOST và N8N_PROTOCOL để n8n biết domain và giao thức truy cập (cần khi bạn muốn webhook hoạt động qua HTTPS). WEBHOOK_URL là địa chỉ công khai để n8n tạo URL webhook. GENERIC_TIMEZONE đặt múi giờ Việt Nam để scheduler chạy đúng giờ.
Khởi động container:
docker compose up -d
Kiểm tra container đã chạy chưa:
docker compose ps
Bạn sẽ thấy trạng thái Up. Giờ truy cập http://VPS_IP:5678 để tạo tài khoản admin. Nếu muốn truy cập qua HTTPS, cấu hình reverse proxy (bài cấu hình Nginx reverse proxy và SSL cho n8n hướng dẫn chi tiết).
Bước 2 - Lấy API key từ OpenAI và DeepSeek
Mỗi nhà cung cấp AI có một cách lấy key riêng, nhưng quy trình đều đơn giản:
- OpenAI: vào platform.openai.com → API Keys → Create new secret key. Copy key dạng
sk-.... Lưu ý key chỉ hiện một lần. - DeepSeek: vào platform.deepseek.com → API Keys → Create API key. Key dạng
sk-...tương tự.
DeepSeek là lựa chọn thay thế OpenAI với chi phí thấp hơn đáng kể (khoảng 1/10 giá GPT-4o cho input/output, theo công bố chính thức). Nếu workflow của bạn xử lý lượng văn bản lớn (phân loại ticket, tóm tắt nội dung), DeepSeek giúp giảm chi phí vận hành đáng kể. Tuy nhiên, chất lượng suy luận phức tạp vẫn nên dùng OpenAI nếu bạn cần độ chính xác cao.
Mẹo: nên tạo riêng một key cho n8n, đừng dùng chung key với project khác. Khi cần thu hồi hoặc giới hạn chi tiêu, bạn chỉ cần xóa key đó mà không ảnh hưởng gì khác.
Bước 3 - Tạo credential và node AI trong n8n
Trong giao diện n8n, vào Credentials → Add Credential → chọn OpenAI. Dán API key vào ô tương ứng. Với DeepSeek, vì n8n chưa có credential riêng, bạn dùng HTTP Request node để gọi API trực tiếp (mình sẽ hướng dẫn ở bước 4).
Cách gọi OpenAI qua node AI Agent (trực quan, không cần code):
- Kéo node AI Agent vào canvas.
- Trong phần Model, chọn credential OpenAI vừa tạo, chọn model
gpt-4o-mini(nhanh, rẻ, đủ dùng cho đa số tác vụ) hoặcgpt-4onếu cần chất lượng cao hơn. - Thêm System Prompt mô tả vai trò, ví dụ: "Bạn là trợ lý phân loại email. Phân loại email thành: quan trọng, quảng cáo, spam. Trả về JSON với field category."
- Kết nối node nguồn (Webhook, Email Trigger...) vào AI Agent.
Với DeepSeek, cấu hình thủ công hơn chút nhưng cũng không phức tạp. Bạn dùng HTTP Request node với method POST tới endpoint https://api.deepseek.com/chat/completions, header Authorization: Bearer YOUR_API_KEY, body JSON theo chuẩn OpenAI-compatible. Thực ra toàn bộ API của DeepSeek tương thích chuẩn OpenAI nên bạn có thể dùng thẳng node OpenAI với custom base URL, nhưng cách HTTP Request thì rõ ràng và dễ debug hơn.
Bước 4 - Workflow mẫu 1: Tự động phân loại và phản hồi email
Đây là workflow mình dùng thường xuyên nhất: một địa chỉ email nhận yêu cầu từ khách hàng, n8n đọc nội dung, AI phân loại và gửi phản hồi phù hợp. Cấu trúc như sau:
[Email Trigger] → [HTTP Request - DeepSeek] → [Switch node] → [Gửi email phản hồi theo loại]
Bước 1: Kéo node Email Trigger (IMAP) vào canvas, cấu hình host, port, username, password của hộp thư. Đặt polling interval 1 phút.
Bước 2: Thêm HTTP Request node, cấu hình gọi DeepSeek:
Method: POST
URL: https://api.deepseek.com/chat/completions
Header:
Content-Type: application/json
Authorization: Bearer sk-your-deepseek-api-key
Body (JSON):
{
"model": "deepseek-chat",
"messages": [
{
"role": "system",
"content": "Phân loại email thành QUAN_TRONG, HO_TRO, QUANG_CAO. Chỉ trả về một từ."
},
{
"role": "user",
"content": "Chủ đề: {{ $json.subject }}. Nội dung: {{ $json.body }}"
}
],
"max_tokens": 10
}
Giải thích: biến {{ $json.subject }} và {{ $json.body }} là cách n8n trích xuất dữ liệu từ node trước (Email Trigger). DeepSeek nhận prompt, trả về một từ phân loại. max_tokens: 10 để giới hạn output, tránh tốn token.
Bước 3: Thêm Switch node, đọc kết quả từ response của DeepSeek. Trong HTTP Response, kết quả nằm ở $json.choices[0].message.content. Cấu hình Switch so sánh giá trị này với ba nhãn.
Bước 4: Với mỗi nhánh, thêm node Send Email với nội dung khác nhau. Email QUANG_CAO thì xóa luôn, email HO_TRO thì gửi template trả lời chuẩn, email QUAN_TRONG thì gửi vào Telegram của bạn để xử lý thủ công.
Kết quả: mỗi email đến tự động được phân loại, xử lý trong vòng dưới 1 phút. Không cần ngồi lọc thủ công nữa.
Bước 5 - Workflow mẫu 2: Sinh nội dung SEO hàng loạt bằng AI
Workflow thứ hai mình dùng để sinh mô tả sản phẩm hoặc đoạn content ngắn cho website. Thay vì gõ từng cái, mình đưa danh sách tiêu đề vào Google Sheet, n8n đọc từng dòng, gọi AI sinh nội dung, rồi ghi kết quả vào cột bên cạnh.
[Schedule Trigger] → [Google Sheets - Đọc dữ liệu] → [Loop qua từng dòng] → [HTTP Request - AI] → [Google Sheets - Ghi kết quả]
Bước 1: Thêm Schedule Trigger, đặt chạy mỗi ngày lúc 8:00 sáng theo giờ Việt Nam.
Bước 2: Thêm Google Sheets node, kết nối tài khoản Google, chọn spreadsheet chứa danh sách tiêu đề. Giả sử cột A là tiêu đề sản phẩm, cột B để trống cho AI điền mô tả.
Bước 3: Thêm HTTP Request node gọi AI với prompt yêu cầu sinh mô tả 50-80 từ, chuẩn SEO, có giọng văn tự nhiên:
{
"model": "deepseek-chat",
"messages": [
{
"role": "system",
"content": "Bạn là copywriter SEO. Viết mô tả sản phẩm 50-80 từ, tự nhiên, có từ khóa chính, không sáo rỗng."
},
{
"role": "user",
"content": "Sản phẩm: {{ $json.title }}"
}
],
"max_tokens": 200
}
Bước 4: Thêm Google Sheets node thứ hai, chọn action Update, map trường mô tả từ response của AI ($json.choices[0].message.content) vào cột B của đúng dòng đang xử lý.
Với 50 sản phẩm, workflow này chạy trong khoảng 5-10 phút, tốn khoảng vài nghìn đồng tiền API DeepSeek. Nếu thuê VPS n8n chuyên dụng, bạn không cần lo resource, workflow chạy nền yên tĩnh, không ảnh hưởng website chính.
Bước 6 - Bảo mật API key và webhook
Đây là phần dễ bị bỏ qua nhưng quan trọng. API key AI của bạn có giá trị tài chính, nếu lộ ra ngoài sẽ bị người khác dùng chùa. Vài nguyên tắc mình áp dụng:
- Không nhúng API key trực tiếp vào workflow nếu workflow có thể bị người ngoài nhìn thấy (ví dụ workflow public).
- Dùng n8n Credentials để lưu key, không paste vào field JSON cứng trong node.
- Đặt webhook URL khó đoán: n8n tự sinh chuỗi random, đừng đổi thành tên dễ đoán như
/webhook/test. - Bật xác thực cho webhook nếu workflow xử lý dữ liệu nhạy cảm.
Ngoài ra, nên đặt giới hạn chi tiêu trong API dashboard của OpenAI/DeepSeek (hard limit). Khi prompt bị lỗi loop hoặc bị kích hoạt sai, bạn không muốn hóa đơn tăng vọt. Bài bảo mật n8n self-host có checklist chi tiết hơn về chủ đề này.
Xử lý lỗi thường gặp
Lỗi 1: HTTP Request node trả về 401 Unauthorized. Nguyên nhân thường là sai API key hoặc thiếu header. Kiểm tra lại trong phần Headers của node, đảm bảo đúng định dạng Authorization: Bearer sk-.... Lưu ý có khoảng trắng giữa "Bearer" và key.
Lỗi 2: AI trả về nội dung không đúng format yêu cầu. Model có thể trả lời dài dòng thay vì chỉ một từ phân loại. Khắc phục bằng cách thêm instruction rõ hơn trong system prompt: "Chỉ trả về JSON, không giải thích gì thêm", hoặc dùng response_format: {"type": "json_object"} nếu API hỗ trợ (OpenAI có, DeepSeek cũng tương thích).
Lỗi 3: Workflow chạy nhưng không thấy log. Vào node Execution, xem từng bước chạy được không. Nếu node nào hiện màu đỏ, click vào để xem error message cụ thể. Cách debug nhanh: thêm node Set tạm thời để in dữ liệu ra, xem cấu trúc JSON trước khi map vào node tiếp theo.
Lỗi 4: Webhook trả về 404. Kiểm tra đường dẫn webhook đã đúng chưa (bao gồm cả phần test hay production). Nếu dùng production webhook, bạn phải active workflow trước (bật toggle Active ở góc trên).
Câu hỏi thường gặp
Chi phí chạy n8n + AI trên VPS là bao nhiêu?
Chi phí gồm hai phần: tiền VPS (từ khoảng 189.000đ/tháng cho gói 2 GB RAM, xem bảng giá VPS để biết chi tiết) và tiền API AI tính theo usage. Với workflow xử lý vài trăm request/tháng, tiền API chỉ vài chục nghìn đồng nếu dùng DeepSeek, vài trăm nghìn nếu dùng OpenAI.
Nên dùng OpenAI hay DeepSeek cho n8n?
Tùy bài toán. DeepSeek rẻ hơn đáng kể (khoảng 1/10 giá GPT-4o), phù hợp xử lý khối lượng lớn, tác vụ không quá phức tạp. OpenAI mạnh hơn về suy luận phức tạp, viết code, xử lý ngữ cảnh dài. Thực tế mình dùng cả hai: DeepSeek cho phân loại, tóm tắt; OpenAI cho viết content chất lượng cao.
n8n có giới hạn số workflow hoặc số lần chạy không?
Bản self-hosted trên VPS của bạn không có giới hạn. Bạn tự giới hạn bởi RAM/CPU của VPS và chi phí API. Điều này khác hẳn bản cloud của n8n (giới hạn theo gói).
Làm sao backup n8n khi cài trên VPS?
Toàn bộ dữ liệu n8n nằm trong volume n8n_data. Backup bằng cách copy thư mục này đi nơi khác, hoặc dùng lệnh docker run --rm -v n8n_data:/data -v $(pwd):/backup alpine tar czf /backup/n8n_backup.tar.gz /data. Bài backup n8n đúng cách có hướng dẫn chi tiết hơn.
VPS 2 GB RAM có đủ chạy n8n + AI workflow không?
Đủ cho n8n và vài workflow xử lý tuần tự. Nếu chạy nhiều workflow song song hoặc xử lý file lớn, nên nâng lên 4 GB. Bài chọn RAM và CPU cho n8n phân tích cụ thể theo số workflow thực tế.
Bài viết liên quan
- Cài đặt n8n trên VPS Ubuntu 24.04 bằng Docker Compose
- Dựng AI agent đầu tiên trên n8n với LLM tool và memory
- Xây chatbot RAG bằng n8n và vector store
- Kết nối n8n với MCP server


