n8n 入門實戰:Windows 使用 Docker 快速部署與環境配置教學

輕鬆上手自動化工作流程的技術指南

n8n 是一套開源的自動化工具,可以幫你串接一堆工具或平台,打造工作流程,讓重複又無聊的事情自己跑完,不用每次都自己動手做。

在 Windows 上安裝其實只是為了體驗操作環境,在本地端安裝最大的缺點就是,電腦必需一直開著,解法就是購買別人提供的服務,或自架到雲端上。

要自架 n8n,最常見且推薦的方式是使用 Docker 部署,因為環境一致性好、方便維護,你也可以用 npx 快速體驗,或是在雲端平台如 Zeabur (例如使用它的模板) 部署來獲得無限額度的自動化。

常用自架 n8n 方法

  1. Docker 部署 (推薦)
    • 先決條件: 需先安裝 Docker Desktop
    • 步驟:
      1. 下載並安裝 Docker Desktop。
      2. 開啟終端機 (Terminal/PowerShell)。
      3. 複製官方提供的 Docker n8n 指令,並在執行前修改時區為 Asia/Taipei
      4. 執行指令後,在瀏覽器訪問 http://127.0.0.1:5678 即可看到 n8n 啟動畫面。
  2. npx 快速體驗 (適合測試)
    • 先決條件: 已安裝 Node.js。
    • 步驟:
      1. 在終端機輸入 npx n8n
      2. npx會自動下載並執行 n8n,適合快速測試與學習,但資料保存不如 Docker 穩定。
  3. 雲端平台 (Zeabur/Huggingface 等)
    • 特色: 快速部署,通常有免費額度,免去自行維護伺服器的麻煩。
    • 步驟 (以 Zeabur 為例):
      1. 在 Zeabur 註冊帳號。
      2. 建立新專案,選擇 n8n 模板 (有官方或社群維護的版本)。
      3. 設定網域,完成後即可使用,適合需要無限次數自動化但不想處理環境問題的用戶。 

額外進階方法

  • 伺服器部署 (VPS/雲主機): 在自己的伺服器上部署,需要自行配置 Node.js、資料庫、反向代理 (Nginx) 等,自由度最高,適合生產環境。 

古代學 n8n 文章

【Day12】如何開始第一個 n8n 環境 : 自架與環境部屬
https://ithelp.ithome.com.tw/m/articles/10387677

AI的超自動化武裝【n8n】-安裝篇
https://www.cc.ntu.edu.tw/chinese/epaper/home/20250620_007304.html

過去要學n8n 就是在 Google 下關鍵字或到書店買買來學,現在是跟聊天機器人學。

現在應該都是直接在AI 下提示詞: 如何在 Windows 安裝 n8n

跟AI學的好處是:時間我選、節奏我掌控、學習的主題可任意轉換、再多問題它也不嫌煩!還有很多原作者沒遇到的問題,我可能會遇到。用 AI 來解決遇到的問題,雖然答然不是每次都正確,但比自己來摸索有效率很多。


文章下半部在分享 tunnel 解法.

webhook,簡單的來說就是一個網址,但由於目前一般民眾的電腦都是在路由器(網路分享器)的私人網路 (192.168.x.x),在公共網際網路的人是無法直接把資料傳回你電腦架設的伺服器監聽的服務,所以需要透過防火牆,穿牆的方式百百種,今天要分享的是使用 tunnel, 但是我覺得實際上一般你在網路上申請的n8n服務,或是去租用虛擬主機來架設n8n 都不會有穿牆(tunnel) 的必要。

tunnel 的優點

  • 安全性高:不需要在路由器上打開任何傳入端口,減少了被掃描和攻擊的風險。您的真實公網 IP 甚至不需要暴露。
  • 設定簡單:完全避開了複雜的路由器設定、DDNS 設定以及電信商 CGNAT (虛擬 IP) 的問題。
  • 適用性廣:只要您的電腦能上網,這個方案就能運作,不受網路環境限制。
  • HTTPS 支持:隧道服務提供商通常會免費提供 HTTPS 證書,確保外部到隧道伺服器這段的傳輸安全。

文章裡關於怎麼穿牆,看不懂先了解個大概就可以了,等有實際的需求再進行深度的研究。


安裝Docker Desktop

傳送門: https://www.docker.com/products/docker-desktop/

點 “Download Docker Desktop”

Windows 版的 Docker系統要求:

  • Windows 10 64 位元(版本 2004 或更高版本)或 Windows 11。
  • 啟用 BIOS 中的虛擬化支援(VT-x/AMD-V)。
  • 啟用 WSL

WSL (Windows Subsystem for Linux) 是一個在 Windows 作業系統提供的功能,允許使用者在 Windows 環境中直接執行 Linux 環境(包括大部分的命令列工具、公用程式和應用程式),而不需要傳統的虛擬機器。


如何啟用 WSL

您可以使用一個指令來快速安裝/啟用 WSL:

  1. 開啟管理者權限的 PowerShell 或命令提示字元: 在 Windows 搜尋欄輸入 PowerShell,然後右鍵選擇「以系統管理員身分執行」。
  2. 執行安裝指令: 輸入以下指令並按下 Enter:
    wsl --install
    • 此指令會啟用執行 WSL 所需的功能,並預設安裝 Linux Ubuntu 發行版。
    • 您可能會被提示重新啟動電腦。
  3. 首次啟動與設定: 重新開機後,第一次啟動新安裝的 Linux 發行版時,系統會要求您設定使用者帳號密碼

