一人代理實驗室

最後更新:2026-10-30

n8n 自架入門:本機與 VPS 的 Docker Compose 設定

這篇給「想自己架 n8n,但不想踩雷」的人。內容依 n8n 官方文件整理,compose 檔可直接下載。截至 2026-10-30,n8n 穩定版是 2.45.7(Docker Hub 的 stable 標籤),測試版是 2.46.x。

先講風險。n8n 官方說自架適合有經驗的使用者:設錯的話可能遺失資料、被入侵、停機。如果你沒有管過 Linux 伺服器,先用 n8n Cloud 試用,或只在自己電腦本機跑。

先決定: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 時要拿掉。

另外 n8n 官方也提供 curl -fsSL https://get.n8n.io | sh 的一鍵安裝腳本(會檢查 Docker、寫好設定檔)。執行任何 curl | sh 前請先打開腳本看過。

方法二:VPS + 網域 + HTTPS

需要:一台 Linux VPS(1~2 GB RAM 的小機器跑個人流程通常足夠,但這是經驗值,不是官方規格)、一個網域、能設定 DNS。

  1. DNS 加一筆 A 記錄:n8n.你的網域 → VPS 的 IP。
  2. VPS 裝好 Docker 與 Compose plugin,防火牆只開 22、80、443。
  3. 建立資料夾並放入 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
  4. 等 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_URLWebhook 對外網址(反向代理後面一定要設)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啟動時壓縮 SQLitetrue,不然刪了紀錄硬碟也不會變小
DB_TYPE=postgresdb 與 DB_POSTGRESDB_*改用 Postgres一人用 SQLite 就夠;流程量大或多人再換

還可以在單一工作流的設定裡把「成功的執行不要存」打開(等同 EXECUTIONS_DATA_SAVE_ON_SUCCESS=none),只留錯誤紀錄,資料庫長得慢很多。

資料持久化:資料到底存在哪

不要用 docker compose down -v,-v 會把 volume 一起刪掉。

登入與安全

更新

官方的 compose 更新流程:

docker compose pull
docker compose down
docker compose up -d

因為我把版本寫死在 compose 裡,升級時先改 image: n8nio/n8n:新版本 再 pull。好處是不會哪天重開機就被動升級到有破壞性變更的版本。升級前一定先備份,並看官方 release notes。

n8n 3.0 目前是搶先體驗版。官方已公告 3.0 起自架只支援 Docker 部署,不再支援 npm/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

volume 名稱是「資料夾名_n8n_data」,用 docker volume ls 確認。這份 tgz 裡有加密金鑰設定檔,等同所有憑證,請加密後再放雲端。

第二層: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/

建議用主機的 cron 每天跑第二層、每週跑第一層,並把檔案同步到另一個地方。沒有實際還原過的備份不算備份,至少在本機試還原一次。

我實際驗證了什麼

資料來源(2026-10-30 查證)