n8n 2.38.5 升級怎麼做?先處理安全修補,再隔離測 2.39.1
n8n 的版本號跑得快,舊文章很容易在幾週後把 beta 寫成 stable。這篇原本整理 2.23 到 2.30.4 的差異,現在依 2026 年 9 月 10 日查到的 npm dist-tags、官方 release notes 與安全公告 更新到 2.38.5 stable/latest,並把 2.39.1 留在預覽路徑。
先講升級結論:正式環境先固定 n8n 2.38.5 做測試和回歸;2.39.1 的 npm dist-tag 仍在 beta/next,應放在隔離環境。 2.37.7 與 2.38.2 仍是重要的官方安全修補基線;如果你使用 Queue Mode、外部儲存、MCP、AI Agent 或 OAuth credential,所有相關服務要一起固定版本,再用實際 workflow 驗證。
先用 dist-tags 判斷該裝哪個版本
不要只看 GitHub release 列表最上方,也不要把文章日期當成目前版本。先從 npm registry 讀取 n8n 的 dist-tags:
npm view n8n dist-tags --json本次在 2026 年 9 月 10 日查到的狀態如下:
| dist-tag | 版本 | 這次的用途 |
|---|---|---|
latest | 2.38.5 | npm 預設安裝與一般升級基準 |
stable | 2.38.5 | n8n 標示的穩定頻道 |
beta | 2.39.1 | 隔離環境測試下一批功能與修正 |
next | 2.39.1 | 提前測試頻道 |
rc | 2.38.5 | 目前 registry 指向的候選頻道版本,仍應以明確版本安裝 |
dist-tag 是頻道指標,不是「數字越大就越適合 production」的排序。更新 Docker image 或 package 時不要把 latest、beta、next 混在同一條部署流程:
# 穩定頻道:先固定明確版本
# 預覽頻道:只在隔離環境測試固定明確版本比使用 dist-tag 更容易回溯;如果團隊選擇使用 tag,也應把執行日期、實際解析出的版本和 lockfile 一起記錄。
2.38.5 與 2.39.1 的頻道邊界要分開看
n8n 的 npm dist-tags 顯示,2.38.5 同時位於 latest、stable 與 rc;2.39.1 位於 beta 與 next。tag 是發布頻道指標,不代表兩個版本可以共用同一套 production 回滾假設:
| 版本 | 官方 release 狀態與重點 | 升級時要測什麼 |
|---|---|---|
| 2.38.5 | latest/stable/rc;正式環境的目前穩定基準,release note 修正 job key 遺失後仍回報原始錯誤 | 反向代理、HTTP request、worker/webhook process、既有 OAuth 與一般 workflow |
| 2.39.1 | beta/next;隔離環境的預覽基準,release note 修正啟動時 legacy-format data-encryption key 的處理 | 除了上述回歸,也要確認預覽版 node、dynamic credential、execution trace 與 queue 拓樸相容 |
這裡要分清楚「release note 有修正」和「可以直接放進 production」。即使兩個版本出現相似的 bug fix,也不能推論所有 workflow 都沒有相容性風險;正式環境仍應先以 stable 做基準。
2.37.7/2.38.2 安全修補要先完成
2026 年 9 月 2 日,n8n 新增高嚴重度公告 GHSA-hh89-3r9w-qj3j:OAuth Dynamic Client Registration 在特定情境可能造成 persistent storage exhaustion,受影響版本低於 2.37.7 或 2.38.2,修補基線是 2.37.7 或 2.38.2。本文原本列出的 legacy expression engine 與 Instance AI workflow summary prototype pollution 也要一併維持在修補版本之上,因此 2.38.5 與 2.39.1 都高於目前列出的 2.x 安全基線。
| 問題 | 受影響範圍 | 修補版本 | 升級後要確認什麼 |
|---|---|---|---|
| legacy expression engine sandbox escape | 低於 1.123.76、2.37.7 或 2.38.2 | 1.123.76、2.37.7、2.38.2 以上 | 是否仍使用 legacy engine;patched release 的 vm engine 應為預設,並測試 expression 與權限邊界 |
| Instance AI workflow summary 的 prototype pollution | 低於 2.37.7 或 2.38.2 | 2.37.7、2.38.2 以上 | AI workflow summary、低權限帳號與不受信任輸入的行為 |
| OAuth Dynamic Client Registration 的 persistent storage exhaustion | 低於 2.37.7 或 2.38.2 | 2.37.7、2.38.2 以上 | OAuth DCR、持久化儲存用量、低權限帳號與異常請求 |
正式環境至少應升到目前 stable 的 2.38.5,或在隔離環境測試 2.39.1 後再切換。若暫時無法更新,官方列出的緩解方向包含將 expression engine 設為 vm、限制可登入與可執行 workflow 的使用者,以及移除或 unset Instance AI model 相關環境變數;這些只是降低風險的過渡措施,不能取代升級。修改環境變數後要重啟所有 main、worker、webhook 與 runner process,並檢查現有 credential 和 execution log。
從舊版升級前,先備份可以回復的狀態
跨過多個 minor 版本時,最怕的是只更新 image tag,卻沒有保存可以回復的狀態。自架 n8n 至少先記錄:
- PostgreSQL 或 SQLite 資料庫備份。
- n8n 持久化 volume 或資料夾。
N8N_ENCRYPTION_KEY,以及它的保存位置與輪替責任。- 目前 image tag、Node.js 版本、external task runner 和 community nodes。
- main、worker、webhook processor、runner 的部署清單。
如果啟用了 Queue Mode 或多個執行元件,不能只升級一個 container。先在測試環境用相同拓樸和資料副本跑一次,確認 migration、queue、credential 和 webhook 都能啟動,再安排正式切換。
Docker Compose 用固定 tag 做升級回歸
不要在正式環境直接使用 latest。先把所有 n8n 執行元件固定在同一個版本:
services: n8n-main: image: docker.n8n.io/n8nio/n8n:2.38.5
n8n-worker: image: docker.n8n.io/n8nio/n8n:2.38.5
n8n-webhook: image: docker.n8n.io/n8nio/n8n:2.38.5升級流程可以先在測試環境執行:
docker compose pulldocker compose up -ddocker compose psdocker compose logs --tail=200 n8n-main接著檢查資料庫 migration 是否完成、Editor 能否登入,以及 workflow 的 webhook URL、schedule 和 credential 連線。不要只看 container 是 Up;n8n 能啟動不代表每條 workflow 都與新的 node、execution data 和 AI 設定相容。
OAuth、AI、MCP 與 Webhook 要做針對性回歸
版本更新後,credential 不應只測「節點畫面打得開」。可以把測試分成幾組:
| 類型 | 最小驗證 |
|---|---|
| 一般 workflow | 手動執行、Schedule、失敗分支與 retry |
| Webhook | Test URL、Production URL、反向代理和認證 |
| OAuth node | 重新授權、scope、token refresh 與實際 API call |
| Domain-restricted credential | 在允許的 node 內呼叫、在不允許的 node 內拒絕,確認限制沒有被放寬 |
| AI Agent | 模型 credential、tool call、execution data、timeout |
| MCP | server trigger、tool call 完成後的保存與外部 client 讀取 |
| Queue Mode | main、worker、webhook processor、runner 的版本與任務消費狀態 |
測試資料應固定,並對照輸入、輸出筆數、欄位型別、credential 使用和 execution 狀態。你可以保留既有的 n8n 節點排錯文章作為下一層檢查,例如 Code 節點資料過濾沒有生效 或 Merge 搭配 Loop 的資料合併問題。
若是新版本才出現的錯誤,先把版本、node、workflow execution ID 和 log 一起記錄,再回查官方 release,而不是先刪除 workflow 重建。
2.39.1 要怎麼測,才不會混進正式環境
如果你需要驗證 2.39.1 的預覽修正,使用另一個測試 image 或隔離專案:
services: n8n-preview: image: docker.n8n.io/n8nio/n8n:2.39.1測試前先確認:
- 這個 container 不會連到 production database。
- webhook、OAuth callback 和 queue Redis/database 都是測試資源。
- workflow export、credential 和 encryption key 不會覆蓋正式環境。
- release notes 中的預覽功能有明確的驗證案例。
- 測試完成後留下「哪些已通過、哪些仍不能使用」的紀錄。
預覽版的價值是提早找出相容性問題,不是把正式環境變成 beta 測試機。若只是需要安全修補與 stable patch,先以 2.38.5 做最小升級,別把 2.39.1 一起帶進來。
回滾計畫要先寫,不要等 migration 失敗才想
資料庫 migration 可能讓單純降回舊 image 變得不安全,所以回滾不是只把目標 tag 改回舊版。升級前先確認 n8n 官方更新指南對目前版本的 migration 和支援方式,再決定備份還原、停機窗口和資料遺失界線。
至少要能回答:
- 哪個 tag 是目前最後一個已驗證版本?
- 失敗時是還原 database、volume、image,還是只停用一條 workflow?
- Queue Mode 的 worker 是否會繼續消費舊任務?
- webhook 第三方服務是否需要暫停或重新驗證?
升級變更的完成條件應是「測試資料、logs 和主要 workflow 都通過」,不是「Docker Compose 沒有報錯」。
結論:stable 先升,預覽另測
以 2026 年 9 月 10 日查到的 registry 狀態來看,n8n 2.38.5 位於 latest/stable/rc,2.39.1 位於 beta/next。從 2.23 或更舊版本升級時,先固定 2.38.5、備份資料、對齊所有執行元件,再針對安全公告涉及的 expression engine、Instance AI workflow summary、OAuth DCR,以及 proxy environment、dynamic credential、OAuth、Webhook、AI、MCP 和 Queue Mode 做回歸;需要提前測新功能時,另建隔離環境,不要用 production 資料庫承擔預覽版風險。
常見問題
Q: n8n 2.39.1 已經在 npm,為什麼不直接升?
A: npm 版本存在不等於它是穩定頻道。這次查核時 2.39.1 位於 beta/next,latest/stable 是 2.38.5。除非你已在隔離環境完成相容性測試,而且確實需要預覽功能,否則正式環境先以 2.38.5 做基準。
Q: n8n 升級需要逐一安裝 2.24、2.25、2.26 嗎?
A: 不要用逐版安裝取代備份和測試。跨版本的資料庫 migration、Queue Mode、外部儲存和 credential 行為,應依目前 n8n 更新指南與 release notes 評估;常見做法是先備份,再在相同拓樸的測試環境直接驗證目標版本。
Q: 2.38.5 更新後最少要測哪些 workflow?
A: 至少測一條一般 workflow、一條 Webhook、一條 Schedule、一條使用 OAuth credential 的外部整合,以及有 AI 或 MCP tool call 的流程。若使用 Queue Mode 或 proxy,還要確認 main、worker、webhook processor 與 runner 都是同一個版本,並觀察 proxy environment、dynamic credential、OAuth token refresh 和 execution trace 是否正常運作。
參考資料:
n8n GitHub Security Advisory:legacy expression engine
n8n GitHub Security Advisory:Instance AI workflow summary prototype pollution
n8n GitHub Security Advisory:OAuth DCR persistent storage exhaustion
回報錯字、失效連結,或告訴我你想看的延伸主題。