小提醒: 如果您使用的是舊版 Windows 或不想使用安裝指令,也可以透過「開啟或關閉 Windows 功能」手動啟用「適用於 Linux 的 Windows 子系統」和「虛擬機器平台」選項。


Docker Desktop 啟動後,需要登入 Docker 帳號(可使用 Google 或 GitHub 快速註冊/登入)。

測試Docker

開啟 PowerShell 或命令提示字元,執行以下指令測試:

docker run --rm hello-world

如果成功,您將會看到 Hello from Docker! 的訊息。

Docker 上有哪些映像檔(image)

使用指令查詢

在你的電腦上用 docker search 指令來找。

docker search n8n

這個指令會列出所有名稱包含 n8n 的公開映像檔。不過,它不會直接告訴你有哪些版本(Tags)。

要知道一個映像檔具體有那些版本,雖然有相關指令可以使用,但比較佔空間,所以一般還是建議直接上 Docker Hub 看最快。

在 Docker Hub 的搜尋框查詢

  • 1. 點輸入框,Ctrl + K
  • 2. 輸入 n8n
  • 3. 移到 Tag 下拉框, 就可以看到版本,
  • 4. 點 Pull 就可以下載公開映像檔

下載的 Tag 會變成可以 Run 的映像檔:

按下 Run 後的畫面

在 Windows 版 Docker Desktop 的「Images」介面點擊 Run 按鈕來啟動 n8n (映像檔通常為 n8nio/n8n) 時,會跳出一個設定視窗。為了確保 n8n 能正常運作且資料不會遺失,你需要展開 Optional settings (可選設定) 並填寫以下關鍵欄位。

以下是各欄位的詳細意義與填寫建議:


1. Container Name (容器名稱)

  • 意思: 給這個正在運作的 n8n 實例取個名字,方便你之後在 Docker 列表中找到它、停止它或查看它的 Log。
  • 建議輸入:n8n-demomy-n8n
    • 如果不填,Docker 會隨機產生一個好笑的名字(例如 boring_wozniak),這不影響功能,但不好管理。

2. Ports (通訊埠/端口)

這是最重要的一步,決定了你能不能從瀏覽器打開 n8n。

  • Local Host (本地主機端口): 這是指你 Windows 電腦 上的端口。
  • Container Port (容器內部端口): 這是 n8n 程式在 Docker 容器裡面 預設監聽的端口(n8n 預設是 5678)。
欄位名稱建議輸入意義解釋
Local Host5678代表當你在瀏覽器輸入 localhost:5678 時會連線到這裡。如果 5678 被佔用了,你可以改填 8080 或其他數字。
Container Port5678不要更改。這是 n8n 映像檔寫死的內部設定,除非你有修改環境變數。

操作結果: 設定好後,啟動容器,打開瀏覽器訪問 http://localhost:5678 就能看到 n8n 介面。


3. Volumes (掛載卷/資料保存)

⚠️ 非常重要: 如果你不設定這一步,當你關閉或重啟 Docker 容器時,你建立的所有 workflow (工作流程) 和帳號密碼都會 憑空消失

我們需要將 Windows 上的某個資料夾「對應」到容器內的存檔路徑。

  • Host Path (主機路徑): 點擊 ... 按鈕,在你的 Windows 電腦上選擇一個資料夾(例如 C:\Users\你的名字\n8n-data)。這就是你實際存放資料的地方。
  • Container Path (容器路徑): 這是 n8n 在 Linux 容器內部存放資料的位置。
欄位名稱建議輸入意義解釋
Host PathC:\path\to\n8n-data你電腦上的實體資料夾。
Container Path/home/node/.n8n請精確輸入此路徑。這是官方映像檔預設的資料儲存位置。

4. Environment Variables (環境變數)

對於「本機測試」來說,這部分可以留空。但如果你有特殊需求,可以在這裡設定。

常見的 n8n 變數範例:

  • Variable (變數名): N8N_ basic_AUTH_ACTIVE
  • Value (值):true
    • 用途:開啟帳號密碼登入驗證(若要在公開網路跑才需要,本機跑通常不需要)。
  • Variable:WEBHOOK_URL
    • 用途:如果你需要接收外部的 Webhook(例如 LINE Bot 或 Slack),通常需要配合 Tunnel 設定這個網址。

總結操作步驟

在 Docker Desktop 按下 Run 之後:

  1. Name: 輸入 n8n-local
  2. Ports: Host 填 5678,Container 填 5678
  3. Volumes:
    • Host 選擇你電腦的一個空資料夾。
    • Container 填入 /home/node/.n8n
  4. 點擊 Run

啟動後,等待幾秒鐘,打開瀏覽器輸入 http://localhost:5678 即可開始使用。


進階建議:為什麼大家推薦用 Docker Compose?

雖然用 Docker Desktop 的圖形介面 (GUI) 按一按很方便,但在管理 n8n 時,使用 docker-compose.yml 檔案是更標準的做法。因為:

  1. 設定檔化: 你不用每次 Run 都要重新手動輸入上面那些路徑和端口。
  2. 升級方便: n8n 更新很頻繁,用 Compose 只需要改一行版號就能升級,不用重新設定。

