附錄 C

底層架構好奇者向

99% 的 n8n 使用者這輩子都不需要看這篇——你只要會拉節點、跑 workflow 就夠了。但當你哪一天想幫公司決定「要不要改用 Cloud」「要不要升 Enterprise」「n8n 掛了怎麼救」「executions 塞爆 DB 怎麼辦」——這篇給你一張地圖,看 n8n 底層在跑什麼、資料放哪、可以怎麼 scale。看完你就有跟 IT / infra 同事對話的詞彙。

誰該看這篇(多數人可以直接跳過)

如果你只是想用 Woow n8n 拉幾條 workflow 幫自己自動化,這篇你不用看。第 1 章已經給你「n8n 是什麼」的白話版;第 13 章教你 credentials;第 17 章教你錯誤處理。用起來就夠了。

這篇是寫給這幾種人的:

  • 想幫公司評估「要不要改用 n8n Cloud」的人——需要知道自架 vs Cloud 的界線在哪。
  • 想升 Enterprise 版的決策者——需要知道花錢買到的到底是什麼功能。
  • 被叫去救 n8n 的 IT/DevOps——n8n 掛了、DB 爆了、想升級——需要知道每個 process 在做什麼、資料放哪、怎麼 backup。
  • 想自己在家 self-host 一個 n8n 玩玩的技術控——需要知道 Docker 跑起來之後底下發生什麼。
觀念:n8n 是原始碼公開(source-available)的軟體,用的是 Sustainable Use License(SUL)——不是 OSI 認可的 open source,而是官方所謂 fair-code 哲學的實作:可以看原始碼、可以自架、可以內部商用,但不可以「拿去做競品 SaaS」或「移除授權標記」。檔名含 .ee. 的模組屬 Enterprise,另需 license key 才能啟用。它不是黑盒子——這也是為什麼有人可以自架、有人願意付錢用 Cloud,兩條路都通。
n8n Settings 頁面的側欄導覽,列出 Personal、Users、API 等管理項目
圖 附C-1Settings 導覽側欄:管理員/IT 進入 n8n 後主要面對的分區入口,決定你能看到哪些內部設定與版本功能。

Community vs Cloud vs Enterprise 三個版本

n8n 官方目前有三種版本,功能差別如下——這張表決定你要不要花錢:

版本CommunityCloudEnterprise
付費模式 免費,自架 月費(依 executions 數) 年費,找官方談
host 在哪 你自己伺服器 n8n 官方雲 你自己伺服器 / 自架 K8s
Core 功能(節點、Trigger、Expression) 全部有 全部有 全部有
Code node / AI Agent / Webhook 有 有 有
Templates gallery / community 節點 有 有 有
SSO(Google / Microsoft / SAML / LDAP) 沒有 Pro 起有 Google/GitHub;SAML 要 Enterprise 有
RBAC(角色權限控管) 基本 owner/member 基本 細粒度角色 + Project 隔離
Audit log(誰改了什麼) 沒有 沒有 有
Log Streaming(把 log 打到外部) 沒有 沒有 有
Version Control(workflow 版控到 Git) 沒有 沒有 有
Multi-environment(staging / production) 沒有 沒有 有
SLA 與官方 support 沒有(社群 forum) 有 有
適合誰 技術強的團隊、想省錢、能自己修 不想管 infra、10 人以下團隊 企業合規需求、大團隊、要 SSO 與 audit
提示:Cloud 有 Starter / Pro / Enterprise 三個 tier;self-host 這邊還多一個常被忽略的 Registered Community(免費註冊即可解鎖 folders、debug in editor、custom execution data 等小功能),再往上才是付費的 Business(含 SSO SAML/LDAP、環境切換、external secrets、log streaming)與 Enterprise(加 audit log、進階 scaling / governance)。以官方定價頁為準:n8n.io/pricing。

Woow n8n 走的是哪個版本

