目錄
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
備份要定期測試還原,確認真的能用。
搬移到新主機
- 在舊主機備份資料庫與
.env(含N8N_ENCRYPTION_KEY)。 - 在新主機用相同的 compose.yaml 與
.env啟動 PostgreSQL。 - 還原資料庫。
- 啟動 n8n,確認工作流程與憑證都正常。
- 更新 DNS 指向新主機。
更新 n8n
n8n 大約每週都有新版本。建議的流程:
-
閱讀版本說明(Release notes),特別是有沒有破壞性變更(breaking changes)。
-
備份。
-
修改 compose.yaml 中的映像檔版本,例如
n8nio/n8n:2.42.7→ 新版本。 -
更新:
docker compose pull n8n docker compose up -d n8n docker compose logs -f n8n -
確認重要的工作流程運作正常。
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日