接下來你希望我直接給你一份適合 Windows 使用的 docker-compose.yml 範本,讓你複製貼上就能一鍵啟動嗎?


Docker Compose

從 Docker Desktop 的圖形介面 (GUI) 改用設定檔,會讓你之後管理 n8n 輕鬆很多。

使用 docker-compose 的好處是,你只需要保存一個文字檔,之後換電腦或重灌,只要把這個檔案和資料夾複製過去,一行指令就能還原整個工作環境。

請按照以下步驟操作:


步驟 1:建立資料夾與檔案

  1. 在你的 Windows 電腦上建立一個新資料夾(例如命名為 n8n-docker)。
  2. 進入該資料夾,建立一個純文字檔案,命名為 docker-compose.yml (注意副檔名要是 .yml)。
  3. 用記事本或程式碼編輯器 (如 VS Code) 開啟它,不用進行修改,直接貼上以下內容,並存檔:

YAML

version: '3.8'

services:
  n8n:
    image: n8nio/n8n:latest
    container_name: n8n-local
    restart: always
    ports:
      - "5678:5678"
    environment:
      - N8N_HOST=localhost
      - NODE_ENV=production
      - WEBHOOK_URL=http://localhost:5678/
      - GENERIC_TIMEZONE=Asia/Taipei  # 設定時區為台北,方便查看 Log
      - TZ=Asia/Taipei
    volumes:
      # 這行代表:在當前資料夾自動建立 n8n_data 來存資料
      # 左邊是 Windows 路徑,右邊是容器內路徑
      - ./n8n_data:/home/node/.n8n

步驟 2:啟動 n8n

  1. 開啟 Windows 的 PowerShellCMD (命令提示字元)。
  2. 使用 cd 指令進入你剛剛建立的資料夾。
    • 例如:cd C:\Users\User\Desktop\n8n-docker
  3. 輸入以下指令並按下 Enter:
docker compose up -d

指令解釋:

  • up: 啟動服務。
  • -d: Detached mode (背景執行),這樣你關掉 PowerShell 視窗,n8n 也不會停止。

下次重開機時, 你可能會遇到這個錯誤訊息:

docker compose up -d
unable to get image 'n8nio/n8n:latest': error during connect: Get "http://%2F%2F.%2Fpipe%2FdockerDesktopLinuxEngine/v1.51/images/n8nio/n8n:latest/json": open //./pipe/dockerDesktopLinuxEngine: The system cannot find the file specified.

這個錯誤訊息看起來很嚇人,但其實它的意思非常簡單,這通常是所有 Docker 新手都會遇到的狀況。

錯誤訊息 open //./pipe/dockerDesktopLinuxEngine: The system cannot find the file specified 的意思是:你的電腦找不到 Docker 的引擎。

簡單來說:你的 Docker Desktop 程式沒開,或是當機了。

啟動 Docker Desktop

  1. 請看你 Windows 的系統列,有沒有看到那隻 鯨魚圖示
    • 如果沒有:代表程式沒執行。請去「開始」選單搜尋 “Docker Desktop” 並點開它。
    • 如果但游標移過去顯示 “Stopped”:請按右鍵選擇 “Restart”。
  2. 打開後,請等待左下角的狀態列變成 綠色 (Engine running)

第二步:修正版本號 (關鍵!)

我注意到你的指令裡出現了 'n8nio/n8n:2.0.2'

⚠️ 注意:n8n 目前最新的版本還是 1.x 系列 (例如 1.75.0),還沒有 2.0.2 這個版本。

如果你堅持用 2.0.2,等一下 Docker 連線成功後,它會報另一個錯 (manifest unknown),因為找不到這個檔案。

請回到你的 docker-compose.yml 檔案,把 image 那一行改回 latest 或是穩定的 1.x 版本:

YAML

services:
  n8n:
    # 修改這一行,改回 latest
    image: n8nio/n8n:latest
    # ... 其他設定 ...

第三步:驗證並重啟

確認 Docker Desktop 已經變成綠燈後,請在 CMD 輸入以下指令測試連線:

docker version

如果跑出 Client 和 Server 的資料,代表連線通了。接著再執行一次啟動指令:

docker compose up -d

這樣應該就能正常下載並啟動了!試試看,有問題再貼上來。


這次設定的重點解析

這份設定檔幫你自動處理了以下幾件事:

  1. 資料持久化 (volumes)
    • 設定檔中寫了 - ./n8n_data:/home/node/.n8n
    • 當你啟動後,你會發現 Windows 資料夾裡多了一個 n8n_data 資料夾。你所有的 Workflow 和帳號設定都在這裡,千萬不要刪除它。
  2. 時區校正 (environment)
    • 我加入了 GENERIC_TIMEZONE=Asia/Taipei,這樣你在 n8n 裡設定「每天早上 9 點寄信」時,它會正確使用台灣時間,而不是格林威治時間 (UTC)。
  3. 自動重啟 (restart: always)
    • 如果 Docker 當機或電腦重開機,Docker Desktop 啟動後會自動把這個 n8n 容器拉起來,不用你手動再開一次。

常見後續操作

  • 如何更新 n8n 到最新版?只需要在同一個資料夾下,依序執行這兩行指令:
    docker compose pull # 下載最新版映像檔
    docker compose up -d # 重新建立容器 (資料不會不見)
  • 如何停止?
    docker compose stop

