底層架構好奇者向
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 跑起來之後底下發生什麼。
.ee. 的模組屬 Enterprise,另需 license key 才能啟用。它不是黑盒子——這也是為什麼有人可以自架、有人願意付錢用 Cloud,兩條路都通。
Community vs Cloud vs Enterprise 三個版本
n8n 官方目前有三種版本,功能差別如下——這張表決定你要不要花錢:
| 版本 | Community | Cloud | Enterprise |
|---|---|---|---|
| 付費模式 | 免費,自架 | 月費(依 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 |
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 / 環境切換等功能。
主要 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。
資料庫選擇: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=***
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」,只有錯誤才留紀錄,省超多空間。
DELETE FROM execution_entity WHERE "startedAt" < NOW() - INTERVAL '30 days'; 記得清完 VACUUM FULL(會鎖表,找離峰時段做)。Queue mode:進階 scaling
當你 workflow 越來越多、有某條 workflow 一跑就 5 分鐘、其他 workflow 都被卡——你就需要 Queue mode。
Queue mode 做了什麼
-
Main process 只負責 UI 與排程
不再自己跑 workflow,改成把「要跑什麼」丟到 Redis queue。
-
Worker process 從 queue 拿工作、實際跑 workflow
可以開 N 個 worker,工作會自動分配。一個 worker 跑久沒關係,其他 worker 繼續拿新工作。
-
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
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 的正確順序
-
先停掉 n8n
docker compose stop n8n——避免 restore 過程有寫入。 -
Restore DB
Postgres:
psql n8n < backup.sql;SQLite:複製database.sqlite蓋回去。 -
確認
N8N_ENCRYPTION_KEY匹配這是 restore 最關鍵的一步——新環境的 encryption key 必須跟 backup 當時一模一樣,credentials 才解得開。改過就死。
-
開 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。步驟:
-
先在 staging 環境試跑
拉一份 production DB 到 staging,升級後跑所有主要 workflow 各一次。不要直接升 production。
-
讀 changelog 有沒有 breaking change
github.com/n8n-io/n8n/releases——特別注意 major version(0.x → 1.x 是大事)與標記BREAKING的項目。node 的 v1 → v2 也常有欄位改名。 -
Backup 一次(不管你多有信心)
上面 §backup 那組全跑一遍。這是升級前的最後一道保險。
-
停 workflow → 升級 → 開起來
Docker 用戶:
docker compose pull && docker compose up -d(如果 tag 是latest)。手動裝的:npm install -g n8n@latest。 -
檢查 UI、跑一條測試 workflow
登入、打開 workflow、手動 Execute 一次。有錯先看 log(
docker logs n8n)。
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 集中分析 |
/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 誰便宜?我們該選哪個?
Community 版有 SSO 嗎?我們的 IT 說必須要 SSO 才能上線。
n8n 支援 Kubernetes 嗎?
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。
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 版的原始碼一樣嗎?
.ee. 的模組裡,需要 license key 才會啟用。你 clone GitHub 拿到的是完整 Community 版;升 Enterprise 是拿 key、不用換 image,資料也不用搬。Queue mode 開了之後 workflow 執行順序會亂嗎?
環境變數改了要重啟 n8n 嗎?
.env 改了 EXECUTIONS_DATA_MAX_AGE,n8n 要 restart 才會生效(docker compose restart n8n)。但注意:某些設定改了會影響資料相容性(例如換 DB type、換 encryption key),改之前先 backup + 讀文件。我在家想架一個玩玩,最簡單的 self-host 方式?
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。