
難度
初階
所需時間
約 20–40 分鐘
你需要準備
Windows 10/11 · Docker Desktop · Windows PowerShell · 網頁瀏覽器 · n8n Community Edition
開始之前
- 可在 Windows 安裝及啟動 Docker Desktop,並已開啟所需虛擬化/WSL 2 支援
- 至少預留數 GB 磁碟空間,並可下載 Docker 映像
- 明白本教學只建立本機學習環境,不是可直接公開上網的正式生產部署
- 開始前不要把真實客戶資料、API key 或公司憑證放入測試 workflow
n8n 是一個以節點連接服務、API 和資料處理步驟的工作流程自動化平台。本地部署的吸引力,是可以在自己的電腦控制運行環境、資料保存位置和更新時間;但「成功開到 localhost:5678」只代表容器開始運行,並不等於資料已持久化、服務已安全或可以公開給團隊使用。
這篇教學以 Windows 和 Docker Desktop 為主線,先跟着畫面理解安裝和啟動,再按現行 n8n 與 Docker 官方文件補回 named volume、香港時區、設定檔權限、task runners、本機連接埠、更新和備份。完成後,你會有一個可重建的本機學習環境,而不是一個只在今天可用的臨時容器。
一、本地部署值得做甚麼,也不會自動解決甚麼

資料控制:workflow、憑證和執行紀錄可以留在你管理的 Docker volume,而不是由託管平台保存。不過,workflow 連接 Gmail、CRM、LLM 或付款服務時,資料仍會傳給那些第三方;本地部署不等於資料永遠不離開電腦。
成本與彈性:你不按託管平台的執行次數付費,也可自行選版本和整合方式;代價是電腦必須保持運行,你要負責更新、備份、安全、磁碟容量和故障處理。筆記型電腦睡眠、Docker Desktop 關閉或 Windows 更新重啟,都會令排程暫停。
適合:個人學習、workflow 原型、開發測試和只在本機使用的流程。
不應直接照搬:公司多人協作、關鍵排程、公開 webhook、客戶資料或需要 24×7 可用性的正式服務。
二、安裝前檢查 Windows 和 Docker Desktop

