'
Whatsapp Business Newsletter

[n8n 教學]用 Docker 在 Local 建立免費 & 無限次數使用的自動化工具

n8n 是款能把你從重複的例行性任務中,拯救出來的自動化工具。

使用者可以透過視覺化的介面,用拖拉節點、設定參數的方式來建立符合自己需求的工作流。

他有雲端與本地(local)的版本,考量到許多工作流程需要放上私鑰(ex: Google API Key、OpenAI API Key),以及雲端版本至少要付費 20 歐元(限制工作流程執行 2500 次);所以筆者選擇了本地部署的方案,這篇文章會分享詳細的操作步驟。

Post image

▋ STEP 1: 安裝 Docker

前往 Docker 官網: https://www.docker.com/

根據自己的作業系統選擇對應的版本下載。

Post image

···

▋ STEP 2: 使用 docker-compose.yml 安裝 n8n

你可以直接 git clone 筆者的 GitHub 專案,或者建立一個 n8n 的資料夾,新增 docker-compose.yml 檔案。

volumes:
  n8n_storage:
services:
  n8n:
    image: n8nio/n8n:latest
    restart: always
    ports:
      - "127.0.0.1:5678:5678" # 根據實際需求設定
    volumes:
      - n8n_storage:/home/node/.n8n

貼上內容後,在終端機(Terminal)輸入 docker compose up -d 即可啟動

如果要關閉,輸入 docker cpose down 即可

如果要關閉,輸入 `docker cpose down` 即可

···

▋ STEP 3: 註冊 n8n 帳號

進入網址: http://127.0.0.1:5678

如果看到下面的帳號設定畫面就代表你 n8n 安裝成功了!

Post image

帳號設定完成後,你會看到下面的初始畫面。

Post image

這邊要特別提醒的是,你一定要記得自己的 Email 跟 Password,因為官方 Forgot Password 的功能只是擺飾用的。

Post image

到這一步,你就完成 n8n local 環境的初始化了!

[n8n 教學]掌握重要節點 (Node) 使用情境:Set、Loop Over Items、If、Code、HTTP Request、Wait

n8n 是一款功能強大的自動化工具,透過視覺化的操作介面,只需拖拉節點、設定參數,就能快速建立屬於你的工作流。

但如果你對 n8n 的基礎知識與節點功能不夠理解,可能會遇到各種常見的坑(ex: Loop Over Items 無法重置迴圈、讀不到過去節點的結果..)。

為了讓大家少踩坑,這篇文章將詳細介紹 n8n 節點的基礎操作,幫助你快速上手這款工具。

Post image
文章大綱

▋ Set Node: 設定 Workflow 共用的變數
▋ Loop Over Items Node: 執行重複任務
▋ HTTP Request: 呼叫 API
▋ Wait Node: 等待指定時間
▋ Code Node: 添加程式邏輯(ex: 格式化資料)
▋ 取得指定節點(Specific Node)的 Result
▋ 用 If Node 來 Reset Loop Over Items 資料
▋ 用 $getWorkflowStaticData 儲存資訊

n8n 有雲端與本地(local)的開源版本,基於資訊安全與使用限制,筆者強烈建立在本地(local)建立環境,詳細的操作步驟可以參考這篇文章

···

▋ Set Node: 設定 Workflow 共用的變數

Set Node 的主要功能是定義工作流中共用的變數,這樣當參數要調整時,只需要調整一個地方,不需要去多個地方調整,避免設定上的遺漏。

比如你想針對特定的 Google Sheet 做讀取、新增、修改的操作,就可以將 Google Sheet 的 URL 設定到 Set Node 的欄位中。

這樣後續要使用 Google Sheet URL 時,只要讀取這個 Set Node 的資訊即可,不需要在每個 Google Sheet 的節點重新設定。

Post image

小提醒: 在這邊設定的變數是「固定值」,如果想要設定可以更改的變數,請參考後面的「$getWorkflowStaticData」方案。

