n8n 2.0 升級與維護教學
這章整理自高見龍的 n8n 2.0 升級文章,並對照 n8n 官方文件後改寫成教材。
判斷結果:這不適合只塞進部署章的一小節,因為它牽涉大版本升級、Task Runner、安全預設、資料庫、舊節點與維護流程,應該獨立成一章。
想一想
升級 n8n 不是「把版本號改新」而已。對初學者來說,升級看起來像技術維護,但其實它會直接影響 workflow 能不能繼續穩定執行。你原本能跑的 Code node,升級後可能因為 Python runner、環境變數權限或安全預設改變而出錯;你原本習慣按 Save 就上線,到了新版本可能變成 Save 和 Publish 分離;你原本用 SQLite、binary data 或舊節點,也可能遇到行為改變。
所以升級的核心心法是:不要把 production 當測試場。先知道新版本改了什麼,再檢查自己的 workflow 有沒有踩到 breaking changes,備份資料,跑 migration report,找一條低風險 workflow 試跑,最後才升正式環境。n8n 2.0 的價值是更安全、更可維護、更適合正式使用;但前提是你要用維運思維升級,而不是用「按一下更新」的心態升級。
1. 為什麼這篇要獨立成一章
11 n8n 雲端與地端部署教學 已經教你 n8n 要放在哪裡跑。
但升級是另一種能力。
部署關心:
- n8n 跑在哪裡
- 資料怎麼保存
- Webhook 怎麼公開
- HTTPS、Postgres、備份怎麼設
升級關心:
- 新版本改了什麼
- 哪些 workflow 會受影響
- 哪些環境變數預設改了
- 哪些舊節點不能用了
- 升級前怎麼檢查
- 升級後怎麼驗收
一句話:
部署是把 n8n 放上去;升級是讓 n8n 長期不壞地往前走。
2. n8n 2.0 的兩個大重點
高見龍文章中抓出的兩個核心重點很值得放進教材:
- Save / Publish 分離
- Task Runner 成為更重要的執行機制
2.1 Save / Publish 分離
以前的直覺是:
Save = 存檔並影響線上流程新版本更接近:
Save = 儲存草稿
Publish = 正式上線這對正式 workflow 很重要。
因為你可以先修改、測試、保存進度,不會因為手滑 Save 就把半成品推到 production。
2.2 Task Runner
Task Runner 是 n8n 用來執行 Code node 中使用者程式碼的機制。
官方文件說明 Task Runner 讓 JavaScript / Python code 能以更安全、效能更好的方式執行。
你可以先這樣理解:
以前:Code node 比較靠近 n8n 主程式跑
現在:Code node 可以交給 runner 隔離執行對正式環境來說,隔離很重要。
因為一段寫壞的 Code node 不應該拖垮整個 n8n。
3. Save / Publish 對 workflow 維護的影響
Save / Publish 分離讓 workflow 維護更像軟體發布。
舊思維:
改 workflow -> Save -> 線上立即改變新思維:
改 workflow -> Save 草稿 -> 測試 -> Publish 上線升級後,你應該建立一個小流程:
修改 -> Save -> Manual test -> Test webhook -> Check output -> Publish -> Production test不要把 Save 當成完成。
要把 Publish 當成真正上線。
4. Workflow History 與回復觀念
n8n 官方文件說明,workflow history 可以查看與還原過去版本。
它和 execution history 不一樣。
Workflow history = workflow 設計稿版本
Execution history = workflow 執行紀錄升級前後都要能回答:
- 如果 workflow 改壞,能不能回復上一版?
- 如果某次執行失敗,能不能看出是哪筆資料造成?
- 如果升級後出錯,能不能先回到原本版本?
5. Task Runner:先懂 Internal 與 External
官方文件把 Task Runner 分成兩種模式:
| 模式 | 適合 | 特點 |
|---|---|---|
| Internal mode | 開發、測試 | n8n 主程式啟動 child process,隔離較低 |
| External mode | 正式環境 | 獨立 sidecar container,隔離較完整 |
Internal mode
好處:
- 設定簡單
- 適合本機測試
- 不需要額外 container
限制:
- 官方不建議 production 使用
- 權限隔離較弱
- Python Code node 支援會受限制
External mode
好處:
- runner 與 n8n 主程式分開
- 比較符合正式環境安全需求
- 可以支援 Python runner
- 可以獨立限制 runner 資源
限制:
- Docker Compose 設定較複雜
- runner image 版本要和 n8n image 一致
- 需要設定 shared auth token
一句話:
學習環境可以先 internal;正式環境應該理解 external。
6. External Task Runner 的概念配置
概念架構:
n8n container
-> task broker
-> runners sidecar container
-> execute JS / Python codeDocker Compose 概念:
services:
n8n:
image: n8nio/n8n:2.x.x
environment:
- N8N_RUNNERS_ENABLED=true
- N8N_RUNNERS_MODE=external
- N8N_RUNNERS_BROKER_LISTEN_ADDRESS=0.0.0.0
- N8N_RUNNERS_AUTH_TOKEN=replace_with_random_secret
task-runners:
image: n8nio/runners:2.x.x
environment:
- N8N_RUNNERS_TASK_BROKER_URI=http://n8n:5679
- N8N_RUNNERS_AUTH_TOKEN=replace_with_random_secret
depends_on:
- n8n注意:
n8nio/n8n和n8nio/runners版本要一致N8N_RUNNERS_AUTH_TOKEN兩邊要一致- token 不要寫進公開 repo
- production 不要使用隨便的短字串
7. Python Code node 的升級重點
n8n 2.0 對 Python Code node 的影響很大。
高見龍文章指出,2.0 移除 Pyodide-based Python,若沒有設定 Task Runner,Python 可能無法正常執行。
如果你沒有用 Python Code node
升級風險較低,但仍要測 JavaScript Code node。
如果你有用 Python Code node
升級前一定要檢查:
- 是否啟用 Task Runner
- 是否使用 External mode
- runner image 版本是否一致
- Python 套件是否可用
- 是否需要自訂 runner image
如果你只是做一般資料整理
能不用 Python 就先不用。
很多資料轉換可以用:
- Edit Fields
- IF / Switch
- Code JavaScript
- Item Lists / Aggregate
- AI structured extraction
8. 安全預設改變
n8n 2.0 的方向是更安全的預設值。
這是好事,但也會讓舊 workflow 升級後遇到行為差異。
常見影響:
| 改變 | 可能影響 |
|---|---|
| Code node 預設不能讀環境變數 | 舊程式若讀 process.env 可能失敗 |
| Execute Command 預設停用 | 依賴 shell command 的 workflow 會壞 |
| Local File Trigger 預設停用 | 本機檔案觸發流程可能失效 |
| OAuth callback 預設要求認證 | 特定嵌入或 callback 情境需檢查 |
| settings file 權限檢查 | 權限不對可能啟動警告或失敗 |
| 檔案存取限制 | 讀寫非允許目錄可能失敗 |
不要看到錯誤就立刻把安全設定全部關掉。
先問:這個 workflow 為什麼需要這個權限?能不能改成更安全的方式?
9. 被移除或改變的東西
升級前要特別檢查:
Start Node
舊 Start node 要改:
| 舊做法 | 新做法 |
|---|---|
| 手動開始 | Manual Trigger |
| 被其他 workflow 呼叫 | Execute Workflow Trigger |
MySQL / MariaDB 作為 n8n 自身資料庫
n8n 2.0 不再支援 MySQL / MariaDB 作為 n8n 自身的 database backend。
注意:這不是說 MySQL node 不能用,而是指 n8n instance 自己儲存 workflow / execution / credentials 的資料庫。
n8n --tunnel
2.0 移除 --tunnel。
本機測 webhook 可以改用:
- ngrok
- localtunnel
- Cloudflare Tunnel
10. SQLite、binary data 與檔案處理
高見龍文章提到 n8n 2.0 對 SQLite 與 binary data handling 有改善。
官方 breaking changes 也列出移除 in-memory binary data mode。
Binary data 指:
- 圖片
- Excel
- 音檔
- 其他非純文字檔案
升級後要檢查:
- workflow 是否處理大檔案
- binary data 存在哪裡
- queue mode 是否需要共享儲存
- volume 是否有備份
如果 workflow 常處理檔案,升級後一定要做檔案流程測試。
11. 升級前檢查表
升級前請逐項確認:
- 已備份 database
- 已備份
/home/node/.n8n - 已保存
N8N_ENCRYPTION_KEY - 已匯出重要 workflow JSON
- 已記錄目前 n8n 版本
- 已記錄 Docker image tag
- 已檢查是否有 Start node
- 已檢查是否使用 MySQL / MariaDB 作為 n8n database
- 已檢查是否使用 Python Code node
- 已檢查是否使用 Execute Command
- 已檢查是否使用 Local File Trigger
- 已檢查是否依賴
process.env - 已檢查 webhook production URL
- 已準備 rollback 方式
如果你答不出 rollback 怎麼做,不要升 production。
12. 建議升級流程
Step 1. 先升到支援 Migration Report 的 1.x 版本
高見龍文章提到,建議先到 1.121.0 以上,使用 migration report。
Step 2. 跑 Migration Report
在 n8n 管理介面中檢查升級風險。
Critical 一定要先處理。
Step 3. 修 workflow
處理:
- Start node
- retired nodes
- 不支援資料庫
- Python Code node
- 安全預設會影響的節點
Step 4. 測 Task Runner
如果有 Code node,先測:
- JavaScript Code node
- Python Code node
- runner 是否啟動
- runner log 是否正常
Step 5. 備份
至少備份:
- database
- n8n volume
.env- encryption key
- workflow JSON
Step 6. 升級到 2.x
Docker Compose 常見方式:
docker compose pull
docker compose down
docker compose up -d正式環境建議 pin 版本,不要盲目使用 latest。
Step 7. 升級後驗收
至少測:
- 登入
- credentials
- production webhook
- schedule trigger
- Google Sheets / API / OpenAI 等關鍵節點
- Code node
- Error workflow
- 一條最重要的 production workflow
13. 升級後常見問題
Publish 按鈕不能按
可能原因:
- workflow 沒有變更
- workflow 有錯誤
- 必填設定未完成
Python runner unavailable
代表 Python Code node 需要 Task Runner。
處理方式:
- 檢查
N8N_RUNNERS_ENABLED - 檢查是否 external mode
- 檢查
n8nio/runnerscontainer - 檢查 runner 版本是否與 n8n 一致
Execute Command 不能用
2.0 安全預設可能停用。
先確認是否真的需要 shell command。能改 API 或內建 node 就不要開。
workflow 跑到一半資料不同
檢查:
- Save / Publish 是否弄混
- 是否測到草稿而不是已發布版本
- execution history 是哪個版本跑的
14. 新手如何吸收這篇升級文章
如果你現在還在學 workflow,不需要立刻全部會。
你只要先記住 5 件事:
- 2.0 是大版本,升級前要檢查
- Save 和 Publish 分離,正式上線前要 Publish
- Code node 尤其 Python 會牽涉 Task Runner
- 安全預設變嚴格,舊 workflow 可能需要調整
- 正式環境升級前一定要備份與測試
等你開始 self-host 或維護正式 workflow,再回來細讀這章。
15. 本章練習
練習 1:盤點自己的 workflow
workflow 名稱:
是否 production:
是否有 Webhook:
是否有 Code node:
是否有 Python:
是否有 Execute Command:
是否有 Local File Trigger:
是否處理檔案:
升級風險:練習 2:寫一份升級計畫
目前版本:
目標版本:
備份方式:
測試 workflow:
rollback 方法:
預計停機時間:
驗收項目:練習 3:設計發布流程
Edit -> Save -> Test -> Review -> Publish -> Production smoke test16. 參考資料
- 高見龍:n8n 2.0 新功能介紹與升級注意事項:https://kaochenlong.com/n8n-upgrade
- n8n Docs:v2.0 breaking changes:https://docs.n8n.io/2-0-breaking-changes/
- n8n Docs:v2.0 Migration Tool:https://docs.n8n.io/migration-tool-v2/
- n8n Docs:Task runners:https://docs.n8n.io/hosting/configuration/task-runners/
- n8n Docs:Save and publish:https://docs.n8n.io/workflows/publish/
- n8n Docs:Workflow history:https://docs.n8n.io/workflows/history/