- 確認 Windows 版本符合 Docker Desktop 當時的系統要求,BIOS/UEFI 已啟用硬件虛擬化。
- 按 Docker 官方 Windows 安裝指引啟用 WSL 2 或合適後端,完成安裝後重新登入或重啟。
- 啟動 Docker Desktop,等候狀態顯示 engine running。
- 開啟 Windows PowerShell,輸入
docker version;應同時看到 Client 和 Server,而不是只能看到 client。 - 預留足夠磁碟空間,並確保公司代理、防火牆或 VPN 沒有阻止 Docker registry。
Docker Desktop 可在介面內查看 Containers、Images 和 Volumes。本文仍以 PowerShell 指令為準,因為指令較容易記錄、重複和審核。
三、下載時要選對平台版本
Windows 一般選 Docker Desktop for Windows。Mac 下載頁會另分 Apple Silicon 和 Intel;不要把 Mac 安裝程式或 Linux 套件套用到 Windows。安裝完成後,先用 docker run --rm hello-world 做最小測試;成功看到說明訊息,才進入 n8n。
若 hello-world 也不能運行,問題仍在 Docker Desktop、虛擬化、WSL、網絡或權限層,不應急着修改 n8n 指令。
四、先看懂啟動流程:終端、持久化、連接埠
一個可重建的 n8n 本機環境至少包含:
- 映像:
docker.n8n.io/n8nio/n8n,提供應用程式。 - 容器:正在運行的 n8n process,可停止和重建。
- named volume:
n8n_data,保存/home/node/.n8n。 - 連接埠:主機
127.0.0.1:5678對應容器5678。 - 環境變數:時區、設定檔權限和 task runners。
重要更新:不要直接照抄畫面中的舊式簡短指令。現行 n8n 官方 Docker 指引會建立
n8n_datavolume,設定TZ和GENERIC_TIMEZONE,啟用N8N_ENFORCE_SETTINGS_FILE_PERMISSIONS及N8N_RUNNERS_ENABLED。本文另外把端口綁在127.0.0.1,令這個學習環境只限本機。
五、Windows PowerShell:建立 volume 並啟動 n8n
步驟 1:建立 named volume
docker volume create n8n_data
docker volume inspect n8n_data
volume 的內容獨立於容器。停止或移除 n8n 容器,不會自動刪除這個 named volume;但執行 docker volume rm 或不加判斷地清理 volumes 仍會刪除資料。
步驟 2:貼上 PowerShell 多行指令
docker run -it --rm `
--name n8n `
-p 127.0.0.1:5678:5678 `
-e GENERIC_TIMEZONE="Asia/Hong_Kong" `
-e TZ="Asia/Hong_Kong" `
-e N8N_ENFORCE_SETTINGS_FILE_PERMISSIONS=true `
-e N8N_RUNNERS_ENABLED=true `
-v n8n_data:/home/node/.n8n `
docker.n8n.io/n8nio/n8n
PowerShell 的續行符號是行尾反引號 `。反引號後面不要加空格或註解;若複製後出現逐行執行或「缺少運算式」,請改用以下單行版本:
docker run -it --rm --name n8n -p 127.0.0.1:5678:5678 -e GENERIC_TIMEZONE="Asia/Hong_Kong" -e TZ="Asia/Hong_Kong" -e N8N_ENFORCE_SETTINGS_FILE_PERMISSIONS=true -e N8N_RUNNERS_ENABLED=true -v n8n_data:/home/node/.n8n docker.n8n.io/n8nio/n8n
六、逐個參數解釋:不要只把長指令當咒語
| 參數 | 作用 | 要留意 |
|---|---|---|
-it --rm | 前景互動運行;停止後移除容器物件 | volume 不會因此刪除;下次要重跑指令 |
--name n8n | 給容器固定名稱 | 方便 logs、inspect、stop;同名舊容器會造成衝突 |
-p 127.0.0.1:5678:5678 | 本機 5678 對應容器 5678 | 只綁 IPv4 loopback;不應視為正式互聯網部署 |
GENERIC_TIMEZONE | 控制 Schedule Trigger 等排程時區 | 香港使用 Asia/Hong_Kong |
TZ | 控制容器系統時間及指令所見時間 | 與 GENERIC_TIMEZONE 保持一致 |
N8N_ENFORCE_SETTINGS_FILE_PERMISSIONS=true | 要求 n8n 設定檔使用較安全權限 | 是現行官方 Docker 範例的一部分 |
N8N_RUNNERS_ENABLED=true | 啟用執行 Code node 工作的 task runners | 單容器預設為 internal;正式環境應評估 external mode |
-v n8n_data:/home/node/.n8n | 保存資料庫、憑證相關資料和 instance 設定 | 備份時要備份整個 volume |
docker.n8n.io/n8nio/n8n | n8n 官方容器映像 | 正式環境宜記錄或鎖定經測試版本 |
為甚麼同時需要兩個時區變數? TZ 影響容器內的系統時間;GENERIC_TIMEZONE 影響 n8n 的排程節點。只設其中一個,可能出現介面、日誌和實際觸發時間不一致。
task runners 是否等於完整 sandbox? 不是。啟用後,Code node 工作交由 runner 執行;這個單容器基線使用 internal mode。n8n 文件亦提供 external mode、認證 token、並行和 timeout 等設定,較高風險或多人正式環境要另行 harden,而不是把 N8N_RUNNERS_INSECURE_MODE 打開。
七、驗證容器真的運行,而不是只看瀏覽器
另開一個 PowerShell 視窗,依次檢查:
docker ps --filter "name=n8n"
docker port n8n
docker logs --tail 100 n8n
docker ps應有名為 n8n 的 running container。docker port n8n應顯示主機的127.0.0.1:5678映射。- logs 不應持續重啟、報 database locked、permission denied 或 migration failure。
- 第一次啟動要下載映像和建立資料,需時可能比重啟長。
Docker Desktop 的綠點很方便,但部署紀錄應同時保存實際指令、映像版本、volume 名稱和驗證結果。
八、開啟 localhost,安全建立擁有者帳戶
http://localhost:5678,到達未填寫的擁有者帳戶表格。- 在同一部 Windows 電腦開啟
http://localhost:5678。 - 建立 instance owner 帳戶;使用獨立、長而隨機的密碼,不要重用公司電郵密碼。
- 不要在教學錄影、截圖、工單或群組訊息展示真實電郵、姓名、密碼、自動填寫清單或 API key。
- 登入後先建立一個 Manual Trigger → Edit Fields 的無敏感資料測試 workflow。
- 執行一次、重新整理頁面、停止 n8n、再以同一指令啟動;確認帳戶和 workflow 仍存在,才算持久化測試通過。
如果停止後所有設定消失,先檢查新容器是否仍掛載 n8n_data:/home/node/.n8n;不要在未備份前反覆建立新的 volumes。
九、「只限本機」的真正意思:webhook 和排程限制
Docker 若只寫 -p 5678:5678,通常會把連接埠發布到主機所有網絡介面。Docker 官方明確提醒,公開 port 預設可能讓外部網絡存取;本文使用 127.0.0.1:5678:5678,只讓 Docker 主機打開。
- 手動 workflow:可以在本機正常建立和執行。
- Schedule Trigger:只要電腦、Docker Desktop 和 n8n 一直運行便可;睡眠或關機期間不會神奇補回所有觸發。
- Polling:視乎節點,可由 n8n 主動連外。
- 外部 webhook:第三方通常不能連入 localhost。
- OAuth callback:部分供應商不接受 localhost,亦可能需要正式 HTTPS callback URL。
需要讓互聯網或同事存取時,不要只把 IP 改成
0.0.0.0。應建立正式網域、反向代理、TLS、正確的 base URL/webhook URL、防火牆、登入與權限、秘密管理、更新、監控和備份。n8n 官方建議以反向代理處理 TLS。
十、停止、重啟和改成背景運行
使用本文的 -it --rm 基線時,在原 PowerShell 按 Ctrl+C 會停止 n8n,容器物件隨後移除;重新貼上同一條 docker run 指令,就會用同一個 volume 啟動。
如果只為本機長時間測試,可把指令開頭的 -it --rm 改成 -d --restart unless-stopped。這是操作模式調整,不是把環境變成 production:
docker stop n8n
docker start n8n
docker logs -f n8n
改參數或更新映像時,舊容器不能原地修改完整啟動設定;做法是先備份、停止、移除容器,再以相同 volume 和新參數重建。移除容器時不要把 n8n_data 一併刪除。
十一、更新 n8n:先知道版本、再備份、最後重建
- 在 n8n release notes 和 Docker 安裝文件確認目標版本、breaking changes 和相容要求。
- 記錄目前映像:
docker inspect n8n --format "{{.Config.Image}}"。 - 完整備份
n8n_data,並測試可以還原到另一個 volume。 - 停止並移除舊容器;named volume 保留。
- 拉取穩定版或指定版本:
docker pull docker.n8n.io/n8nio/n8n。 - 以原本的時區、權限、runner、port 和 volume 參數重建。
- 檢查 logs、登入、憑證、手動 workflow、排程和 webhook。
正式環境宜使用明確版本 tag 並經過 staging 測試;「永遠拉最新」會把更新時間和風險交給未知變化。資料庫完成 migration 後,單純改回舊 image 不一定安全,真正 rollback 通常需要可驗證的更新前備份。
十二、備份 named volume,並做一次還原演習
只匯出 workflow JSON 不足以還原完整 instance。/home/node/.n8n 可能包含 SQLite 資料庫、credentials 相關資料、encryption key 和其他設定。以下 PowerShell 範例先停止寫入,再把 volume 打包到目前資料夾:
docker stop n8n
docker run --rm `
-v n8n_data:/data:ro `
-v "${PWD}:/backup" `
alpine `
sh -c "tar czf /backup/n8n-data-backup.tar.gz -C /data ."
若你使用前景 --rm 模式,先在原終端按 Ctrl+C。備份檔應移到另一個受保護位置,設定保留期和存取權限;只留在同一部電腦、同一顆磁碟不算災難復原。
還原到新 volume 測試,不要直接覆蓋原本資料
docker volume create n8n_restore_test
docker run --rm `
-v n8n_restore_test:/data `
-v "${PWD}:/backup:ro" `
alpine `
sh -c "tar xzf /backup/n8n-data-backup.tar.gz -C /data"
然後以另一個容器名稱、另一個主機 port 和 n8n_restore_test:/home/node/.n8n 啟動,確認可以登入、打開 workflow 和解密憑證。測試完成後才決定保留或刪除測試 volume。每次更新前備份但從不還原測試,風險仍然很高。
十三、正式使用前的安全清單
- 本機學習保持
127.0.0.1綁定;公開服務使用 TLS 反向代理和防火牆。 - 擁有者帳戶使用獨立強密碼,按可用功能啟用 2FA,避免共用管理員帳戶。
- API key、OAuth secret 和資料庫密碼不要寫入 workflow 名稱、截圖、PowerShell history 或公開 compose 檔。
- 只安裝受信任、經審查的 community nodes;按需要封鎖 Execute Command、Read/Write Files 等高風險節點。
- 限制 workflow 會讀取、傳送和保留哪些個人或公司資料;設定 execution data 保留和刪除政策。
- 保留
N8N_ENFORCE_SETTINGS_FILE_PERMISSIONS=true,不要為消除警告而關閉保護。 - 保留 task runners 的安全預設;多人或不受信任 code 要研究 external mode 和 runner hardening。
- 定期執行 n8n security audit,檢查未使用 credentials、危險 nodes、未受保護 webhooks 和過時版本。
- 備份 volume、部署指令、映像版本和外部秘密;加密備份並測試還原。
十四、常見問題快速排查
| 症狀 | 先檢查 | 常見處理 |
|---|---|---|
| Cannot connect to Docker daemon | Docker Desktop 是否 engine running | 啟動 Docker Desktop;重試 docker version |
| port is already allocated | 5678 是否被其他 process/container 使用 | 停用衝突服務,或改成 127.0.0.1:5679:5678 |
| container name already in use | docker ps -a --filter "name=n8n" | 確認舊容器資料已在 volume,再停止/移除舊容器 |
| 瀏覽器無法開啟 | docker ps、docker logs n8n | 等 migration 完成;確認網址和 port 映射 |
| 排程差八小時 | TZ 和 GENERIC_TIMEZONE | 兩者都設為 Asia/Hong_Kong 後重建容器 |
| 重啟後資料消失 | Mounts 是否有 n8n_data | 用同一 volume 重建;不要建立另一個空 volume |
| PowerShell 多行報錯 | 反引號後是否有空格 | 使用本文單行版本 |
| 外部 webhook 收不到 | 服務是否仍是 localhost | 改用經安全設計的公開 HTTPS 部署,而非直接開 port |
到這裏,你已不只是「把 n8n 跑起來」,而是建立了一個有持久化資料、正確香港時區、基本安全邊界、可更新和可還原的 Windows 學習環境。下一步可先做一個完全不含真實資料的 workflow,練習 Manual Trigger、Edit Fields、If 和 HTTP Request;等你能解釋每項資料會去哪裏,再接入正式帳戶和業務系統。
資料來源與引用
我們附上第一手及官方來源,方便你逐一核實。
- 1.Docker installation for n8n — n8n Docs
- 2.Task runner environment variables — n8n Docs
- 3.Update self-hosted n8n — n8n Docs
- 4.Security audit — n8n Docs
- 5.Set up SSL — n8n Docs
- 6.Install Docker Desktop on Windows — Docker Docs
- 7.Volumes — Docker Docs
- 8.Port publishing and mapping — Docker Docs
- 9.Back up and restore Docker Desktop data — Docker Docs
常見問題
本地部署 n8n 是否完全免費?
在自己的電腦運行可避免 n8n Cloud 訂閱費,但仍有電腦、電力、維護、備份及第三方 API 成本;可使用範圍亦要遵守 n8n 當時的授權條款。正式業務系統還要計算監控、網絡、安全和故障恢復成本。
為甚麼本文不用畫面中的簡短 Docker 指令?
簡短指令可示範基本概念,但現行 n8n 官方 Docker 指引加入 named volume、時區、設定檔權限和 task runners。本文亦把主機連接埠收窄至 127.0.0.1,較適合只在自己的 Windows 電腦學習。
named volume 和 Windows 資料夾 bind mount 有甚麼分別?
named volume 由 Docker 管理,不依賴 D 槽或某個使用者資料夾的固定路徑,跨電腦指令較一致;bind mount 讓你直接在 Windows 檔案系統存取內容,但路徑、共享權限和 Linux 容器檔案權限較容易出錯。兩者都要另做備份。
關閉 PowerShell 後 n8n 為甚麼停止?
本文的官方基線用 -it --rm,容器連着目前終端;按 Ctrl+C 或關閉終端會停止並移除容器物件,但 named volume 仍在。若要背景運行,可改用 -d 並移除 --rm,再配合明確的停止、更新和重建流程。
同一個 Wi-Fi 的其他電腦可否開啟這個 n8n?
本文用 127.0.0.1:5678:5678,設計上只讓 Docker 主機存取。不要為了方便直接改成對所有介面公開;多人或遠端使用應以正式網域、反向代理、TLS、防火牆、登入控制、備份和監控重新設計。
localhost 可以接收 Stripe、GitHub 或其他外部 webhook 嗎?
通常不可以,因為第三方服務無法連入你的 localhost。臨時 tunnel 會把服務帶到互聯網,必須當作公開服務處理;正式 webhook 應使用受保護的可達網域、HTTPS 和正確 WEBHOOK_URL。
更新或重建容器會否刪除 workflow?
只要新容器重新掛載同一個 n8n_data volume,資料通常會保留;但錯誤刪除 volume、資料庫遷移、磁碟故障或不完整備份仍可造成損失。更新前要備份整個 volume,並實際測試還原。
可以把這個方法直接用作公司正式系統嗎?
不建議原樣照搬。這是單機、localhost、SQLite 的學習基線。正式環境要評估 PostgreSQL、反向代理與 TLS、固定版本、秘密管理、外置 task runners、備份還原、可觀測性、更新窗口、權限和事故應變。
本文遵循我們的 編輯準則.

關於作者
HK Learn AI 編輯部
HK Learn AI 編輯部負責研究、查證同編寫每一篇內容,並引用官方及第一手來源。
此主題相關文章

n8n AI 意圖分類教學:Structured Output Parser 與 Switch 語意路由
由 Chat Trigger、Basic LLM Chain、OpenAI Chat Model、Structured Output Parser、Switch、Merge 到 HTML 結果頁,逐步建立可測試的「問題/要求/抱怨」分類器。本文補上 JSON Schema、fallback、注入防護、成本、錯誤處理、評估集與人工覆核,並附 5 段已去識別預覽。

AI Agent 香港中小企指南:工作流程、自動化、MCP、風險點樣做?
AI Agent 不只是會聊天的 ChatGPT,而是可以按指令、使用工具、讀取資料、執行工作和等待人手審批的流程系統。本文教香港中小企如何選場景、設計 agent 架構、連接工具、設定權限、加入人手審批、做測試評估和保護客戶資料。