現在你已經可以在本地端 (Localhost) 順利執行 n8n 了。

但如果你未來想要串接 LINE Bot、Telegram 或 Slack 的 Webhook,你會遇到一個問題:外部的服務連不到你這台 Windows 電腦

怎麼在 n8n 裡開啟「Tunnel (隧道) 模式」,讓你不用架設伺服器也能接收外部 Webhook 訊號嗎?

沒問題,這功能在開發和測試階段(例如串接 LINE Bot 或接收 Google Forms 資料)非常實用。

開啟 Tunnel (隧道) 模式 的原理是:n8n 官方會借你一個臨時的公開網址(類似 https://adjk-123.hooks.n8n.cloud),並將傳送到這個網址的流量「打洞」轉發到你家電腦的 Docker 容器裡。

請按照以下步驟修改你的 docker-compose.yml

步驟 1:修改 docker-compose.yml

請用編輯器打開之前的檔案,並進行以下 兩個修改(我用註解標示了修改處):

YAML

version: '3.8'

services:
  n8n:
    image: n8nio/n8n:latest
    container_name: n8n-local
    restart: always
    ports:
      - "5678:5678"
    environment:
      - N8N_HOST=localhost
      - NODE_ENV=production
      # - WEBHOOK_URL=http://localhost:5678/  <-- 1. 把這行刪掉或加 # 註解掉 (因為隧道會自動產生新網址)
      - GENERIC_TIMEZONE=Asia/Taipei
      - TZ=Asia/Taipei
    
    # 2. 新增下面這行 command 指令
    command: start --tunnel

    volumes:
      - ./n8n_data:/home/node/.n8n

步驟 2:套用設定

修改存檔後,在 PowerShell (在該資料夾下) 執行以下指令來重新建立容器:

docker compose up -d

(Docker 很聰明,它會偵測到設定檔變了,自動幫你重建容器,不會刪除你的資料)

步驟 3:找出你的「公開 Webhook 網址」

這是最關鍵的一步!因為是隨機分配的網址,你需要看 Docker 的 Log (日誌) 才知道網址是什麼。

  1. 執行以下指令查看 Log:
    docker compose logs -f
    (-f 代表 follow,會持續顯示最新的訊息。按 Ctrl + C 可以退出)
  2. 仔細看輸出的文字,你會看到類似下面這段話:
    Tunnel URL: https://heavy-pumas-play.hooks.n8n.cloud
  3. 複製這個網址。這就是你目前 n8n 在網際網路上的「門牌號碼」。

執行 docker compose logs 畫面:

內容:

n8n-local  |  - N8N_RUNNERS_ENABLED -> Running n8n without task runners is deprecated. Task runners will be turned on by default in a future version. Please set `N8N_RUNNERS_ENABLED=true` to enable task runners now and avoid potential issues in the future. Learn more: https://docs.n8n.io/hosting/configuration/task-runners/

這是一個很好的觀察!這代表你有仔細在看 Log。

這個訊息不是錯誤 (Error),而是一個警告 (Warning)。簡單來說,n8n 正在升級它的核心引擎,舊的執行方式即將被淘汰,官方建議你現在就開啟「Task Runners (任務執行器)」這個新功能,讓運作更穩定、效率更好。

我們順手把它修好吧!只需要在 docker-compose.yml 裡加一行設定即可。

修正步驟

1. 修改 docker-compose.yml

請打開你的檔案,在 environment: 的區塊中加入 N8N_RUNNERS_ENABLED=true

修改後的檔案會長這樣(請注意 + 號那一行):

YAML

version: '3.8'

services:
  n8n:
    image: n8nio/n8n:latest
    container_name: n8n-local
    restart: always
    ports:
      - "5678:5678"
    environment:
      - N8N_HOST=localhost
      - NODE_ENV=production
      # - WEBHOOK_URL=http://localhost:5678/
      - GENERIC_TIMEZONE=Asia/Taipei
      - TZ=Asia/Taipei
      - N8N_RUNNERS_ENABLED=true  # <--- 新增這一行
    
    command: start --tunnel

    volumes:
      - ./n8n_data:/home/node/.n8n

2. 套用設定

儲存檔案後,一樣在 PowerShell 執行:

docker compose up -d

執行畫面:

訊息:

docker compose up -d
time="2025-12-13T14:09:46+08:00" level=warning msg="C:\\Max\\docker\\n8n-docker\\docker-compose.yml: the attribute `version` is obsolete, it will be ignored, please remove it to avoid potential confusion"
[+] Running 1/1
 ✔ Container n8n-local  Started  

這是一個完美的結果!🎉

那個 warning (警告) 完全不用擔心,它只是在告訴你 Docker 的規範變了,但不影響程式運作。

發生了什麼事?

  1. 成功啟動: Container n8n-local Started 這行字代表 n8n 已經成功重新啟動,並且套用了你剛剛加的 N8N_RUNNERS_ENABLED=true 設定。
  2. 關於那個警告:attribute 'version' is obsolete
    • 這是因為新版的 Docker Compose (V2) 已經不需要在檔案第一行寫 version: '3.8' 了。它現在很聰明,會自動識別。

(選做) 如何消除這個警告?

如果你有強迫症,想要以後看不到這個黃色警告,只要再次打開 docker-compose.yml把第一行 version: '3.8' 直接刪掉,存檔即可。

以後你的檔案開頭就會直接是 services:,像這樣:

YAML

# version: '3.8'  <-- 這一行可以刪掉
services:
  n8n:
    # ... (下面的內容都不用動)

🟢 狀態確認:一切就緒

執行 docker compose logs 畫面:

內容:

n8n-local  | Waiting for tunnel ...
n8n-local  | Tunnel URL: https://ayvz4dbqk52oyxdy4e4kp8d7.hooks.n8n.cloud/

不用擔心,你的 Log 顯示 Docker 和 Tunnel 其實都運作正常!🎉

你會收到 404 Not Found,不是網路壞了,而是 n8n「現在」找不到這個路由

這通常是新手最容易混淆的觀念:Test URL(測試網址) vs Production URL(正式網址)

請依照以下 3 個步驟檢查,一定能解決:

1. 檢查路徑名稱 (Path) 是否一致?

你在 curl 指令中打了 …/webhook-test/api001。

請回到 n8n 的 Webhook 節點設定檢查:

  • Path 欄位是填 api001 嗎?
  • 如果你的 Path 還是預設的 test,那你應該要連線到 .../webhook-test/test

2. 你按下「Listen」按鈕了嗎? (最常見原因)

  • Test URL (/webhook-test/…) 的特性:它只有在你按下 Webhook 節點下方的 “Listen for Test Event” 按鈕後,才會暫時開啟 120 秒。
    • 如果你沒按這個按鈕,直接跑 curl,n8n 會因為不知道要把資料送給誰,而直接回傳 404

✅ 解決方法:

  1. 在 n8n 介面,按下 Listen for Test Event
  2. 看到顯示 “Waiting for the webhook call…” 後。
  3. 立刻 再執行一次你的 curl 指令。

3. HTTP Method 對嗎?

  • curl 預設是送出 GET 請求。
  • 檢查你的 Webhook 節點設定,HTTP Method 是選 GET 嗎?如果是選 POST,你的 curl 指令要加上 -X POST

🎁 同場加映:消除 Log 中的警告 (優化版設定)

你的 Log 裡有一些 warning (例如 SQLite pool size, Environment access),雖然不影響運作,但為了讓你的 n8n 跑得更穩、更快,建議更新你的 docker-compose.yml

你可以用下面這份優化版設定檔取代舊的(針對你的 Log 做了修正):

YAML

services:
  n8n:
    image: n8nio/n8n:latest
    container_name: n8n-local
    restart: always
    ports:
      - "5678:5678"
    environment:
      - N8N_HOST=localhost
      - NODE_ENV=production
      - GENERIC_TIMEZONE=Asia/Taipei
      - TZ=Asia/Taipei
      # 修正 Log 警告:開啟新版 Runner
      - N8N_RUNNERS_ENABLED=true
      # 修正 Log 警告:優化 SQLite 資料庫效能
      - DB_SQLITE_POOL_SIZE=5
      # 修正 Log 警告:加強安全性設定
      - N8N_BLOCK_ENV_ACCESS_IN_NODE=false
      - N8N_GIT_NODE_DISABLE_BARE_REPOS=true
      # 修正 Log 警告:自動修復權限問題
      - N8N_ENFORCE_SETTINGS_FILE_PERMISSIONS=true
    
    command: start --tunnel

    volumes:
      - ./n8n_data:/home/node/.n8n

⚠️ 重要限制與注意事項

使用 n8n 內建的 --tunnel 雖然方便,但有幾個很大的缺點,你一定要知道:

  1. 網址會變: 每次你重啟 Docker 或是網路斷線重連,這個 URL (https://...hooks.n8n.cloud) 就會改變。
    • 後果: 如果你把網址填在 LINE Developer Console 裡,下次重開電腦後,你就要去 LINE 後台重新修改網址,非常麻煩。
  2. 速度較慢: 因為流量要繞去 n8n 的伺服器再轉回來,速度會比直接連線慢一點點。
  3. 穩定性: 這是官方提供的測試功能,有時候可能會連不上。

總結

現在,你已經具備了以下環境:

  1. Windows 本機執行 n8n (透過 Docker Compose)。
  2. 資料會自動存檔 (透過 Volumes)。
  3. 可以接收外部訊號 (透過 Tunnel)。

雖然網址會變有點麻煩,但對於剛開始學習是非常夠用的。

接下來,為了測試這個隧道是否真的通了,直接做一個簡單的「Webhook 測試」,例如:只要你在瀏覽器輸入某個網址,你的 n8n 就會收到通知,這可以讓你立刻體驗 n8n 的運作邏輯。


n8n是免費的嗎?

是的,這是免費的。

只要你是自己架設 (Self-hosted) 且用於內部或個人用途,這個 License Key 只是用來啟用「免費社群版」的功能。

前往 n8n 介面:http://localhost:5678

輸入完個人的基本資料,點 send me a free license key.

這不代表你需要付費。n8n 雖然是開源軟體,但為了統計使用者數量以及提供更新資訊,新版本在第一次安裝時,會要求你輸入 Email 來「啟用」你的 社群版 (Community Edition) 帳號。

只要你是自己架設 (Self-hosted) 且用於內部或個人用途,這個 License Key 只是用來啟用「免費社群版」的功能。


接下來請這樣做:

去收信:打開你的 Gmail ([email protected]),應該會收到一封來自 n8n 的信,標題通常是 “Your n8n license key”。

複製 Key:信件內容會有一長串類似亂碼的字串,那就是你的 License Key,請把它複製下來。

回到 docker 產生的 n8n 本機網頁,例如: http://localhost:5678

在左側選單最下方你的帳號名稱,再點擊 Settings。

進入 Settings, 預設是在 Usage and plan 分頁, 點擊 “Enter activation key” 按鈕.

你會看到一個輸入框,把剛剛複製的 Key 貼上去。

點擊 Activate (啟用),就完成 n8n 社群帳號的啟用。


我們馬上來進行你的第一個「Webhook 實測」!這會讓你非常有成就感,因為你親眼看到資料從瀏覽器「飛」進你的 n8n 裡。


步驟 1:建立 Webhook 節點

  • 打開瀏覽器,前往 n8n 介面:http://localhost:5678
  • 點擊右上角的 “Add workflow” (新增工作流程)。
  • 點擊中間的大加號 (+),在搜尋框輸入 Webhook,然後選擇 “Webhook” 節點。

步驟 2:設定 Webhook 參數

你會看到一個設定面板跳出來,請確認以下設定:

  • HTTP Method: 選擇 GET (這樣我們直接用瀏覽器就能觸發)。
  • Path: 輸入 test (這會是網址的結尾)。
  • Authentication: 保持 None

關鍵步驟: 請把目光移到面板下方,你會看到兩個網址:

  • Test URL: 用於開發測試,資料會直接顯示在編輯器裡。
  • Production URL: 用於正式上線。

因為我們現在要測試,請點擊 Test URL 旁邊的網址,把它 複製 下來。

網址長得應該會像這樣:

https://heavy-pumas-play.hooks.n8n.cloud/webhook-test/test

步驟 3:開始監聽訊號

回到 n8n 介面,點擊該節點下方的 “Listen for Test Event” (監聽測試事件) 按鈕。

這時候,你會看到介面顯示 Waiting for the webhook call... (正在等待呼叫…)。現在 n8n 正在屏息以待,隨時準備捕捉訊號。

步驟 4:發射訊號!

  1. 開啟瀏覽器的一個 新分頁
  2. 在網址列貼上你剛剛複製的 Test URL
  3. 為了讓測試更有趣,我們在網址後面加一點參數,請把網址改成這樣:https://你的隧道網址/webhook-test/test?name=IronMan&msg=Hello(注意:問號 ? 後面就是我們要傳送的資料)
  4. 按下 Enter

實際測試, 是回傳 404, 空白內容

找到原因了!這是一個非常合理的狀況,原因在於我們剛剛做了一次 重啟 (Restart)

兇手是:Tunnel URL 改變了

你剛剛為了修改 docker-compose.yml 執行了 docker compose up -d 重啟容器。

請記住 n8n 隧道模式的一個鐵律:

每次重啟 Docker,n8n 都會重新產生一個「全新的」隨機網址。

你現在用的這個 https://ayvz4dbqk... 已經是上一次啟動時的舊網址了,所以才會得到 404(找不到路)。


✅ 解決步驟

步驟 1:找出新的網址

在你的命令提示字元 (CMD) 輸入以下指令查看最新的 Log:

docker compose logs -f

如果看到這個畫面

找不到 Tunnel URL, 是因為,你的 Log 還沒跑完,docker compose up -d 重啟容器時,因為開啟 Tunnel (隧道) 需要跟 n8n 官方伺服器連線,這通常需要 10~20 秒 的時間。

等20 秒後就可以看到正常的 log

請往下滑,找到最新的那一段,尋找:

Tunnel URL: https://xxxx-xxxx-xxxx.hooks.n8n.cloud/

這串亂碼肯定跟原本的不一樣, 結果, 重開機之後, tunnel url 還是同一組, 也還是顯示 404 且無法連線。

1. 關鍵診斷:檢查n8n的系統資源使用狀態

最常見造成 n8n 執行不穩定的原因是:記憶體不足 (OOM – Out of Memory)。

n8n 是一個 Node.js 應用程式,加上開啟 Tunnel 需要額外資源,如果 Docker 分配的記憶體不夠,它就會在啟動完成瞬間被系統殺掉(Killed)。

觀察即時資源使用率

在您的 ocker-compose.yml 目錄下(例如: C:\Max\docker\n8n-docker>),開啟一個新的 CMD 視窗,輸入:

docker stats

觀察 n8n-localMEM USAGE / LIMIT。如果使用率飆高接近 100% 然後容器重啟,那就確認是記憶體問題。

既然內建 Tunnel 會導致不穩且消耗資源,建議關閉它,改用 Cloudflare Tunnel 或單純用 localhost 開發。

長治久安的替代方案 (強烈建議)

因為 n8n 官方的 Tunnel 非常不穩,如果您發現它常常斷線,請不要浪費時間修復它,直接改用以下替代方案,這是所有 n8n 進階使用者的標準做法:

方案穩定性難度費用推薦情境
Cloudflare Tunnel⭐⭐⭐⭐⭐免費首選。最穩定,無需開防火牆 Port,支援 HTTPS。
ngrok⭐⭐⭐⭐免費/付費快速測試用。免費版網址會變,有流量限制。
Tailscale Funnel⭐⭐⭐⭐免費如果你已經在用 Tailscale VPN。
VPS + Domain⭐⭐⭐⭐⭐付費生產環境標準做法 (Docker Compose + Caddy/Traefik)。

改用 Cloudflare Tunnel 的快速做法

如果你有自己的網域(Domain),使用 Cloudflare Tunnel 是最完美的解法:

  1. 開啟您的 docker-compose.yml 檔案。
  2. 在 n8n 的環境變數設定 WEBHOOK_URL=https://n8n.yourdomain.com
  3. 找到 command: 部分,移除 --tunnel 參數。
  4. 在同一台機器安裝 cloudflared,設定將 n8n.yourdomain.com 轉發到 localhost:5678

這是一個非常棒的決定。Cloudflare Tunnel (前身為 Argo Tunnel) 是目前的黃金標準,它不僅免費、穩定,而且不需要你在路由器上打開任何 Port,非常安全。

前提條件:

  1. 你有一個網域 (Domain)(例如 max-studio.com)。
  2. 你的網域 DNS 是託管在 Cloudflare 上(免費版帳號即可)。

以下是整合到你現有 Docker Compose 的完整步驟:


第一步:取得 Cloudflare Tunnel Token

登入 Cloudflare Zero Trust Dashboard

目前是有 free plan, plan 名稱: Zero Trust Free, 但需要綁信用卡, 綁好的畫面如下:

在左側選單點擊 Networks > Connectors。點擊 Create a tunnel

目前提供二種, 選擇左邊建議值: Cloudflared 就可以了.

取個名字(例如 n8n-home),點擊 Save tunnel。

在 “Install connector” 頁面,選擇 Docker。你會看到一串指令,網頁有提供點小圖一鍵複製到剪貼簿.

指令長這樣:docker run ... cloudflare/cloudflared:latest tunnel --no-autoupdate run --token eyJhIjoi...

複製好之後, 到 Windows 的提示字元視窗裡執行, 就可以了.

這裡的參數的 token 後接的一串字, 之後要查詢的話, 點擊 tunnel 的 item, 再點 configure, 就可以看到了.

選擇 subdomain + domain name, 還有 local docker 的 port 即可 complete setup.


第二步:修改 docker-compose.yml

請編輯你 C:\Max\docker\n8n-docker 目錄下的 docker-compose.yml 檔案。我們需要做兩件事:

  1. 加入 cloudflared 服務。
  2. 修改 n8n 服務設定(移除舊 tunnel,設定新網址)。

請參考以下範例進行修改(注意中文註解處):

YAML

services:
  # 這是你原本的 n8n 服務
  n8n-local:  # 你的 Log 顯示你的服務名稱叫 n8n-local
    image: docker.n8n.io/n8nio/n8n
    restart: always
    ports:
      - "5678:5678"
    environment:
      - N8N_HOST=n8n.yourdomain.com  # 改成你的網域
      - N8N_PORT=5678
      - N8N_PROTOCOL=https
      - WEBHOOK_URL=https://n8n.yourdomain.com/  # 重要:這是 Cloudflare 網址
      # - GENERIC_TIMEZONE=Asia/Taipei
    volumes:
      - ./.n8n:/home/node/.n8n
    # command: start --tunnel  <-- 重要:請務必刪除或註解掉這行!不要再用內建 Tunnel 了

  # 這是要新增的 Cloudflare Tunnel 服務
  tunnel:
    image: cloudflare/cloudflared:latest
    restart: always
    command: tunnel run
    environment:
      - TUNNEL_TOKEN=<請貼上剛剛複製的超長 Token>

修改重點:

  1. 移除 n8n 的 --tunnel 啟動參數。
  2. 新增 WEBHOOK_URL 環境變數,填入你即將設定的網址(例如 https://n8n.max-studio.com)。
  3. 貼上 Token 到 TUNNEL_TOKEN

第三步:啟動並設定路由

  1. 重啟 Docker:在 CMD 中執行:
    docker compose up -d --force-recreate
  2. 設定 Cloudflare 路由 (Public Hostname):回到剛剛的 Cloudflare Zero Trust 網頁,點擊 Next 進入 “Public Hostnames” 設定頁:
    • Subdomain: 輸入你想要的名稱 (例如 n8n)。
    • Domain: 選擇你的網域。
    • Path: 留空。
    • Service:
      • Type: HTTP
      • URL: n8n-local:5678
      • (解釋:這裡填 n8n-local 是因為在 Docker Compose 內部,服務名稱就是主機名稱。如果你的服務名不是 n8n-local,請改成你的 yaml 裡的名稱)
  3. 點擊 Save tunnel

第四步:見證奇蹟

現在,打開瀏覽器輸入 https://n8n.你的網域.com

你會發現:

  1. 速度極快(因為走 Cloudflare 全球節點)。
  2. 非常穩定(不會再有 Crash Loop)。
  3. 有免費的 SSL 鎖頭(HTTPS)。

除錯小技巧:

雖然 cloudflare 網頁上的範例是寫 localhost, 但輸入 localhost 會造成 502 error,

這裡的值是要寫 n8n-local

設定欄位正確值說明
Service TypeHTTP請勿選 HTTPS,容器內部通常只跑 HTTP
URLn8n-local:5678關鍵! 不能寫 localhost:5678

請複製並執行這行指令,它會停止所有服務並強制移除那些佔用資源的「孤兒容器」:

docker compose down --remove-orphans

說明: –remove-orphans 是關鍵,它會把 Log 中警告的那個 Found orphan containers ([n8n-local]) 清除掉,釋放 5678 端口。

清除完畢後,再次執行啟動指令:

docker compose up -d

見證奇蹟

最後取得回傳值: {“message”:”Workflow was started”}


下一步挑戰

既然資料已經進來了,通常下一步就是「把資料送出去」或「做點處理」。

將資料自動寫入 Google Sheets 是自動化最常見的應用場景之一。

不過我要先給你一個心理建設:Google 的安全性比較高,所以設定「憑證 (Credential)」的步驟會稍微繁瑣一點點(大約需要 5-10 分鐘)。但只要設定這一次,以後你串接 Gmail、Drive 都可以通用。

為了讓你的 Docker 環境(網址會變)也能穩定運作,我強烈建議使用 「Service Account (服務帳號)」 的方式,這樣就不用擔心隧道網址變動導致連線失效。

請跟著我一步步做:


第一階段:Google 雲端設定 (只需做一次)

我們需要去 Google Cloud 申請一個「機器人帳號」來幫你讀寫試算表。

  1. 建立專案
    • 前往 Google Cloud Console
    • 左上角選擇專案 -> New Project (新增專案) -> 取名為 n8n-automation -> Create。
  2. 開啟 API 功能
    • 左側選單點擊 APIs & Services -> Library
    • 搜尋 Google Sheets API -> 點擊 Enable (啟用)
  3. 建立機器人 (Service Account)
    • 左側選單點擊 Credentials (憑證)
    • 點擊上方 + CREATE CREDENTIALS -> 選擇 Service Account
    • Service account name 隨便填 (例如 n8n-bot) -> Done。
  4. 取得鑰匙 (Key)
    • 在列表點擊剛剛建立好的那個帳號 (像是一個 Email 地址)。
    • 上方標籤頁選 Keys -> Add Key -> Create new key -> JSON -> Create。
    • 電腦會自動下載一個 .json 檔案,請保管好它,這就是你的鑰匙。

第二階段:準備試算表

  1. 打開 Google Sheets,建立一個新試算表。
  2. 設定標題列 (很重要)
    • A1 儲存格輸入 name
    • 在 B1 儲存格輸入 msg(因為 n8n 會認第一列當作欄位名稱)
  3. 把試算表「分享」給機器人
    • 打開剛剛下載的 JSON 檔案 (用記事本),找到 client_email 那一行,複製那個看起來很長的 Email。
    • 回到試算表,點右上角 「共用 (Share)」,把那個 Email 貼上去,權限設為 「編輯者」 -> 傳送。

第三階段:n8n 設定 (最後一步!)

  1. 新增節點
    • 在 n8n 裡,點擊 Webhook 節點右邊的 +
    • 搜尋 Google Sheets 並點擊。
  2. 設定憑證 (Credential)
    • 在節點設定中,找到 Credential to connect with -> 選擇 Create New
    • Credential Type 請選擇 「Google Service Account」 (這對 Docker 用戶最友善)。
    • 打開你剛剛下載的 JSON 檔,把裡面的 Service Account EmailPrivate Key 複製貼上到對應欄位 -> Save。
  3. 設定寫入動作
    • Resource: Document
    • Operation: Append (新增一行)
    • Document:
      • 可以用 From URL 模式,直接把你的試算表網址貼上去。
      • 或者選 From List 去搜尋你的檔案。
    • Sheet Name: 輸入工作表名稱 (通常是 工作表1Sheet1)。
  4. 對應資料 (Mapping)
    • 這時候你會看到下方有 Columns 的選項。
    • Data Mode 改為 Auto-Map Input Data to Columns (自動對應)。
    • (關鍵) 回到 Webhook 節點,確認你剛剛測試的資料 (namemsg) 還在。
    • 如果欄位名稱 (name, msg) 跟你的試算表標題一模一樣,它就會自動對應進去!

測試時刻

  1. 點擊 Google Sheets 節點右上角的 Execute Node (執行節點)。
  2. 如果顯示綠色勾勾,趕快切換到你的 Google 試算表。
  3. 你應該會看到 IronManHello 被寫進去了!

(如果卡在 Google Cloud 那邊設定太複雜,也可以告訴我,我們改用比較簡單的「寫入本地 CSV 檔案」來練習,不用申請任何帳號。)

Facebook網友回應

您可能也會感興趣的文章...

用 AI 幫苦累蛙圓體補缺字「搐」

電腦相關應用

示範用 antigravity, 修改github 上的專案, 幫苦累蛙圓體補缺字「搐」, 網友的許願網址:https://github.com/max32002/kur […]

Read More

筆畫交叉的判斷

電腦相關應用

「筆畫」是指漢字書寫時,不間斷地一次連續寫成的一條線條。筆畫是漢字的最小構成單位。 Max 要來挑戰的是判斷某一個交叉點,是二筆畫,還是同一筆畫。同一筆和不同筆,在之後文 […]

Read More

新版本的Windows 11 檔案總管 (Modernized File Explorer Home)

電腦相關應用

MS 的官方部落格公佈下一版的 Windows 11 檔案總管,點到 “Home” 的操作起來感覺像是結合了瀏覽器: Announcing Win […]

Read More

發佈留言

發佈留言必須填寫的電子郵件地址不會公開。 必填欄位標示為 *