Woow 內部的 n8n(n8n.woowtech.io)是 self-hosted Community 版——放在公司自己的 server 上,用 Docker 跑,Cloudflare tunnel 對外。

  • 好處:免費、資料完全在公司內、想改什麼設定都能改、想開什麼實驗性 flag 就開。
  • 代價:沒 SSO(現在用內建帳號密碼)、沒 audit log、升級要 IT 手動做、Fault 要自己 debug。
  • 是否有 Enterprise license:依 Woow 目前規模與需求變動——想確認請直接問 IT。有 Enterprise 就會多出 SSO / RBAC / 環境切換等功能。
觀念:你在 Woow n8n 上用不到「Cloud 才有的功能」(例如:訂閱付費升 tier),因為那些是官方 Cloud 專屬。你能感受到的差別只在「是不是有裝某個 Enterprise 功能」——找 IT 或系統管理員問一下就知道。

主要 process 架構:main / worker / webhook

n8n 跑起來時,底下不是「一個大程式」——它可以拆成不同角色的 process。這是為什麼可以 scale。

Process做什麼什麼時候有
main 前端網頁 UI、REST API、workflow orchestrator(誰要跑、跑到哪)、Trigger 節點的排程 永遠都有(單一實例 = 全部靠這個)
worker 專門執行 workflow(真的跑節點的那個) Queue mode 開啟後才拆出來
webhook 專門接收 webhook 進來的 HTTP request Queue mode 可選擇拆出來

預設情況(Regular mode)下只有一個 main process,它一個人做完全部事情——UI、API、排程、執行 workflow、收 webhook。小型部署(<50 workflow、每天 <1000 executions)這樣就夠。

當你 workflow 變多、有某條 workflow 跑很久卡住整台,就該考慮切成 Queue mode(詳見下面 §Queue mode):main process 只負責 UI 與排程調度,實際跑 workflow 交給 worker,webhook 接收拆給 webhook process。三種角色各自可以 horizontal scale。

提示:Regular mode 的 main process 是單執行緒執行 workflow(Node.js 本質),一次一個。如果你有 workflow 動不動跑 5 分鐘,其他 workflow 就得排隊等——這是 Queue mode 存在的最主要原因。

資料庫選擇:SQLite / Postgres / MySQL

n8n 需要一個 DB 來存 workflow、credentials、executions。三種 DB 都支援:

DB好處缺點什麼時候用
SQLite(預設) 單一檔案、零設定、backup 只要複製檔案 單機、不能 shared、大量 write 會鎖表;不適合 Queue mode 開發、demo、小 team(<5 人、每天 <500 executions)
Postgres production 標配、效能好、可 shared、支援 Queue mode 要額外架一台或用 managed 服務 Production、Queue mode、多實例、企業部署
MySQL / MariaDB 也支援 相對少人用、社群支援度較低、官方推 Postgres 公司本來就只有 MySQL DBA 才勉強選

設定 DB 靠環境變數:

DB_TYPE=postgresdb
DB_POSTGRESDB_HOST=postgres.internal
DB_POSTGRESDB_PORT=5432
DB_POSTGRESDB_DATABASE=n8n
DB_POSTGRESDB_USER=n8n_user
DB_POSTGRESDB_PASSWORD=***
注意:SQLite 換 Postgres 不是改個環境變數就好——你要先用 n8n export:workflow 與 export:credentials 匯出、切 DB、再 import 進來。半途中間換 DB 是新手大坑,一定要走 export/import 流程。

重要資料存在哪裡

知道資料放哪,你 backup、restore、debug 才有頭緒。以下是 n8n 主要資料的位置:

資料類型存哪備份重點
Workflow 定義(節點結構、連線) DB 的 workflow_entity 表 跟著 DB 一起 backup
Credentials(帳密、OAuth token) DB 的 credentials_entity 表,加密後存 DB backup + encryption key 一定要另外備份
Executions(每次執行紀錄) DB 的 execution_entity 表(+ 每個節點的 output) DB 空間大戶;backup 前先 prune
User / 帳號 DB 的 user 表 跟著 DB backup
Encryption key(credentials 的解密金鑰) 環境變數 N8N_ENCRYPTION_KEY(Docker 是 .env) 一定要另外備份、離線存好——沒它 credentials 全解不開
Static / user data(binary 檔、log) 檔案系統,預設 ~/.n8n/ 或 Docker volume /home/node/.n8n 整個 mount volume backup
危險:N8N_ENCRYPTION_KEY 遺失 = 所有 credentials 永遠打不開。你的 workflow 還在、UI 進得去,但每個 credential 都變亂碼。這是 n8n 最容易發生的災難之一:搬機器只搬 DB、忘了帶 .env。強制紀律:encryption key 存兩份——一份在服務器 .env、一份在 password manager(或公司加密保險箱)。

Executions 資料膨脹:不管會塞爆 DB

每次 workflow 跑一次就產生一筆 execution_entity——加上每個節點的 input / output 資料,一次執行可能就是幾百 KB。跑幾個月你的 DB 會膨脹到讓你嚇到。

第 17 章提過 EXECUTIONS_DATA_MAX_AGE,這裡把整組 pruning 環境變數列出來:

環境變數用途建議值
EXECUTIONS_DATA_PRUNE 是否自動清舊 executions true(一定要開)
EXECUTIONS_DATA_MAX_AGE 保留幾小時(超過就清) 336(14 天)
EXECUTIONS_DATA_PRUNE_MAX_COUNT 最多保留幾筆 10000
EXECUTIONS_DATA_SAVE_ON_ERROR 錯誤時是否存詳細資料 all(debug 好用)
EXECUTIONS_DATA_SAVE_ON_SUCCESS 成功時是否存詳細資料 all 或 none(依 DB 空間)

還可以在單一 workflow 的 Settings 裡蓋掉全域設定——例:某條每分鐘跑的 workflow 就設「成功不存 data」,只有錯誤才留紀錄,省超多空間。

提示:如果 DB 已經很大,改設定值只影響未來;已經在的舊資料要另外清。Postgres 可以直接下 SQL:DELETE FROM execution_entity WHERE "startedAt" < NOW() - INTERVAL '30 days'; 記得清完 VACUUM FULL(會鎖表,找離峰時段做)。

Queue mode:進階 scaling

當你 workflow 越來越多、有某條 workflow 一跑就 5 分鐘、其他 workflow 都被卡——你就需要 Queue mode。

Queue mode 做了什麼

  1. Main process 只負責 UI 與排程

    不再自己跑 workflow,改成把「要跑什麼」丟到 Redis queue。

  2. Worker process 從 queue 拿工作、實際跑 workflow

    可以開 N 個 worker,工作會自動分配。一個 worker 跑久沒關係,其他 worker 繼續拿新工作。

  3. Webhook process(可選)專門收 webhook

    把 webhook 從 main 拆出來,避免 UI 慢的時候 webhook 也慢。

開啟 Queue mode 需要什麼

  • Redis(當 queue broker)——另外裝一台或用 managed。
  • Postgres——SQLite 不能 shared,多個 worker 讀不到同一份資料。
  • 環境變數:
# main
EXECUTIONS_MODE=queue
QUEUE_BULL_REDIS_HOST=redis.internal
QUEUE_BULL_REDIS_PORT=6379
DB_TYPE=postgresdb
# ... 其他 DB 設定

# worker(另一個 container / process)
EXECUTIONS_MODE=queue
QUEUE_BULL_REDIS_HOST=redis.internal
# ... 同樣的 DB 與 Redis 設定
# 啟動指令:n8n worker
注意:Queue mode 是認真 production才會走的路——多了 Redis 這個 moving part,運維複雜度直接上一階。單一 team 用(<20 人)通常 Regular mode 就夠。真要開之前先確認:main 有沒有真的常卡?有的話再改。過早開 Queue mode 是常見反模式。

Backup 與 restore 策略

