n8n 雲端與地端部署教學¶
這份筆記教你把 n8n 從「我會做 workflow」推進到「我知道要放在哪裡跑、怎麼維護、怎麼避免資料不見」。
護理流程、客服流程、報表流程、AI 摘要流程都只是案例;部署邏輯本身獨立於任何題目。
想一想¶
部署這件事,對初學者來說常常比做 workflow 更抽象。你可以先不要想雲端、地端、VPS、Docker 這些名詞,而是先問一個簡單問題:這個 n8n 是拿來練習,還是要真的長期幫我做事?如果只是練習,本機或 n8n Cloud 就夠;如果要長期跑,就要開始在意資料會不會消失、網址會不會改、Webhook 外部系統能不能打得到、壞掉時誰能修。
部署的核心不是把 n8n 跑起來,而是讓它「穩定、可回復、可維護」。很多人第一次 self-host 只看到畫面能開,就以為完成了;但正式使用還要考慮 volume、資料庫、encryption key、HTTPS、備份、更新與錯誤通知。你可以把部署想成幫 workflow 蓋房子:workflow 是屋內的設備,部署是地基、水電、門鎖和逃生路線。地基不穩,流程再漂亮也不適合正式使用。
1. 先分清楚:使用 n8n 與部署 n8n 是兩件事¶
學 n8n workflow 時,你關心的是: - Trigger 怎麼進來 - Node 怎麼串 - Expression 怎麼寫 - Credential 怎麼連 - 錯誤怎麼查
部署 n8n 時,你關心的是: - n8n 跑在哪一台機器 - 資料存在哪裡 - Workflow 與 credentials 會不會因為重開機消失 - Webhook 對外網址是否穩定 - 有沒有 HTTPS - 如何備份 - 如何升級 - 壞掉時怎麼恢復
一句話:
做 workflow 是使用者能力;部署 n8n 是系統維運能力。
2. 部署方式總覽¶
常見選項可以分成 5 種:
| 部署方式 | 適合誰 | 優點 | 缺點 |
|---|---|---|---|
| n8n Cloud | 只想學 workflow、不要管主機的人 | 最省事、有代管維護 | 成本較高、底層控制較少 |
| 本機 Docker | 學習、測試、做 demo | 快速、可重來、不污染電腦 | 不適合正式服務 |
| VPS + Docker Compose | 個人正式使用、小團隊 | 成本可控、控制權高 | 要懂主機、安全、備份 |
| 雲端 PaaS / Cloud Run | 想用雲端服務管理部署 | 可與雲端服務整合 | 設定比 Cloud 複雜 |
| Kubernetes / queue mode | 高流量、企業、多 worker | 可擴展 | 維運門檻高 |
初學順序建議: 1. 先用 n8n Cloud 或本機 Docker 學 workflow。 2. 會做 3 到 5 個 workflow 後,再學 VPS + Docker Compose。 3. 有穩定使用需求後,再補 Postgres、備份、反向代理、HTTPS。 4. workflow 量大、執行時間長、多人共用後,再學 queue mode。
3. n8n Cloud:最快開始的方法¶
n8n Cloud 是官方代管版。它適合想先專注在 workflow,而不是主機維運的人。
適合場景¶
- 你主要目標是學 workflow
- 不想管理 VPS
- 不想處理 SSL、反向代理、資料庫
- 想快速驗證一個自動化想法
- 團隊中沒有人負責維運
設定重點¶
- 建立 n8n Cloud workspace
- 設定 timezone
- 建立 credentials
- 匯入 workflow JSON
- 測試 Webhook production URL
- 設定 user / access 權限
優點¶
- 不需要自己架 Docker
- 不需要自己處理 HTTPS
- 升級簡單
- OAuth 串接通常較省事
缺點¶
- 不能像 self-host 一樣完全控制底層
- 部分環境變數、私有網路、內部服務串接會受限制
- 長期大量使用要考慮費用
4. 本機 Docker:最適合學部署的第一步¶
本機 Docker 的目的不是正式上線,而是讓你理解 n8n 需要哪些東西才能跑。
你會學到什麼¶
- container 是什麼
- port
5678是什麼 - volume 是什麼
- timezone 為什麼重要
- 重開 container 後資料如何保留
最小概念¶
n8n 需要: - 一個 n8n process - 一個存資料的地方 - 一個對外服務的 port - 一組環境變數
官方 Docker 文件示範使用 docker.n8n.io/n8nio/n8n、port 5678、volume n8n_data:/home/node/.n8n,並設定 timezone 與 task runners。
學習用指令範例¶
docker volume create n8n_data
docker run -it --rm \
--name n8n \
-p 5678:5678 \
-e GENERIC_TIMEZONE="Asia/Taipei" \
-e TZ="Asia/Taipei" \
-e N8N_ENFORCE_SETTINGS_FILE_PERMISSIONS=true \
-e N8N_RUNNERS_ENABLED=true \
-v n8n_data:/home/node/.n8n \
docker.n8n.io/n8nio/n8n
開啟:
http://localhost:5678
適合做什麼¶
- 學 node
- 匯入 JSON 範例
- 測試 Webhook
- 測試 OpenAI / Google Sheets / API 串接
- 做課程 demo
不適合做什麼¶
- 不適合多人正式共用
- 不適合處理重要資料
- 不適合直接暴露到網際網路
- 不適合沒有備份就長期使用
5. npm 安裝:知道即可,不建議新手主線使用¶
n8n 也可以用 npm 安裝。
但如果你是學部署,優先建議 Docker,因為 Docker 比較容易把環境固定住。
npm 適合誰¶
- 熟 Node.js
- 想客製 n8n 開發環境
- 不想使用 Docker
- 清楚知道自己如何管理 Node 版本、process manager、system service
新手不建議 npm 的原因¶
- Node 版本與套件環境容易混亂
- 升級與回復比較麻煩
- 正式服務仍要處理 process manager、reverse proxy、SSL、資料持久化
6. Docker Compose:正式 self-host 的基本形態¶
本機 docker run 適合學習,但正式部署建議用 Docker Compose。
原因是你會需要把 n8n、資料庫、反向代理、環境變數、volume 寫成可重複啟動的設定。
Docker Compose 解決什麼問題¶
- 讓設定可版本化
- 讓容器可以背景執行
- 讓 n8n 和資料庫放在同一組部署設定
- 方便升級、重啟、搬家
最小 Docker Compose 範例:SQLite 版¶
適合: - 個人學習 - 小型自動化 - 低風險流程
services:
n8n:
image: docker.n8n.io/n8nio/n8n:latest
restart: unless-stopped
ports:
- "5678:5678"
environment:
- GENERIC_TIMEZONE=Asia/Taipei
- TZ=Asia/Taipei
- N8N_ENFORCE_SETTINGS_FILE_PERMISSIONS=true
- N8N_RUNNERS_ENABLED=true
volumes:
- n8n_data:/home/node/.n8n
volumes:
n8n_data:
啟動:
docker compose up -d
看 log:
docker compose logs -f n8n
7. SQLite 與 Postgres 怎麼選¶
n8n 預設使用 SQLite。官方文件也說明 n8n 支援 PostgreSQL,並可用環境變數設定。
SQLite 適合¶
- 本機學習
- 單人使用
- demo
- 不重要的測試流程
- 不需要高併發
Postgres 適合¶
- 正式 self-host
- 多人使用
- workflow 數量多
- execution 記錄重要
- 之後可能上 queue mode
- 想做比較穩定的備份與維護
實務建議¶
如果你只是學習:SQLite 可以。
如果你打算長期自架:直接用 Postgres,少走一次搬遷。
8. Docker Compose + Postgres 範例¶
這是比較接近正式使用的基本配置。
services:
postgres:
image: postgres:16
restart: unless-stopped
environment:
- POSTGRES_USER=n8n
- POSTGRES_PASSWORD=change_this_password
- POSTGRES_DB=n8n
volumes:
- postgres_data:/var/lib/postgresql/data
n8n:
image: docker.n8n.io/n8nio/n8n:latest
restart: unless-stopped
ports:
- "5678:5678"
environment:
- GENERIC_TIMEZONE=Asia/Taipei
- TZ=Asia/Taipei
- N8N_ENFORCE_SETTINGS_FILE_PERMISSIONS=true
- N8N_RUNNERS_ENABLED=true
- DB_TYPE=postgresdb
- DB_POSTGRESDB_HOST=postgres
- DB_POSTGRESDB_PORT=5432
- DB_POSTGRESDB_DATABASE=n8n
- DB_POSTGRESDB_USER=n8n
- DB_POSTGRESDB_PASSWORD=change_this_password
- DB_POSTGRESDB_SCHEMA=public
volumes:
- n8n_data:/home/node/.n8n
depends_on:
- postgres
volumes:
n8n_data:
postgres_data:
重要提醒¶
change_this_password一定要改.n8nvolume 仍然重要- 不要只備份 Postgres,還要備份 n8n volume 或固定
N8N_ENCRYPTION_KEY
9. 正式公開到網路:Domain、Reverse Proxy、HTTPS¶
如果你要讓外部服務呼叫 n8n Webhook,就需要穩定網址。
正式網址應該長這樣:
https://n8n.example.com
不應該長這樣:
http://12.34.56.78:5678
為什麼需要 reverse proxy¶
Reverse proxy 負責:
- 對外提供 HTTPS
- 把 https://n8n.example.com 導到內部 n8n:5678
- 管理 SSL certificate
- 可搭配 basic auth、IP allowlist、rate limit
常見選擇: - Caddy - Nginx - Traefik - Cloudflare Tunnel
正式環境常見設定¶
environment:
- N8N_HOST=n8n.example.com
- N8N_PROTOCOL=https
- N8N_EDITOR_BASE_URL=https://n8n.example.com
- WEBHOOK_URL=https://n8n.example.com/
- N8N_PROXY_HOPS=1
常見錯誤¶
- 沒設定
WEBHOOK_URL,導致 webhook 顯示 localhost - DNS 還沒指到 VPS
- 防火牆沒開 80 / 443
- 反向代理有 HTTPS,但 n8n 還以為自己是 HTTP
- 忘記 production webhook 只有 workflow 啟用後才有效
10. VPS 自架的標準架構¶
標準小型 production 架構:
User / External App
-> DNS
-> VPS public IP
-> Reverse Proxy with HTTPS
-> n8n container
-> Postgres container
-> Docker volumes
VPS 需要準備¶
- Ubuntu LTS 或熟悉的 Linux
- Docker
- Docker Compose
- 一個 domain 或 subdomain
- 防火牆
- SSH key
- 備份策略
建議主機規格¶
學習與小型個人使用: - 1 vCPU - 1 到 2 GB RAM - 20 GB disk
小團隊與多 workflow: - 2 vCPU 以上 - 4 GB RAM 以上 - Postgres 獨立 volume - 定期備份
11. Caddy 反向代理概念範例¶
Caddy 的優點是 HTTPS 自動化比較簡單。官方 DigitalOcean guide 也使用 Caddy 搭配 Docker Compose。
概念範例:
n8n.example.com {
reverse_proxy n8n:5678
}
實務檢查¶
- DNS
A record指向 VPS IP - VPS 防火牆允許 80 / 443
- Caddy container 能連到 n8n container
- n8n 設定
WEBHOOK_URL=https://n8n.example.com/ - 瀏覽器開啟時 certificate 正常
12. 環境變數是部署的核心¶
環境變數不是裝飾,它決定 n8n 怎麼運作。
| 變數 | 用途 |
|---|---|
GENERIC_TIMEZONE |
workflow schedule 使用的時區 |
TZ |
container 系統時區 |
N8N_ENCRYPTION_KEY |
credentials 加密用 key |
N8N_EDITOR_BASE_URL |
editor 對外 URL |
WEBHOOK_URL |
webhook 對外 URL |
DB_TYPE |
使用 SQLite 或 Postgres |
DB_POSTGRESDB_HOST |
Postgres host |
N8N_RUNNERS_ENABLED |
啟用 task runners |
N8N_PROXY_HOPS |
reverse proxy 層數 |
如果你只先記三個:
- WEBHOOK_URL
- N8N_ENCRYPTION_KEY
- DB_TYPE
13. Credentials 與 Encryption Key¶
n8n 的 credentials 是敏感資料,例如: - API key - OAuth token - database password - OpenAI key - Google credentials
N8N_ENCRYPTION_KEY 會影響 credentials 的解密。正式環境建議自己設定固定 key,並安全保存。
範例:
environment:
- N8N_ENCRYPTION_KEY=replace_with_a_long_random_secret
14. 備份策略¶
備份要分兩層:
1. n8n application data¶
包含:
- /home/node/.n8n
- encryption key
- logs 或部分 instance data
2. database¶
如果用 SQLite:
- SQLite database 在 .n8n volume 中
如果用 Postgres:
- 備份 Postgres database
- 同時保留 .n8n volume 或固定 encryption key
最小備份原則¶
- 每次升級前備份
- 每週固定備份
- 備份要能還原,不是只產生檔案
- 至少測試過一次 restore
15. 更新與升級¶
Docker Compose 常見更新流程:
docker compose pull
docker compose down
docker compose up -d
升級前檢查¶
- 讀 release notes
- 備份資料庫
- 備份
.n8nvolume 或確保 encryption key 固定 - 匯出重要 workflow JSON
- 確認是否有 breaking changes
正式環境建議 pin 版本,例如:
image: docker.n8n.io/n8nio/n8n:1.x.x
如果你要從 n8n 1.x 升級到 2.x,或是正式環境需要建立升級流程,請另外讀 12 n8n 2.0 升級與維護教學。那一章會處理 Save / Publish、Task Runner、Migration Report、breaking changes、Python Code node、環境變數與升級驗收。
16. Queue Mode:什麼時候才需要¶
Queue mode 是 n8n 的擴展模式。官方文件說明它用 main instance 接收 workflow / trigger,再把 execution ID 交給 Redis,由 worker 執行。
架構¶
Main n8n
-> Redis queue
-> Worker 1
-> Worker 2
-> Postgres
需要 queue mode 的情境¶
- workflow 很多
- 同時執行量高
- 有長時間任務
- Webhook 流量高
- 希望 worker 可以水平擴展
不需要 queue mode 的情境¶
- 你還在學習
- 單人使用
- workflow 很少
- 每天只跑少量排程
- 問題不是併發,而是 workflow 本身寫太慢
Queue mode 重要條件¶
- 需要 Redis
- 需要 Postgres
- main / worker 要共用 encryption key
- main / worker 版本要一致
- binary data storage 要特別注意;官方文件提到 queue mode 不支援 filesystem binary data storage,若要持久化 binary data 可用 S3 external storage
17. Local、Cloud、Self-host 怎麼選¶
如果你的目標是學習¶
選: - n8n Cloud - 或本機 Docker
不要一開始就卡在 VPS、安全、SSL、Postgres。
如果你的目標是做個人長期自動化¶
選: - VPS + Docker Compose - Postgres - Caddy / Nginx - 固定 domain - 每週備份
如果你的目標是公司或團隊使用¶
選: - n8n Cloud - 或正式 self-host - 明確權限、備份、稽核、資料政策 - 不要用個人電腦當正式服務
如果你的目標是內網整合¶
選: - self-host - 放在內網或 VPC - 控制 inbound / outbound - 必要時只開 VPN,不公開到 internet
18. 部署前檢查表¶
基本可用¶
- n8n 可以開啟
- 可以建立 workflow
- 可以執行 Manual Trigger
- 可以新增 credentials
- 可以重啟後資料不消失
Webhook 可用¶
- Test URL 可測
- Production URL 可測
- workflow 啟用後 production webhook 可用
- 外部服務 callback 正常
WEBHOOK_URL是公開 HTTPS 網址
安全¶
- 使用 HTTPS
- 管理員密碼強度足夠
- credentials 沒寫在 workflow 明文
.env沒上傳到公開 repo- 沒把
5678直接裸露給公網
維運¶
- 有備份
- 有還原測試
- 有升級流程
- 有 log 查詢方式
- 有錯誤通知 workflow
19. 常見部署錯誤¶
1. 沒有 volume¶
container 刪掉後 workflow、credentials、設定可能消失。
修正:掛載 /home/node/.n8n。
2. 沒有固定 encryption key¶
搬家或重建後 credentials 可能解不開。
修正:正式環境設定 N8N_ENCRYPTION_KEY,並安全保存。
3. webhook URL 是 localhost¶
外部服務無法 callback。
修正:設定 WEBHOOK_URL=https://n8n.example.com/。
4. 直接公開 :5678¶
安全與憑證管理風險上升。
修正:用 reverse proxy + HTTPS。
5. 沒備份就升級¶
升級失敗時難以回復。
修正:升級前備份 database、volume、workflow JSON。
20. 一個最小正式部署藍圖¶
VPS
Docker Compose
Caddy
n8n
Postgres
Volumes
n8n_data
postgres_data
Domain
n8n.example.com
Backup
weekly database dump
encrypted copy of env/secrets
最小 .env 概念¶
N8N_DOMAIN=n8n.example.com
GENERIC_TIMEZONE=Asia/Taipei
TZ=Asia/Taipei
N8N_ENCRYPTION_KEY=replace_with_long_random_secret
POSTGRES_USER=n8n
POSTGRES_PASSWORD=replace_with_strong_password
POSTGRES_DB=n8n
最小驗收標準¶
https://n8n.example.com可以開- 重新啟動 VPS 後 n8n 自動起來
- workflow 沒消失
- credentials 沒失效
- production webhook URL 是 HTTPS domain
- 備份可還原
21. 練習題¶
練習 1:本機 Docker¶
目標:用 Docker 跑起 n8n,並確認資料能保留。
完成標準:
- 建立 n8n_data volume
- 開啟 http://localhost:5678
- 建立一個測試 workflow
- 停止再啟動後 workflow 還在
練習 2:Docker Compose¶
目標:把 docker run 改成 docker-compose.yaml。
完成標準:
- docker compose up -d 成功
- docker compose logs -f n8n 看得到 log
- volume 正常
練習 3:Postgres¶
目標:讓 n8n 使用 Postgres。
完成標準:
- Compose 中有 postgres service
- n8n 設定 DB_TYPE=postgresdb
- 刪除並重建 n8n container 後 workflow 仍存在
練習 4:Webhook URL¶
目標:理解 WEBHOOK_URL 的作用。
完成標準: - 可以說明 test webhook 與 production webhook 差異 - 可以說明為何正式環境不能出現 localhost webhook - 可以指出 reverse proxy 後需要設定的 URL 變數
22. 參考文件¶
- n8n Cloud overview: https://docs.n8n.io/manage-cloud/overview/
- n8n self-hosting overview: https://docs.n8n.io/hosting/
- n8n Docker installation: https://docs.n8n.io/hosting/installation/docker/
- n8n deployment environment variables: https://docs.n8n.io/hosting/configuration/environment-variables/deployment/
- n8n endpoints environment variables: https://docs.n8n.io/hosting/configuration/environment-variables/endpoints/
- n8n database environment variables: https://docs.n8n.io/hosting/configuration/environment-variables/database/
- n8n queue mode: https://docs.n8n.io/hosting/scaling/queue-mode/