跳轉到

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 一定要改
  • .n8n volume 仍然重要
  • 不要只備份 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
  • 備份資料庫
  • 備份 .n8n volume 或確保 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/