n8n 的 backup 有三個層次,一起 backup 才算完整:

要備份什麼怎麼備頻率
DB(workflow / credentials / executions / user) Postgres 用 pg_dump n8n > backup.sql;SQLite 用複製 database.sqlite 檔(先 docker compose stop) 每天
.env / 環境變數(含 N8N_ENCRYPTION_KEY) 直接複製檔案;password manager 存一份 encryption key 改設定就更新;encryption key 只需備一次
Workflow JSON(版控用,可選) CLI:n8n export:workflow --all --backup --output=./workflows/;每條 workflow 一個 JSON 檔 依需求(每週 / 每天 push 到 Git)
User data 檔案(binary uploads、custom nodes) 備份整個 ~/.n8n/ 或 Docker volume 每週或有動就備

Restore 的正確順序

  1. 先停掉 n8n

    docker compose stop n8n——避免 restore 過程有寫入。

  2. Restore DB

    Postgres:psql n8n < backup.sql;SQLite:複製 database.sqlite 蓋回去。

  3. 確認 N8N_ENCRYPTION_KEY 匹配

    這是 restore 最關鍵的一步——新環境的 encryption key 必須跟 backup 當時一模一樣,credentials 才解得開。改過就死。

  4. 開 n8n、驗證

    docker compose up -d n8n,登入後打開一條 workflow 手動跑一次,確認 credentials 正常。有錯多半是 encryption key 對不上。

提示:n8n export:workflow --backup 匯出的 JSON 存在 Git 是很棒的第二保險——即使 DB 整個爛掉、encryption key 遺失,workflow 結構還在(credentials 得重設)。企業版直接有 Version Control 功能自動 push;Community 版可以 cron 每天跑一次 export + git push。

升級策略:不要在週五升級

n8n 版本迭代快(幾乎每週有小 release),升級雖然大多平順、但偶爾有 breaking change。步驟:

  1. 先在 staging 環境試跑

    拉一份 production DB 到 staging,升級後跑所有主要 workflow 各一次。不要直接升 production。

  2. 讀 changelog 有沒有 breaking change

    github.com/n8n-io/n8n/releases——特別注意 major version(0.x → 1.x 是大事)與標記 BREAKING 的項目。node 的 v1 → v2 也常有欄位改名。

  3. Backup 一次(不管你多有信心)

    上面 §backup 那組全跑一遍。這是升級前的最後一道保險。

  4. 停 workflow → 升級 → 開起來

    Docker 用戶:docker compose pull && docker compose up -d(如果 tag 是 latest)。手動裝的:npm install -g n8n@latest。

  5. 檢查 UI、跑一條測試 workflow

    登入、打開 workflow、手動 Execute 一次。有錯先看 log(docker logs n8n)。

注意:Docker 用 latest tag 每次 pull 都是拿最新版——上 production 建議釘死版本(例:n8nio/n8n:1.60.2),這樣不會在你沒注意到的時候被自動升級。要升就有意識地改 tag、升一次。

監控:怎麼知道 n8n 還活著

Production n8n 應該要有基本監控——不然半夜掛了沒人知道。幾種做法從簡單到複雜:

做法需要什麼看得到什麼
Cron 打 /healthz(進階可打 /healthz/readiness) 任何 uptime 監控(UptimeRobot、cron + curl、Woow 內部 Uptime Kuma) /healthz 只驗「process 活著」(HTTP 200);/healthz/readiness 才會檢查 DB 有連上、migration 跑完。Queue mode 的 worker 預設沒開 healthz,要 QUEUE_HEALTH_CHECK_ACTIVE=true。
看 Executions 頁 手動或 cron 開瀏覽器看 有沒有反覆錯的 workflow(第 17 章的 Executions 那節)
Error workflow 通知 每條 production workflow 都綁 Error workflow 單條 workflow 掛就 Slack/Email 通知(第 17 章教過)
Prometheus metrics(Community 也有) 環境變數 N8N_METRICS=true,不用 license 執行數、latency、queue length、event bus 等指標,接 Grafana 畫圖
Log Streaming(Business / Enterprise) 付費 plan 功能 把所有 log 打到 Loki / Datadog / Splunk 集中分析
提示:Community 版最實用的組合是「Uptime Kuma 打 /healthz + 每條 workflow 都有 Error workflow 通知 Slack」——一個接「n8n 掛了」、一個接「n8n 活但某條 workflow 掛」。這兩層蓋起來就 cover 大部分故障場景。

