---
title: "在自己的伺服器上部署 n8n：網域、工作流程與備份"
description: "用 Zenavo 的範本部署 n8n，設定 HTTPS、Webhook 網址與時區，跑通第一個工作流程，再做好加密金鑰保存與磁碟區備份。"
date: 2026-11-10
language: zh-TW
url: https://zenavo.app/zh-TW/blog/self-host-n8n
---

# 在自己的伺服器上部署 n8n：網域、工作流程與備份

把表單內容寫進試算表、定時彙整訊息、收到 Webhook 後呼叫另一個 API——這些重複的自動化流程都可以交給 [n8n](https://n8n.io)。自架沒有雲端託管版按執行次數計費的限制，工作流程和憑證也都留在你自己的伺服器上。

本文用 Zenavo 的 n8n 範本，從部署、設定網域與 Webhook，一路走到備份與升級。伺服器、Zenavo 平台以及工作流程呼叫的第三方 API 分別計費。

## 部署 n8n

先在 Zenavo 中[連接一台 Linux 伺服器](https://docs.zenavo.app/zh-TW/servers/add-a-server)，再開啟 [n8n 範本](https://zenavo.app/deploy?template=n8n)，選擇伺服器並部署。

目前範本的設定如下：

| 設定 | 值或用途 |
|---|---|
| 映像檔 | `n8nio/n8n:latest` |
| HTTP 連接埠 | `5678` |
| 持久化目錄 | `/home/node/.n8n`，預設 SQLite 資料庫、工作流程和憑證都在這裡 |
| `N8N_ENCRYPTION_KEY` | 專案建立時自動產生，用於加密工作流程中儲存的憑證 |
| `GENERIC_TIMEZONE` | 預設 `UTC`，下面改成你的時區 |
| `N8N_DIAGNOSTICS_ENABLED` | `false`，關閉遙測統計 |

`latest` 會隨上游更新。打算長期使用時，在 n8n 服務 **設定** 的 **來源** 中把映像檔標籤改成你驗證過的固定版本（例如 `n8nio/n8n:1.82.0`），避免重新部署時無意間跨版本升級。

## 綁定網域，設定 Webhook 與時區

在 n8n 服務的 **網路** 頁為 `5678` 連接埠綁定網域，例如 `n8n.example.com`，在 DNS 新增指向伺服器的 A 記錄，等待 HTTPS 生效。步驟見[網域文件](https://docs.zenavo.app/zh-TW/networking/domains)。

接著開啟 n8n 服務的 **變數** 分頁，補上網域與時區設定：

```sh
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
GENERIC_TIMEZONE=Asia/Taipei
TZ=Asia/Taipei
```

幾點說明：

- `WEBHOOK_URL` 決定 Webhook 節點產生的公開網址；未設定時，節點會顯示容器內部網址 `http://localhost:5678`。
- `N8N_PROXY_HOPS=1` 對應 Zenavo 閘道這一層反向代理。如果你的網域前面還套了 Cloudflare 等 CDN 代理，請依實際代理層數調整。
- `GENERIC_TIMEZONE` 影響排程觸發器（Schedule Trigger）的預設時區。

儲存後重新啟動服務，開啟 `https://n8n.example.com` 建立管理員帳號。日後更換網域時，記得同步修改上面幾個網址變數。

## 跑通第一個工作流程與 Webhook

進入編輯器後，先建一個最小工作流程確認執行正常：

1. 新增工作流程，加入 **Manual Trigger**。
2. 加入 **Edit Fields (Set)** 節點，新增字串欄位 `message`，值填 `Hello from n8n`。
3. 點擊 **Test workflow**，確認右側輸出出現這則訊息，然後儲存。

接著測試外部請求能否進入 Webhook：

1. 加入 **Webhook** 節點，HTTP Method 選 `GET`。
2. 點擊 **Listen for test event**，在瀏覽器開啟節點顯示的 **Test URL**，確認編輯器立即收到請求資料。
3. 正式串接第三方系統（如 GitHub、Stripe、Slack）時，切換到 **Production URL**，並將工作流程右上角的開關設為 **Active**。Test URL 只在點擊監聽時暫時生效，不能填進正式業務。

## 保管好 `N8N_ENCRYPTION_KEY`

n8n 裡儲存的所有第三方 API Key、資料庫密碼與 OAuth 權杖，都會用 `N8N_ENCRYPTION_KEY` 加密後才寫入資料庫。

開啟 n8n 服務的 **變數** 分頁，把 `N8N_ENCRYPTION_KEY` 的值複製一份存進你的密碼管理器。**部署後不要修改它**；將來把備份還原到新專案或新伺服器時，也必須填入同一個 `N8N_ENCRYPTION_KEY`，否則還原出來的工作流程無法解密原有的憑證。

編輯器裡的「匯出工作流程」只會匯出節點與連線關係的 JSON，不包含憑證與執行紀錄，不能取代完整備份。

## 備份與升級

n8n 的全部資料都在 `/home/node/.n8n` 磁碟區裡。在 n8n 服務的 **備份與還原** 中備份它：

1. 挑一個沒有關鍵任務在跑的時段，停止專案（磁碟區備份需要專案處於停止狀態）。
2. 建立磁碟區備份，完成後重新啟動專案。
3. 下載一份備份自行保存，並和 `N8N_ENCRYPTION_KEY` 放在一起。

操作細節見[備份與還原](https://docs.zenavo.app/zh-TW/operations/backups)。如果你把備份還原到新專案做驗證，注意已啟用的工作流程還原後會繼續依排程觸發器執行，測試時先關閉觸發器或與真實業務隔離。

升級前先讀 n8n 的[發行說明](https://docs.n8n.io/release-notes/)，先備份磁碟區，再去服務 **設定 → 來源** 修改映像檔版本。n8n 升級時可能會遷移資料庫結構，一旦升級完成，單純換回舊映像檔不一定能啟動，需要用升級前的備份還原。

## 常見問題

**Webhook 節點裡的網址還是顯示 `localhost:5678`？**
檢查 **變數** 分頁是否已新增 `WEBHOOK_URL=https://你的網域/`，儲存後需要重新啟動 n8n 服務才會生效。

**第三方平台呼叫 Webhook 回傳 404？**
確認使用的是 **Production URL**（路徑帶 `/webhook/` 而不是 `/webhook-test/`），並且工作流程右上角已經打開 **Active** 開關。

**排程任務沒有按預期時區觸發？**
檢查變數裡的 `GENERIC_TIMEZONE` 和 `TZ` 是否設為你的時區（如 `Asia/Taipei`），同時看工作流程自身的 **Settings → Timezone** 有沒有單獨覆蓋成別的時區。

**需要多大的伺服器？**
日常輕量工作流程占用的記憶體不大，1 核 2 GB 的伺服器即可起步；如果工作流程裡要在記憶體中處理大型檔案、大量 JSON 陣列或高並行請求，建議使用 2 核 4 GB 以上的伺服器。

從 [n8n 範本](https://zenavo.app/deploy?template=n8n)開始：先綁定網域並設好 `WEBHOOK_URL` 與時區，再把 `N8N_ENCRYPTION_KEY` 存好、做一次磁碟區備份。
