N8n là gì? Hướng dẫn Xây dựng Workflow tự động hoá đơn giản với n8n
Bạn có thường xuyên phải đối mặt với việc tự động hóa các tác vụ lặp đi lặp lại như đồng bộ dữ liệu e-commerce, cập nhật tỷ giá USD, giá Bitcoin hàng ngày, hay xử lý webhook giữa các API khác nhau?
Là developers, chúng ta thường phải viết hàng trăm dòng code để giải quyết các vấn đề tích hợp phức tạp. Đây chính là lúc n8n – một nền tảng workflow automation mã nguồn mở – trở thành “trợ thủ” đắc lực. Với triết lý “developer-first”, n8n hỗ trợ native JavaScript/TypeScript, cho phép mở rộng qua custom nodes và triển khai self-hosted để bạn toàn quyền kiểm soát dữ liệu.
Bài viết này sẽ hướng dẫn bạn cách triển khai n8n với Docker, tạo một workflow giám sát GitHub commits và xây dựng custom nodes để tối ưu hóa quy trình.
1. n8n là gì?
n8n là một nền tảng automation mã nguồn mở, giúp developers kết nối các ứng dụng, dịch vụ và API một cách trực quan mà không cần viết quá nhiều code.
Những đặc điểm nổi bật khiến n8n được giới developer ưa chuộng:
-
Mã nguồn mở: Công khai trên GitHub, dễ dàng kiểm tra, tùy chỉnh và đóng góp.
-
Self-hosted: Cho phép deploy trực tiếp trên hạ tầng cá nhân/doanh nghiệp, đảm bảo bảo mật dữ liệu tuyệt đối.
-
Khả năng mở rộng: Dễ dàng tạo custom nodes để tích hợp các dịch vụ ngách chưa có sẵn.
-
Sức mạnh của JavaScript/TypeScript: Viết node functions trực tiếp bằng JS/TS, vô cùng tiện lợi cho coder.
-
Expression Support: Xử lý dữ liệu linh hoạt ngay trong workflow bằng các biểu thức JavaScript.
-
Tích hợp AI: Hỗ trợ nhúng chatbot và phân tích dữ liệu thông minh để tự động hóa việc ra quyết định.
2. Hướng dẫn cài đặt n8n với Docker
Sử dụng Docker là phương pháp nhanh chóng và sạch sẽ nhất để chạy n8n.
2.1. Tạo file cấu hình
Tạo một file docker-compose.yml tại thư mục làm việc của bạn với nội dung sau:
YAML
version: '3'
services:
n8n:
image: n8nio/n8n:latest
restart: always
ports:
- "5678:5678"
environment:
- N8N_PORT=5678
- N8N_PROTOCOL=http
- NODE_ENV=production
- WEBHOOK_URL=http://localhost:5678/
volumes:
- ~/.n8n:/home/node/.n8n
2.2. Khởi động hệ thống
Mở terminal và chạy lệnh khởi tạo container ở chế độ background:
Bash
docker-compose up -d
Sau khi tiến trình hoàn tất, bạn có thể truy cập giao diện n8n tại: http://localhost:5678
2.3. Cấu hình cho môi trường Production
Khi đưa lên production, tính bảo mật và ổn định cần được ưu tiên. Bạn hãy bổ sung các biến môi trường sau vào file docker-compose.yml:
YAML
environment:
- N8N_ENCRYPTION_KEY=your-secure-encryption-key
- WEBHOOK_URL=https://your-domain.com/
- N8N_EMAIL_MODE=smtp
- N8N_SMTP_HOST=smtp.example.com
- N8N_SMTP_PORT=587
- N8N_SMTP_USER=your-smtp-user
- N8N_SMTP_PASS=your-smtp-password
3. Hướng dẫn xây dựng Workflow đơn giản
Hãy cùng thực hành với một workflow thực tế: Tự động kiểm tra GitHub repository và gửi thông báo qua Slack khi có commit mới.
3.1. Thiết lập Trigger (GitHub)
-
Truy cập giao diện n8n, chọn Workflows -> New và đặt tên là “GitHub Commit Monitor”.
-
Thêm node GitHub, cấu hình Personal Access Token.
-
Cài đặt Operation là Watch Repository, nhập tên Repo (ví dụ:
n8n-io/n8n). -
Chọn Properties là Commits và đặt Polling Interval (ví dụ: 15 phút).
3.2. Lọc dữ liệu (Filter)
Thêm node Filter ngay sau GitHub node để chỉ lấy các commit mới trong 24h qua. Chọn Mode Filter by Formula và nhập:
JavaScript
{{$json["commit"]["author"]["date"] > $now.minus({days: 1}).toISOString()}}
3.3. Định dạng dữ liệu (Function)
Thêm node Function để trích xuất các thông tin quan trọng cần gửi đi:
JavaScript
return items.map(item => {
const commit = item.commit;
const repo = item.repository;
return {
json: {
commitInfo: {
message: commit.message,
author: commit.author.name,
date: commit.author.date,
url: item.html_url,
repo: `${repo.owner.login}/${repo.name}`
}
}
};
});
3.4. Gửi thông báo (Slack)
Thêm node Slack, kết nối tài khoản và thiết lập gửi tin nhắn. Sử dụng Expression sau để định dạng nội dung hiển thị trên Slack:
Plaintext
New commit in {{$json["commitInfo"]["repo"]}} by {{$json["commitInfo"]["author"]}}:
*{{$json["commitInfo"]["message"]}}*
🔗 <{{$json["commitInfo"]["url"]}}|View on GitHub>
4. Mở rộng với Custom Node dành cho Developer
Nếu API bạn cần chưa có sẵn trên n8n, bạn hoàn toàn có thể tự build node riêng.
4.1. Chuẩn bị môi trường
Bash
git clone https://github.com/n8n-io/n8n.git
cd n8n
npm install
npm run bootstrap
npm run build
4.2. Khởi tạo Node logic
Tạo file cấu trúc node tại packages/nodes-base/nodes/YourNodeName/YourNodeName.node.ts:
JavaScript
import { IExecuteFunctions } from 'n8n-core';
import { INodeExecutionData, INodeType, INodeTypeDescription } from 'n8n-workflow';
export class YourNodeName implements INodeType {
description: INodeTypeDescription = {
displayName: 'Your Node Name',
name: 'yourNodeName',
group: ['transform'],
version: 1,
description: 'Basic description of your node',
defaults: { name: 'Your Node Name' },
inputs: ['main'],
outputs: ['main'],
properties: [
{
displayName: 'Operation',
name: 'operation',
type: 'options',
options: [{ name: 'Example Operation', value: 'example' }],
default: 'example',
},
],
};
async execute(this: IExecuteFunctions): Promise<INodeExecutionData[][]> {
const items = this.getInputData();
const returnData: INodeExecutionData[] = [];
for (let i = 0; i < items.length; i++) {
returnData.push({
json: { ...items[i].json, processedByCustomNode: true }
});
}
return [returnData];
}
}
5. Best Practices khi làm việc với n8n
Để đảm bảo workflow hoạt động trơn tru và chuyên nghiệp, hãy áp dụng các tiêu chuẩn sau:
| Hạng mục tối ưu | Giải pháp đề xuất |
| Xử lý lỗi (Error Handling) | Dùng node Error Trigger kết nối với Slack/Email. Sử dụng Try/Catch bên trong các Function nodes. |
| Bảo mật (Credentials) | Dùng biến môi trường (ví dụ: ${MY_API_KEY}) thay vì hardcode. Gọi trong workflow bằng {{$env.MY_API_KEY}}. |
| Hiệu năng (Performance) | Dùng node Split In Batches khi xử lý lượng lớn dữ liệu. Đổi sang database PostgreSQL khi chạy Production. |
| Quản lý phiên bản (Backup) | Lưu trữ workflow dưới dạng JSON vào Git. Cấu hình backup định kỳ cho database n8n. |
6. Kết luận
n8n là một công cụ cực kỳ mạnh mẽ, giúp giải phóng developer khỏi những đoạn code tích hợp nhàm chán để tập trung vào logic nghiệp vụ cốt lõi. Sự kết hợp hoàn hảo giữa tính dễ dùng của giao diện kéo-thả và sức mạnh tùy biến sâu bằng code JS/TS biến n8n thành nền tảng automation hàng đầu hiện nay. Bắt đầu với một vài workflow nhỏ, bạn sẽ nhanh chóng nhận ra lượng thời gian khổng lồ mà công cụ này tiết kiệm được cho dự án của mình.