架構層常見卡關

不是 workflow 邏輯錯、而是 n8n 本身出問題時,最容易遇到這幾種:

症狀可能原因怎麼救
Main process 卡住、workflow 都跑不動、UI 也很慢 單一 workflow 執行太久佔滿 CPU / memory;Regular mode 單執行緒瓶頸 先看有沒有某條 workflow 死迴圈或載入太大資料;長期解方:升 CPU / memory;根治:開 Queue mode 拆 worker
DB 空間爆滿、n8n 寫入變慢或跑不動 execution_entity 沒 prune、SQLite 檔案已經幾十 GB 先設 EXECUTIONS_DATA_PRUNE=true 與 max age;手動清舊 executions;長期解:換 Postgres
升級後 workflow 打不開、node 顯示紅框 Community 節點跟新版不相容、或該 node 的欄位改名了 停在原版、升級前先看 community node 是否有相容新版;已經升了就把該 community node 更新或改用官方 node
移機後所有 credentials 全 fail(401 / decrypt error) N8N_ENCRYPTION_KEY 沒帶走或不匹配 把舊機的 encryption key 找出來(.env 或 ~/.n8n/config)貼到新機、重啟。真的遺失了:所有 credentials 只能全部重建
Queue mode worker 沒接到工作、queue 一直堆積 worker 沒連上 Redis、或 DB 連線串不對、或 worker 根本沒起來 看 worker container log;redis-cli 確認 bull:jobs:* queue 內容;確認 main 與 worker 用同一組 Redis 與 DB
Webhook 有時收不到、有時很慢 main process 也在跑 workflow 卡住;或 CF tunnel 抽風 拆 webhook process(Queue mode 選項);檢查 CF tunnel log;用 curl 直打 webhook URL 排除中間網路問題
n8n 一直重啟、log 顯示 SQLITE_BUSY SQLite 被多個程序同時寫(不支援);或磁碟壞 單機用不要開 Queue mode(會有兩個程序寫);長期換 Postgres;先檢查磁碟 SMART 狀態
Docker 升級 image 後 workflow 全消失 Docker volume 沒 mount 對,n8n 讀到全新的空 DB 檢查 docker-compose.yml:~/.n8n 或 /home/node/.n8n 一定要 mount 到持久性的 volume,不是每次啟動都新建

常見問題

