n8n Runner 用法

在 2.0.0 以後,官方推薦使用 Runner 作為執行 Code 的執行的地方。
與 n8n 執行環境隔離,在執行效能,與安全上,有所提升。

有幾個地方要設定

n8n 主程式的環境變數

enviroment:
  - N8N_RUNNERS_ENABLED=true
  - N8N_RUNNERS_MODE=external # 使用 external 表示
  - N8N_RUNNERS_BROKER_LISTEN_ADDRESS=0.0.0.0 # 允許 Runner 接入 n8n
  - N8N_RUNNERS_AUTH_TOKEN=隨機的Token
  - N8N_NATIVE_PYTHON_RUNNER=true # 啟用 Python Code

runner

n8n_runners:
  image: n8nio/runners:2.0.0
  environment:
    - N8N_RUNNERS_TASK_BROKER_URI=http://n8n:5679 # 預設 runner 接入的 port
    - N8N_RUNNERS_LAUNCHER_LOG_LEVEL=debug
    - N8N_RUNNERS_AUTH_TOKEN=test # 與主程式相同的隨機 Token

如此一來,在 2.0 版本中,執行 Code 就會透過 runner 去執行 JS 或 Python

其 runner docker 源碼是 https://github.com/n8n-io/task-runner-launcher


主程式完整可用環境變數如下:

1. N8N_RUNNERS_MODE

型別: internal | external
用途: 決定 Task Runner 以哪種模式執行。

  • internal:由 n8n 主進程直接 spawn 子進程。
  • external:Runner 以獨立程序方式存在(例如 Kubernetes sidecar),需自行啟動。

2. N8N_RUNNERS_PATH

型別: string
用途: Runner 用來連線至 n8n broker 的 endpoint 路徑(URL path 部分)。
預設: /runners


3. N8N_RUNNERS_AUTH_TOKEN

型別: string
用途: Runner 與 broker 之間的認證 token,用來確保只有允許的 runner 能連線。
預設: 空字串(非生產環境可接受,正式環境應設定)。


4. N8N_RUNNERS_BROKER_PORT

型別: number
用途: Broker(主進程)對 Runner 監聽的連接埠。
預設: 5679


5. N8N_RUNNERS_BROKER_LISTEN_ADDRESS

型別: string
用途: Broker 綁定的 IP。

  • 127.0.0.1 限本機
  • 0.0.0.0 對外部網路可用(Docker / K8s 常用)

6. N8N_RUNNERS_MAX_PAYLOAD

型別: number(bytes)
用途: n8n 傳給 Runner 的最大 payload 大小。
預設: 1GB
用於限制大型任務避免耗盡記憶體。


7. N8N_RUNNERS_MAX_OLD_SPACE_SIZE

型別: string(MB)
用途: 提供給 Runner 的 Node.js --max-old-space-size 設定,控制記憶體上限。
預設: 空字串 → 由 Node.js 自行決定。


8. N8N_RUNNERS_MAX_CONCURRENCY

型別: number
用途: 單一 Runner 可同時執行的任務數量。
預設: 10(維持舊版相容性)
n8n v2 計畫調整至 5


9. N8N_RUNNERS_TASK_TIMEOUT

型別: number(秒)
用途:

  • 單 task 最大執行時間(timeout)。
  • timeout 時,task 會被強制停止。
  • internal 模式下,Runner 也會被完全重啟。

預設: 300 秒(5 分鐘)


10. N8N_RUNNERS_TASK_REQUEST_TIMEOUT

型別: number(秒)
用途: Task 排隊等候 Runner 可用的最長時間。若超過就直接報錯。
預設: 60


11. N8N_RUNNERS_HEARTBEAT_INTERVAL

型別: number(秒)
用途: Runner 向 broker 送出 heartbeat 的頻率。
若超過間隔未收到 heartbeat,broker 會認為 runner 掛掉並終止任務。
預設: 30


12. N8N_RUNNERS_INSECURE_MODE

型別: boolean(true / false)
用途:
在 Runner 中停用所有安全限制。除非必要,不建議在生產環境啟用
用途多為:

  • 舊 code 依賴不安全 JS 特性
  • 需要繞過 sandbox 限制

預設: false


Runner 端環境變數解釋

1. N8N_RUNNERS_GRANT_TOKEN

用途:
啟動器(launcher)向 n8n 主系統進行一次性授權交換時所使用的「單次授權 token」。

流程簡述:

  1. Runner 啟動 → 派出 launcher
  2. 主系統回傳 single-use grant token
  3. 此 token 用於換取正式 auth token(或建立信任)
  4. 使用一次後即失效(防重放、提升安全性)

主要目的:
確保 Runner 啟動流程安全,不讓不存在的或未經允許的 Runner 冒充加入。


2. N8N_RUNNERS_TASK_BROKER_URI

用途:
Runner 要連線至 Task Broker(主進程或 sidecar broker)的完整 URI。

典型格式可能是:

ws://127.0.0.1:5679/runners

或在 K8s 中:

ws://n8n-broker.default.svc.cluster.local:5679/runners

它是 Runner 的 主要指令通道,用來接收:

  • 任務指派
  • heartbeats
  • 控制訊息(停止、取消、重啟等)

3. N8N_RUNNERS_HEALTH_CHECK_SERVER_ENABLED

用途:
是否啟用 Runner 的本地「健康檢查 HTTP 伺服器」。
值通常為:

  • "true"
  • "false"

啟用後,Runner 會起一個短小的 HTTP server 提供:

  • readiness / liveness check
  • K8s 或 Docker healthcheck 可直接打這個端點

用途:

  • 監控 Runner 是否正常運作
  • 自動重啟掛掉或卡住的 Runner

4. N8N_RUNNERS_HEALTH_CHECK_SERVER_PORT