···

▋ Loop Over Items Node: 執行重複任務

Loop Over Items Node 可以針對獲得的每一筆資料(item)執行相同的操作。

像筆者在後續的範例中,因為要重複 Call Google 的 API 來取得關聯關鍵字,就會用到這個 Node:

  • loop: 放上你要執行的重複任務。
  • done: 重複任務執行完畢後,會得到的累計結果。
Post image

小提醒: Loop 迴圈是不會自動重置的,需要搭配 If Node 進行條件判斷,才能避免資料重複處理。

···

▋ HTTP Request Node: 呼叫 API

許多自動化流程都是需要呼叫 API 來取得權限(ex: token)的:

  • Method: 有 GET/POST/DELETE 等方法可以選擇
  • URL: 貼上 API URL
  • Authentication: 執行 API 需要的憑證。
  • 傳送參數: 可以選擇用 Query Parameters 或 Send Body 的方式來傳送參數。

下面就用 Google 建議搜尋的 Get Method API 來向大家做個示範:

Post image

···

▋ Code Node: 添加程式邏輯(ex: 格式化資料)

當 n8n 預設的功能無法滿足需求時,就需要 Code Node 來處理了。

比如上面 HTTP Request Node 的結果是一個比較複雜的格式,我們可以透過程式將它轉換為自己期待的格式,並且可以透過 console.log 來協助 debug。

Post image

···

▋ Wait Node: 等待指定時間

Wait Node 可以在工作流間加入一段延遲。

比如我們在批量 Call API 時,為了避免伺服器過載,或是減少自己被黑名單的機率,可以設定 5 秒的間隔。

Post image

···

▋ 取得指定節點(Specific Node)的 Result

n8n 默認取得上一個節點(Previous Node)的 Result,但如果你想要取得更早之前 Node 的 Result,就要用到下面的方式:

  • Node: 使用 Expression {{ $('node_name').item.json.feild_name }}
Post image
  • Code$node["node_name"].json["feild_name"];
Post image

···

▋ 用 If Node 來 Reset Loop Over Items 資料

如果你有設計迴圈(Loop),可透過 If Node 設定條件來 Reset 資料,避免因未清空資料而導致流程錯誤。

如果你希望每次進入 Loop Over Items 時資料都清空,Workflow 可以參考下圖的結構來設計:

  • 將 If Node 放在上一個 Node 的後面,Loop Over Items 前面。
  • 將 Loop Over Items 的 done 連結到 If Node,這樣才能協助 Reset 資料。
Post image

If Node 我用 {{ $runIndex }} 跑第幾次來當作重置的判斷,如果次數小於上一步 items 的數量 {{ $json.keys().length }},會走 True,進行重置。

Post image

為了讓重置的事件觸發,在 Loop Over Items Node,我們要在 Options 的 Reset 設定重置的邏輯為 {{ $prevNode.name === 'if' }}

Post image

···

▋ 用 $getWorkflowStaticData 儲存資訊

當需要跨節點(Node)保存資料時,可透過 $getWorkflowStaticData 儲存並讀取與更新工作流的靜態數據。

下面用 Code Node 展示初始化變數資訊的方式:

const workflowStaticData = $getWorkflowStaticData('global');

if (!workflowStaticData.hasOwnProperty('keyword_1st')) {
  workflowStaticData.keyword_1st = []
}

return [{}];
Post image

如果你想要讀取、更新資料(範例是在 Array 裏面 push 資料),可以這麼做:

const workflowStaticData = $getWorkflowStaticData('global');

workflowStaticData.keyword_1st.push('bbb');
console.log(workflowStaticData.keyword_1st);

return [{}];
Post image

以上就是今天的分享,如果你剛開始使用 n8n,不妨從這些節點開始入手。有任何問題歡迎留言討論!讓我們一起學習更有效率地使用 n8n。

By Aff

發佈留言

發佈留言必須填寫的電子郵件地址不會公開。 必填欄位標示為 *