目錄

n8n 備份、還原與版本更新

需要備份什麼

項目位置重要性
資料庫(工作流程、憑證、執行紀錄)PostgreSQL,或 n8n_data 中的 SQLite 檔必要
加密金鑰N8N_ENCRYPTION_KEY,或 n8n_data 中的 config 檔必要,遺失則憑證無法解密
n8n_data 資料目錄Docker Volume建議
compose.yaml、.env主機上的部署資料夾建議

方法一:用 CLI 匯出工作流程

n8n 內建匯出指令,可以把工作流程匯出成 JSON 檔(適合放進 Git 做版本控制):

docker compose exec n8n n8n export:workflow --all --separate --output=/home/node/.n8n/backup/workflows/
docker compose exec n8n n8n export:credentials --all --separate --output=/home/node/.n8n/backup/credentials/
  • --separate:每個工作流程一個檔案
  • 匯出的憑證預設仍是加密狀態,必須搭配相同的加密金鑰才能使用

把檔案從容器複製出來:

docker compose cp n8n:/home/node/.n8n/backup ./n8n-backup-$(date +%F)

還原:

docker compose exec n8n n8n import:workflow --separate --input=/home/node/.n8n/backup/workflows/
docker compose exec n8n n8n import:credentials --separate --input=/home/node/.n8n/backup/credentials/

方法二:備份資料庫

PostgreSQL

docker compose exec -T postgres pg_dump -U n8n n8n | gzip > n8n-db-$(date +%F).sql.gz

還原(在全新的資料庫上):

gunzip -c n8n-db-2026-10-12.sql.gz | docker compose exec -T postgres psql -U n8n -d n8n

SQLite

SQLite 資料庫在 n8n_data Volume 中(database.sqlite)。備份前先停止 n8n,避免複製到寫入一半的檔案:

docker compose stop n8n
docker run --rm -v n8n_n8n_data:/data -v "$PWD":/backup alpine \
  tar czf /backup/n8n-data-$(date +%F).tar.gz -C /data .
docker compose start n8n

(Volume 名稱是「專案名稱_n8n_data」,可以用 docker volume ls 確認。)

自動化備份

用 cron 每天備份,並把備份檔同步到其他地方(另一台主機、雲端儲存):

# /etc/cron.daily/n8n-backup
#!/bin/sh
cd /opt/n8n
docker compose exec -T postgres pg_dump -U n8n n8n | gzip > /backup/n8n-$(date +%F).sql.gz
find /backup -name 'n8n-*.sql.gz' -mtime +30 -delete

備份要定期測試還原,確認真的能用。

搬移到新主機

  1. 在舊主機備份資料庫與 .env(含 N8N_ENCRYPTION_KEY)。
  2. 在新主機用相同的 compose.yaml 與 .env 啟動 PostgreSQL。
  3. 還原資料庫。
  4. 啟動 n8n,確認工作流程與憑證都正常。
  5. 更新 DNS 指向新主機。

更新 n8n

n8n 大約每週都有新版本。建議的流程:

  1. 閱讀版本說明(Release notes),特別是有沒有破壞性變更(breaking changes)。

  2. 備份。

  3. 修改 compose.yaml 中的映像檔版本,例如 n8nio/n8n:2.42.7 → 新版本。

  4. 更新:

    docker compose pull n8n
    docker compose up -d n8n
    docker compose logs -f n8n
  5. 確認重要的工作流程運作正常。

n8n 啟動時會自動執行資料庫遷移,日誌中可以看到遷移的進度。

版本標籤

n8n 2.x 的映像檔標籤:

標籤說明
stable目前的穩定版(取代舊的 latest)
beta測試版,可能不穩定(取代舊的 next)
2.42.7 等固定版本,正式環境建議使用

從 n8n 1.x 升級到 2.x

2.0 有多項破壞性變更,升級前請閱讀官方的 2.0 breaking changes 說明。重點包括:

  • Activate 開關改為 Publish / Unpublish:儲存不會立即生效,需要發布。
  • 任務執行器(task runners)預設啟用,Code 節點在獨立的程序中執行。
  • Code 節點預設無法讀取環境變數,舊流程中使用 $env 的地方需要調整。
  • Python Code 節點改為原生 Python,需要外部任務執行器,語法與舊版不同。
  • 執行系統指令(Execute Command)與本機檔案觸發器預設停用。
  • 檔案讀寫節點預設只能存取特定資料夾。
  • 不再支援 MySQL / MariaDB 作為 n8n 資料庫,需要先遷移到 PostgreSQL 或 SQLite。
  • 子工作流程回傳給父流程的資料,改為子流程最後一個節點的輸出。
  • 移除了 Start 節點,請改用 Manual Trigger。

建議先在測試環境用備份的資料試跑 2.x,確認重要的工作流程都正常後,再升級正式環境。

更新於 2026年10月12日