用途:
健康檢查伺服器要綁定的埠號。

搭配 N8N_RUNNERS_HEALTH_CHECK_SERVER_ENABLED 使用。
範例:

N8N_RUNNERS_HEALTH_CHECK_SERVER_PORT=8080

Kubernetes 會利用它進行 livenessProbe / readinessProbe


5. N8N_RUNNERS_AUTO_SHUTDOWN_TIMEOUT

單位:秒
用途:

Runner 若在指定秒數內沒有接收到任何任務,就會自動關閉(退出進程)。

作用:

  • 避免空閒 runner 長期佔用資源
  • 雲端環境(K8s、serverless)可用於節省費用

典型例子:

N8N_RUNNERS_AUTO_SHUTDOWN_TIMEOUT=120 // 2 分鐘無任務就自動結束


6. N8N_RUNNERS_TASK_TIMEOUT

單位:秒
用途:

Runner 端對單一 task 的最大允許執行時間。
若超時:

  • 該 task 強制中斷
  • 若與主端設定同名,Runner 端會覆寫本地限制(或作為補充邏輯)

典型用途:

  • 避免無窮迴圈或卡死的任務
  • 多層保護,與主系統的 N8N_RUNNERS_TASK_TIMEOUT 一起運行

範例:

N8N_RUNNERS_TASK_TIMEOUT=300

Read more

2025 日本之旅

2025 日本之旅

這次 2025/10/4-12 的日本之旅 我的印象全停留在,卡啦OK多難睡,網咖多難找,還有300日圓可以洗澡12分鐘上。是沒這麼慘啦,但多災多難真的太有記憶點了。 但我很開心自己能完成 大阪 ⭢ 京都 ⭢ 東京 的自由行,從大阪關西機場到成田機場離開。對於一個人就第一次這樣走,很有挑戰。 這次要檢討的是,機場 ⭢ 旅館路線真的要先查好,尤其不要晚上去旅館,因為可能趕不上櫃檯關門時間。但最後事實證明,是我搞錯旅館位置,以為還以為我的旅館櫃檯關門了。但凡早點發現,就不用去找卡啦OK和網咖住。 再來是網咖過夜,一定要早點去找。包廂一定早早被包走。只能另外再找住宿地方。 最後是 Booking.com 實在太爛了。可能是我重複下單後,刪除其中一單的關係,把我另一個已經付款的旅館,當天取消!當天取消是要怎麼當天找到合適的旅館啦,整個住宿價格飆高。不得已,又要找網咖去住。 講完痛苦的部分,講講開心的部分。 這次看到漂亮的萬博大屋根,環形周長2公里。非常壯觀。

By Mason Tang
30歲心得

30歲心得

1. 不要介入別人的課題。避免別人負面情緒,影響到自己。 2. 累積專業,提高最低收入。也是向上層級的基本。 3. 覺察自己,調整自身態度、行為模式,成為更好的自己。 4. 揣測人性,保護自己同時創造共贏。 5. 練習不帶自己價值觀,聆聽別人說什麼,接受世界什麼人都有,可能別人的方式更好。 6. 練習接受現況,並持續思考下一步。 一切痛苦來源都是不接受。 7. 不帶目的,廣結善緣。持續做,不知道種子什麼時候會發芽,但回報是巨大的,會遠遠超越工作多年,足以改變人生。越早開始越好,才有足夠時間等到機會到來。 8. 學習理財, 10萬, 300萬, 1000萬,...,只用自己階段適合的理財方式。 * < 10 萬,拼命存錢,存緊急預備金,買足人身保險。避開無政府監管投資。 * <300

By Mason Tang
n8n怎麼做防抖debounce?

n8n怎麼做防抖debounce?

防抖 debounce, 是程式設計重要的概念之一。 用意是短時間有多個訊息進來,只處理一次。 處理哪一次呢?只處理最後一次。 就比如,有人點擊習慣什麼都按兩下, 你就要每次都處理兩次嗎? 又比如,你做 Line 機器人。講一句回一句。 那如果使用者一次傳好幾句呢? 像是打錯字,習慣的修正,再送一次。或是使用者分段講完。 你要跑一次一起處理,還是跑多次? 現在你知道使用情境了,那在 n8n 怎麼做呢? 就比如 Line 訊息好了,你其實可以把Webhook 來的訊息存到 db 裡。 另外做一個 短時間(ex:10s) 就跑一次的 schedule, 去檢查新訊息,並休息一下(ex:5s)。再檢查新訊息。 如果兩次新訊息,筆數都一樣,就表示沒有新訊息進來了。就可以開始處理。 最後再把新訊息標記成舊訊息。 讓

By Mason Tang
n8n 主從架構,解放n8n效能,進行更多任務

n8n 主從架構,解放n8n效能,進行更多任務

n8n 有提供主從架構,讓多個 n8n 程式一起為你工作。 他們會懂得調派任務。 比如你把任務給主管,主管收到任務,就會把任務分配給底下的員工。而你身為老闆的你,只要面對主管。 這主管就是 Master, 員工就是 Slave (奴隸,真貼切) 透過多個程式,讓效率大幅提高。同時間能進行的任務更多。 那實際怎麼做呢? 設定 N8N_ENCRYPTION_KEY 這是用來加密資料庫資料的密鑰,在原本單一 n8n ,不是那麼需要,啟動時就會幫你建立。 會存在 .n8n/config 中,長得就像這樣 { "encryptionKey": "cjw5GKuWL6eoqaC0MOnHdBNWOfxAzXsn" } 今天你要跑多個 n8n ,每個 n8n 都要讀資料庫,那些加密的資料就需要同樣的 encryptionKey 才能讀取。 所以需要直接在環境變數中直接設定

By Mason Tang