n8n 自架入門:本機與 VPS 的 Docker Compose 設定
這篇給「想自己架 n8n,但不想踩雷」的人。內容依 n8n 官方文件整理,compose 檔可直接下載。截至 2026-10-30,n8n 穩定版是 2.45.7(Docker Hub 的 stable 標籤),測試版是 2.46.x。
先決定:n8n Cloud 還是自架?
| n8n Cloud | 自架(Community Edition) | |
|---|---|---|
| 費用 | Starter US$20/月(年繳)起,2,500 executions | 軟體免費;付伺服器錢(或用自己電腦) |
| 執行次數 | 依方案限制 | 沒有次數限制,只受機器效能限制 |
| 單次執行上限 | Starter 5 分鐘、Pro 40 分鐘 | 自己設定 |
| 維運 | n8n 負責更新、備份、HTTPS | 全部自己來 |
| 資料位置 | 德國法蘭克福 | 你的機器 |
| 能做的事 | 官方定價表標示「執行 bash」「自訂節點」僅限自架 | 可裝自訂節點、讀寫本機檔案;Execute Command 節點在 2.x 預設停用,要自己用 NODES_EXCLUDE 打開(有資安風險) |
我的判斷:每月 2,500 次以內、又不想管機器 → Cloud;流程多、要讀本機檔案、要省長期費用 → 自架。先在本機做好流程,再決定要不要上 VPS。
方法一:本機用 Docker 試玩(10 分鐘)
需要先裝 Docker Desktop(Windows/macOS)或 Docker Engine(Linux)。最快是官方的一行指令:
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 \
-v n8n_data:/home/node/.n8n \
n8nio/n8n:2.45.7
開瀏覽器到 http://localhost:5678,第一次會要你建立 owner 帳號。工作流、憑證、加密金鑰都存在 n8n_data 這個 volume,容器刪掉資料還在。
要長期在本機跑,建議改用 compose(設定比較好管)。下載 本機版 docker-compose.yml 與 env.example:
cp env.example .env
# 產生加密金鑰,貼進 .env 的 N8N_ENCRYPTION_KEY
openssl rand -hex 32
docker compose up -d
docker compose logs -f n8n
本機版重點:連接埠只綁 127.0.0.1(區網其他電腦連不到)、固定版本號、設定好加密金鑰與執行紀錄清理。因為是 http,所以加了 N8N_SECURE_COOKIE=false,上線用 https 時要拿掉。
方法二:VPS + 網域 + HTTPS
需要:一台 Linux VPS(1~2 GB RAM 的小機器跑個人流程通常足夠,但這是經驗值,不是官方規格)、一個網域、能設定 DNS。
- DNS 加一筆 A 記錄:
n8n.你的網域→ VPS 的 IP。 - VPS 裝好 Docker 與 Compose plugin,防火牆只開 22、80、443。
- 建立資料夾並放入 VPS 版 docker-compose.yml 和 env.example:
mkdir ~/n8n-compose && cd ~/n8n-compose mkdir local-files cp env.example .env # 填 DOMAIN_NAME、SUBDOMAIN、SSL_EMAIL、N8N_ENCRYPTION_KEY docker compose up -d - 等 Traefik 跟 Let's Encrypt 拿到憑證(通常一兩分鐘),打開
https://n8n.你的網域建立 owner 帳號。架好後立刻建帳號,不要讓沒設 owner 的實例在網路上空著。
這份 compose 改寫自官方範例:Traefik 負責 80/443 和自動 HTTPS,n8n 本身只綁在 127.0.0.1:5678,外部只能透過 Traefik 進來。我做的改動:固定 n8n 版本、拿掉 Traefik 的 --api.insecure=true(個人用不到 dashboard)、加上加密金鑰和紀錄清理。
環境變數:哪些一定要懂
| 變數 | 用途 | 建議 |
|---|---|---|
N8N_ENCRYPTION_KEY | 加密存在資料庫裡的憑證(API key、密碼) | 一定自己設並另外備份。沒設的話 n8n 會自動產生並存在 ~/.n8n/config;換機器還原時沒有這把鑰匙,憑證全部解不開 |
N8N_HOST/N8N_PROTOCOL/N8N_PORT | 對外網址組成 | VPS 設成你的子網域、https、5678 |
N8N_WEBHOOK_URL | Webhook 對外網址(反向代理後面一定要設) | n8n 2.30 之後用這個名稱;舊版叫 WEBHOOK_URL |
GENERIC_TIMEZONE、TZ | 排程時區、容器時區 | Asia/Taipei,不然「每天 7 點」會變 UTC 7 點 |
N8N_ENFORCE_SETTINGS_FILE_PERMISSIONS | 強制設定檔權限 | true |
N8N_RESTRICT_FILE_ACCESS_TO | 限制節點能讀寫的資料夾 | /files(對應 ./local-files) |
N8N_BLOCK_ENV_ACCESS_IN_NODE | 禁止在 Code 節點和表達式讀環境變數 | true(2.x 預設就是封鎖) |
EXECUTIONS_DATA_MAX_AGE/EXECUTIONS_DATA_PRUNE_MAX_COUNT | 執行紀錄保留多久/幾筆 | 預設 336 小時、10,000 筆;硬碟小就調低 |
DB_SQLITE_VACUUM_ON_STARTUP | 啟動時壓縮 SQLite | true,不然刪了紀錄硬碟也不會變小 |
DB_TYPE=postgresdb 與 DB_POSTGRESDB_* | 改用 Postgres | 一人用 SQLite 就夠;流程量大或多人再換 |
資料持久化:資料到底存在哪
n8n_datavolume → 容器內/home/node/.n8n:SQLite 資料庫(工作流、憑證、執行紀錄、帳號)+加密金鑰設定檔。這是最重要的東西。./local-files→/files:讓流程讀寫檔案的地方。traefik_data:HTTPS 憑證,掉了會自動重新申請。
不要用 docker compose down -v,-v 會把 volume 一起刪掉。
登入與安全
- n8n 1.0 起已移除舊的 Basic Auth,現在一律是內建帳號系統,登入畫面無法關閉。第一次開啟時建立 owner 帳號。
- 到個人設定開啟兩步驟驗證(2FA)。
- SMTP 不是必要的,但沒設就不能用「忘記密碼」寄信重設,也不能寄邀請信。
- 不用公開 API 就關掉(
N8N_PUBLIC_API_DISABLED=true);可用n8n audit產生安全稽核報告。 - Webhook 節點等於對外開門:加上 Header Auth 或簽章驗證,不要讓任何人都能觸發會花錢(呼叫 AI)的流程。
- VPS 的 SSH 改用金鑰登入、關閉密碼登入;系統套件定期更新。
更新
官方的 compose 更新流程:
docker compose pull
docker compose down
docker compose up -d
因為我把版本寫死在 compose 裡,升級時先改 image: n8nio/n8n:新版本 再 pull。好處是不會哪天重開機就被動升級到有破壞性變更的版本。升級前一定先備份,並看官方 release notes。
npx n8n 安裝,並在設定裡提供 Migration Report 檢查哪些流程要調整。用 Docker 的人影響較小,但升級前仍要看一遍 breaking changes。備份:兩層一起做
第一層:整個 .n8n 資料夾(完整備份)
SQLite 在寫入時直接複製可能壞檔,先停 n8n 再複製:
cd ~/n8n-compose
docker compose stop n8n
docker run --rm -v n8n-compose_n8n_data:/data -v "$PWD":/backup alpine \
tar czf /backup/n8n-data-$(date +%F).tgz -C /data .
docker compose start n8n
第二層:CLI 匯出工作流與憑證(可讀、可進 Git)
docker exec -u node -it <容器名稱> n8n export:workflow --backup --output=/files/backups/workflows/
docker exec -u node -it <容器名稱> n8n export:credentials --backup --output=/files/backups/credentials/
- 輸出到
/files(對應主機的./local-files),容器內其他路徑重建後就不見了。 - 工作流和憑證要用不同資料夾(官方文件註明有已知問題)。
- CLI 匯出不含帳號、執行紀錄、變數和加密金鑰;還原憑證時必須用同一把
N8N_ENCRYPTION_KEY。 - 還原:
n8n import:workflow --separate --input=...、n8n import:credentials --separate --input=...。
建議用主機的 cron 每天跑第二層、每週跑第一層,並把檔案同步到另一個地方。沒有實際還原過的備份不算備份,至少在本機試還原一次。
我實際驗證了什麼
- 本頁兩份 compose 檔都用 Docker Compose v5.6.1 的
docker compose config驗證過語法(沒有實際在 VPS 上拿 HTTPS 憑證)。 - n8n 2.45.7 在測試機上以 Node 24 啟動,成功匯入每日摘要流程並用 CLI 執行。
- 環境變數名稱對照過 2.45.7 原始碼裡的設定定義。
資料來源(2026-10-30 查證)
- Docker Compose 架設:https://docs.n8n.io/hosting/installation/server-setups/docker-compose/
- Docker 安裝與更新:https://docs.n8n.io/hosting/installation/docker/
- 備份與還原:https://docs.n8n.io/deploy/host-n8n/keep-n8n-running/backup-and-restore
- 執行紀錄管理:https://docs.n8n.io/deploy/host-n8n/configure-n8n/scaling/manage-execution-data
- 使用者管理:https://docs.n8n.io/deploy/host-n8n/configure-n8n/user-management
- v3.0 破壞性變更:https://docs.n8n.io/changelog/v30-breaking-changes
- 版本標籤:https://hub.docker.com/r/n8nio/n8n/tags
- Cloud 方案限制:https://n8n.io/pricing/