使用 n8n 建構自動化工作流程,整合 400+ 服務,支援 AI Agent 和自訂程式碼
專案簡介
n8n 是一個開源的工作流程自動化平台,提供視覺化介面建構自動化流程。支援 400+ 整合,可自架保護資料隱私,並內建 AI 功能。
GitHub Stars: 173K+
主要功能
- 視覺化編輯 - 拖拉式建構工作流程
- 400+ 整合 - Slack、GitHub、AWS、Google 等
- AI 原生 - 內建 LangChain、向量資料庫
- 自訂程式碼 - JavaScript、Python 節點
- 自架部署 - 完全控制資料
快速部署
Docker
1
2
3
4
5
| docker run -it --rm \
--name n8n \
-p 5678:5678 \
-v n8n_data:/home/node/.n8n \
n8nio/n8n
|
Docker Compose(生產環境)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
| version: '3.8'
services:
n8n:
image: n8nio/n8n
restart: always
ports:
- "5678:5678"
environment:
- N8N_BASIC_AUTH_ACTIVE=true
- N8N_BASIC_AUTH_USER=admin
- N8N_BASIC_AUTH_PASSWORD=your-password
- N8N_HOST=n8n.example.com
- N8N_PROTOCOL=https
- WEBHOOK_URL=https://n8n.example.com/
- DB_TYPE=postgresdb
- DB_POSTGRESDB_HOST=postgres
- DB_POSTGRESDB_DATABASE=n8n
- DB_POSTGRESDB_USER=n8n
- DB_POSTGRESDB_PASSWORD=your-db-password
volumes:
- n8n_data:/home/node/.n8n
depends_on:
- postgres
postgres:
image: postgres:15
restart: always
environment:
- POSTGRES_USER=n8n
- POSTGRES_PASSWORD=your-db-password
- POSTGRES_DB=n8n
volumes:
- postgres_data:/var/lib/postgresql/data
volumes:
n8n_data:
postgres_data:
|
訪問 http://localhost:5678
建立工作流程
基本概念
- Trigger - 啟動工作流程(Webhook、排程、事件)
- Node - 執行動作(API 呼叫、資料處理)
- Connection - 連接節點,傳遞資料
範例:GitHub Issue 通知
1
| Webhook Trigger → GitHub (Get Issue) → IF (severity=high) → Slack (Send Message)
|
- 新增 Webhook 節點作為觸發器
- 連接 GitHub 節點取得 Issue 詳情
- 使用 IF 節點過濾高嚴重度
- 發送到 Slack 頻道
AI 工作流程
LangChain 整合
1
| Manual Trigger → Chat Model → Output
|
設定 Chat Model 節點:
- Model:
gpt-4o 或 ollama/llama3.3 - System Message: 自訂角色設定
RAG 問答系統
1
| Webhook → Vector Store (Query) → Chat Model → Respond to Webhook
|
- 接收使用者問題
- 從向量資料庫檢索相關文件
- 將結果送入 LLM 生成回答
- 回傳結果
AI Agent
1
| Manual Trigger → AI Agent → Output
|
AI Agent 可以:
常用節點
資料處理
1
2
3
4
5
6
7
8
| // Code 節點 - JavaScript
const items = $input.all();
return items.map(item => ({
json: {
processed: item.json.data.toUpperCase(),
timestamp: new Date().toISOString()
}
}));
|
HTTP 請求
1
2
3
4
5
6
7
8
9
10
| {
"method": "POST",
"url": "https://api.example.com/scan",
"headers": {
"Authorization": "Bearer {{ $credentials.apiKey }}"
},
"body": {
"target": "{{ $json.url }}"
}
}
|
條件判斷
1
2
3
4
| IF: {{ $json.severity }} equals "critical"
→ Alert Team
ELSE
→ Log to Database
|
安全相關工作流程
漏洞掃描自動化
1
2
3
4
5
| Schedule Trigger (Daily)
→ HTTP Request (Nuclei API)
→ IF (New Vulnerabilities)
→ Slack Alert
→ Create Jira Ticket
|
憑證過期監控
1
2
3
4
5
| Schedule Trigger (Weekly)
→ Code (Check SSL Expiry)
→ IF (Expiring Soon)
→ Email Notification
→ Create Renewal Task
|
威脅情報收集
1
2
3
4
| RSS Feed Trigger
→ AI Agent (Summarize)
→ Notion (Save to Database)
→ Slack (Daily Digest)
|
生產環境設定
環境變數
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
| # 加密
N8N_ENCRYPTION_KEY=your-encryption-key
# 執行模式
EXECUTIONS_MODE=queue
QUEUE_BULL_REDIS_HOST=redis
# 日誌
N8N_LOG_LEVEL=info
N8N_LOG_OUTPUT=console,file
# 限制
N8N_PAYLOAD_SIZE_MAX=16
EXECUTIONS_DATA_PRUNE=true
EXECUTIONS_DATA_MAX_AGE=168
|
Worker 模式
1
2
3
4
5
6
7
8
9
10
11
| # 主服務
n8n-main:
command: n8n start
environment:
- EXECUTIONS_MODE=queue
# Worker
n8n-worker:
command: n8n worker
environment:
- EXECUTIONS_MODE=queue
|
相關連結
延伸閱讀