Cloud vs self-host 誰便宜?我們該選哪個?
看規模。不到 10 人、每月 executions 不到幾千——Cloud Starter / Pro 划算,你不用付 IT 時間管 infra、backup 官方幫你做。超過 50 人、大量 executions(每月幾十萬)、有內部 IT 團隊——self-host 便宜很多(一台幾千元月費的 VM 就跑得動)、資料在自己手上、可以做深度客製。中間灰色地帶就看你有沒有能顧的人。Woow 內部走 self-host,因為公司本來就有 IT 團隊、也重視資料留在內部。
Community 版有 SSO 嗎?我們的 IT 說必須要 SSO 才能上線。
Community 沒有——只能用內建帳號密碼登入(可以開兩步驟驗證)。SSO(Google / SAML / LDAP)要 Enterprise 才有。這常常是 self-host 團隊被強制升 Enterprise 的主要原因——公司規定「所有內部服務必須 SSO」。買不下手的話,退而求其次可以用「n8n 前面掛一層 SSO proxy」(例:Cloudflare Access、Authelia、Keycloak + oauth2-proxy),也能達到強制 SSO 的效果,但體驗不如原生。
n8n 支援 Kubernetes 嗎?
支援。官方 Helm chart 放在 github.com/n8n-io/n8n-hosting 的 charts/n8n 目錄,並發布到 GHCR OCI registry,可直接安裝:helm install n8n oci://ghcr.io/n8n-io/n8n-helm-chart/n8n -f my-values.yaml。同個 repo 也有 Docker Compose、Caddy reverse proxy、AWS CloudFormation(ECS Fargate + RDS + ElastiCache)等各種 template。生產環境建議走 Queue mode + Postgres + Redis,chart 都幫你 template 好了。單機 Docker Compose 是入門,K8s 是正式 scale。
怎麼幫 n8n 官方貢獻?我們發現一個 bug/想寫一個 community node。
n8n 是開源的,貢獻管道齊全:(1) Bug report:github.com/n8n-io/n8n/issues,附最小可重現的 workflow JSON。(2) Feature request:官方社群論壇 community.n8n.io 用 ideas 分類發,別人投票、官方 review。(3) PR:直接 fork GitHub repo 改,看 CONTRIBUTING.md。(4) Community node:把你的整合 package 成 npm,別人可以 npm install n8n-nodes-yourthing。官方文件:docs.n8n.io/integrations/community-nodes/build/。(5) Discord:discord.gg/n8n 有官方與活躍社群,講中文的也有一區。
Community 版跟 Enterprise 版的原始碼一樣嗎?
大部分一樣,但要分清詞:fair-code 是官方講的哲學(原始碼公開、可自架、可內部商用、但禁止拿去做競品 SaaS),Sustainable Use License(SUL) 才是實際的授權文件。你可以改、可以 self-host、可以內部商用;不能移除授權標記、不能拿去掛牌賣 SaaS。Enterprise 額外功能(SSO、audit log、log streaming、version control、環境切換等)打包在檔名含 .ee. 的模組裡,需要 license key 才會啟用。你 clone GitHub 拿到的是完整 Community 版;升 Enterprise 是拿 key、不用換 image,資料也不用搬。
Queue mode 開了之後 workflow 執行順序會亂嗎?
單一 workflow 內部的節點順序不會亂——一條 workflow 進 queue 後由一個 worker 完整跑完。但多條 workflow 之間的執行順序沒有保證——A workflow 先進 queue 不代表比 B 先跑完(可能 B 比較短先結束)。如果你需要「A 一定要在 B 之前完成」,用 Sub-workflow 把它們串起來(第 19 章),不要靠時序假設。
環境變數改了要重啟 n8n 嗎?
要。n8n 只在啟動時讀環境變數(跟大部分 Node.js app 一樣)——你在 .env 改了 EXECUTIONS_DATA_MAX_AGE,n8n 要 restart 才會生效(docker compose restart n8n)。但注意:某些設定改了會影響資料相容性(例如換 DB type、換 encryption key),改之前先 backup + 讀文件。
我在家想架一個玩玩,最簡單的 self-host 方式?
Docker Compose 一鍵:官方提供 docker-compose.yml(docs.n8n.io/hosting/installation/docker/),基本就是 n8n container + persistent volume,5 分鐘跑起來。想公網訪問的話搭 Cloudflare Tunnel 或 Tailscale(不用 open port)。想更懶:Railway / Render / Fly.io 都有 n8n one-click template,2 分鐘部署完。玩過再考慮要不要接 Postgres、開 Queue mode。
還有哪些附錄可以看?
附錄 A是 n8n 設定速查——Timezone、Executions 保留策略、Log level 這些常改的設定放哪、什麼意思。附錄 B是常見錯誤速查——遇到某個錯誤訊息可以直接對照到解法。這篇附錄 C 是給你「知道 n8n 為什麼這樣運作」的背景,看完能跟 IT / DevOps 對話用;A 跟 B 則是給你每天用 n8n 遇到問題時翻的工具書。