Zeabur n8n 搬家:N8N_ENCRYPTION_KEY 先抄下來、volume 整包帶走(附 Umami、Ghost)

n8n 搬出 Zeabur,關鍵是兩樣東西:加密金鑰 N8N_ENCRYPTION_KEY,和 volume 裡的 .n8n 資料夾。n8n 用這把金鑰加密存在資料庫裡的 credentials,新環境用的金鑰不同,舊的 credentials 就解不開。但這把金鑰是環境變數,在 Zeabur 十月資安事件的外洩範圍內,所以順序是:先抄下金鑰、備份 volume 與資料庫,在新環境用同一把金鑰還原並確認能跑,再到各服務撤銷並重發 credentials、回 n8n 更新。我們實測過:金鑰不對時,匯入照樣顯示成功,要到用的時候才報錯。Umami 的資料全在 PostgreSQL,搬完要改網站上的追蹤碼網址;Ghost 要搬 content 資料夾和 MySQL,官方匯出檔不含圖片。

這篇是〈Zeabur 搬家前先換金鑰〉的一鍵模板專篇。停止營運的時程、退款、網域轉出這些共通的部分,請看那篇;這裡只講 n8n、Umami、Ghost 這類用模板一鍵部署的服務,搬家時要多注意的地方。

文中官方資料的查詢日期是 2026 年 10 月 18–19 日。Zeabur 模板的內容引自模板頁公開的原始 YAML,n8n、Umami、Ghost 的做法引自各自的官方文件;n8n 匯出還原的實測在 10 月 19 日進行。

一鍵模板的資料在哪:先看模板的結構

要人代搬,可以看我們的PaaS 停運搬家與資安檢查服務。

一鍵模板幫你把服務、資料庫和 Volume 都接好,所以平常不用管資料存在哪。搬家時就要知道了。2026 年 10 月 19 日查詢 Zeabur 模板市集,名稱或說明含 n8n 的模板有 18 個,部署次數多的是〈n8n〉(代碼 JP88UN,頁面顯示部署 34,167 次)和它的 SQLite 版〈n8n(sqlite)〉(代碼 B4VGCF,2,848 次),兩個的發布者欄位都是五倍學院。Umami 與 Ghost 用的是發布者欄位為 Zeabur 的模板。以這四個模板公開的 YAML 為例:

模板服務與映像Volume 掛載路徑資料庫
n8n(JP88UN,34,167 次)n8nio/n8n:2.39.7、n8nio/runners:2.39.7、postgres:17n8n:/root/.n8n;PostgreSQL:/var/lib/postgresql/dataPostgreSQL
n8n(sqlite)(B4VGCF,2,848 次)n8nio/n8n:2.39.7、n8nio/runners:2.39.7n8n:/root/.n8nSQLite,檔案在 .n8n 資料夾裡
Umami(01NQCC,475 次)umami:postgresql-latest、postgres:16只有 PostgreSQL:/var/lib/postgresql/dataPostgreSQL
Ghost(SHEU50,1,669 次)ghost:6-alpine、mysql:8.0Ghost:/var/lib/ghost/content;MySQL:/var/lib/mysqlMySQL

不管哪個模板,資料都在兩個地方:Volume 和資料庫。Zeabur 這一端有三件事要先知道:

  1. 「匯出專案」不含資料。官方文件原句是「Note that “Export Project” does not include data.」它只輸出模板 YAML(映像、環境變數、Volume 的定義),拿到新平台也還原不了你的 workflow 和文章。
  2. Volume 備份要先暫停服務,而且只留 7 天。官方文件寫明,要先到「設定」→「暫停服務」,再到「備份」分頁按備份,備份檔就是 Volume 資料夾的完整內容;「Zeabur 只保留您備份 7 天時間」,按完一定要下載。這個功能在 Dev Plan 等付費方案才有。
  3. 平台專屬變數搬走就失效。模板裡的 ${ZEABUR_WEB_URL}、${ZEABUR_WEB_DOMAIN}、${ZEABUR_ENVIRONMENT_ID}、${PASSWORD} 都是 Zeabur 幫你帶入的值,換了平台不會有人代填,新環境要自己設。

另外,依官方停止營運公告,12 月 1 日起共享叢集會暫停所有運行中的服務,「你仍可手動恢復運行,以進行資料備份」。不要等到那時才備份。

n8n 步驟 1:先把 N8N_ENCRYPTION_KEY 抄下來

n8n 官方文件說明這把金鑰的用途:「n8n uses that key to encrypt the credentials before they get saved to the database.」你在 n8n 裡存的 OpenAI 金鑰、Google 授權、資料庫密碼,在資料庫裡都是用它加密過的。官方〈Back up and restore〉寫得更直接:

Without the encryption key from the config file, or a custom N8N_ENCRYPTION_KEY, a restored database or encrypted credential export can’t be decrypted.

也就是說,資料庫搬過去了,金鑰沒帶,credentials 就全部解不開。

金鑰在哪裡:JP88UN 和 B4VGCF 兩個模板都在環境變數裡設了 N8N_ENCRYPTION_KEY,值是 ${PASSWORD}。依 Zeabur 文件,${PASSWORD} 是「Zeabur 為每個服務產生的隨機密碼」,所以每個人的值不一樣,不是寫死在模板裡的固定值。到 Zeabur 主控台 n8n 服務的「環境變數」頁就看得到;用「編輯原始環境變數」可以整份複製下來。

沒有設這個環境變數的 n8n,金鑰在檔案裡。官方原句:「n8n creates a random encryption key automatically on the first launch and saves it in the ~/.n8n folder.」〈Back up and restore〉也寫明 .n8n 資料夾裡的 config 檔「stores the credential encryption key」。

但這把金鑰在外洩範圍內。Zeabur 狀態頁寫明,十月事件外洩的資料包含「service environment variables」。N8N_ENCRYPTION_KEY 和資料庫密碼都是環境變數。所以這把金鑰要沿用來搬家,搬完之後 credentials 本身要換(見步驟 4)。

n8n 步驟 2:備份 volume 與資料庫

依 n8n 官方〈Back up and restore〉,完整備份分兩部分:

  • .n8n 資料夾:裡面有存金鑰的 config 檔;用 SQLite 時,資料庫檔案也在這裡;二進位資料用 filesystem 模式存時,也在這裡。兩個模板都設了 N8N_DEFAULT_BINARY_DATA_MODE=filesystem,所以 workflow 處理過的檔案也在 Volume 裡。手動裝的 community nodes 也放在 ~/.n8n/nodes。
  • 外部資料庫:用 PostgreSQL 時,用 PostgreSQL 自己的工具備份。官方特別提醒,這時 .n8n 資料夾仍然要一起備份,「because credentials in the database are encrypted with the key it holds」。

先確認 .n8n 實際在哪:n8n 官方 Docker 文件把 Volume 掛在 /home/node/.n8n,這兩個模板的 Volume 掛在 /root/.n8n。路徑不一樣,備份前先用 Zeabur 服務的「命令執行」看一下兩個路徑,確認 config 檔和資料在哪一個,以及它在不在 Volume 裡。不在 Volume 裡的檔案,Volume 備份不會帶到。

SQLite 版(B4VGCF):整個 .n8n 資料夾就是全部資料。官方寫明要先停掉 n8n 再複製:「Copying the database file while n8n is writing to it can produce an inconsistent backup.」Zeabur 的 Volume 備份本來就要先暫停服務,剛好符合。

PostgreSQL 版(JP88UN):資料庫用 pg_dump 匯出,做法與校驗見〈Zeabur 資料庫備份怎麼帶走〉;.n8n 資料夾用 Volume 備份另外帶走。

再留一份 CLI 匯出:n8n 內建的指令可以把 workflow 和 credentials 匯出成 JSON,在 Zeabur 上可以用 n8n 服務的「命令執行」跑。Zeabur 的檔案管理只能一個檔案一個檔案下載,所以輸出成單一檔案比較好拿:

n8n export:workflow --all --output=/root/.n8n/workflows.json
n8n export:credentials --all --output=/root/.n8n/credentials.json

這樣匯出的 credentials 仍是加密的,要搭配同一把金鑰才能匯入。官方也提醒,CLI 匯出只有 workflow 和 credentials,不含使用者與角色、執行紀錄、Variables 和實例設定:「a CLI backup is enough to move workflows between instances, but not enough to recover a full instance on its own.」所以它是備用,主要還是靠 Volume 加資料庫。

想趁搬家從 SQLite 換成 PostgreSQL,官方有 n8n export:entities --outputDir=./outputs 可以把整個資料庫的資料匯出,再用 import:entities 匯入另一種資料庫,官方寫明目前支援 SQLite 與 Postgres。

n8n 步驟 3:新環境用同一把金鑰還原,確認能跑

n8n 官方建議用 Docker 自架:「n8n recommends using Docker for most self-hosting needs.」安裝方式的比較頁裡,Docker Compose 標的是「Best for: Production deployments with databases and additional services.」

官方〈Back up and restore〉的完整還原是 5 步:停掉 n8n → 把 .n8n 資料夾放回原位 → 還原 PostgreSQL(有用的話)→ 還原環境變數,包括資料庫連線和自訂的 N8N_ENCRYPTION_KEY → 啟動 n8n。新環境要自己設的環境變數,對照 Zeabur 模板是這幾個:

變數模板裡的值新環境怎麼設
N8N_ENCRYPTION_KEY${PASSWORD}填步驟 1 抄下來的舊值,一個字都不能改
DB_POSTGRESDB_*帶 PostgreSQL 服務的值填新資料庫的連線資訊,密碼用新的
N8N_HOST${ZEABUR_WEB_DOMAIN}填新網域
WEBHOOK_URL${ZEABUR_WEB_URL}改設 N8N_WEBHOOK_URL,填新網址(見步驟 5)
N8N_RUNNERS_AUTH_TOKEN由 ${ZEABUR_ENVIRONMENT_ID} 組成的字串自己產生一組隨機值,n8n 與 task runner 兩邊設成一樣
GENERIC_TIMEZONEAsia/Taipei照舊

N8N_RUNNERS_AUTH_TOKEN 的部分,n8n 官方 Docker Compose 範本的註解是「Use a random secret you generate.」

映像版本的部分,模板固定在 n8n 2.39.7,但你的服務可能後來升級過,先看自己實際跑的版本。我們的建議是新環境先用同一個版本還原,確認正常再升級;官方也建議升級前先做完整備份。

用 CLI 匯入的話,官方提醒兩件事:匯入的 workflow 預設是停用的,要到介面上逐一發布;匯入前要先完成擁有者帳號設定,因為「the import commands need an existing user」。

還原完,打開幾個 credentials 按測試,或手動跑一個用到第三方服務的 workflow。能跑,代表金鑰對了。

我們實際試過:金鑰錯了,匯入照樣顯示成功

我們在自己機房的測試虛擬機上,用 n8n 官方的 Docker Compose(PostgreSQL 版,n8n 2.43.7)建了 1 組 credential 和 2 個 workflow,照上面的做法匯出、刪光、再還原:

做法結果
用 CLI 匯出 workflow 與 credentials(加密版、--decrypted 版各一次)每個指令 5.7–6.3 秒
刪掉兩個 volume,用同一份 .env(同一把金鑰)重新啟動23.8 秒就緒;匯入 credentials 6.2 秒、workflow 6.7 秒;ID 沒變,解密後的值也一樣
另起一套、換一把不同的金鑰,匯入加密版的 credentials顯示 Successfully imported 1 credential.,沒有任何錯誤
在換了金鑰的那套做一次要解密的動作(我們用 export:credentials --decrypted)這時才失敗:Credentials could not be decrypted. The likely reason is that a different "encryptionKey" was used to encrypt the data.
把 --decrypted 匯出的明文檔,匯入換了金鑰的那套正常

也就是說,匯入成功不代表金鑰對了。金鑰錯的話,要等 workflow 實際用到那組 credential 才會出錯,排程可能半夜才跑到。還原完一定要手動跑一個用到 credential 的 workflow,不要只看匯入訊息。

另外兩件事跟官方說明一致:用 CLI 匯出還原後,n8n 會要你重新建立擁有者帳號,因為使用者帳號不在 CLI 匯出裡,要保留帳號就要整個搬 PostgreSQL;--decrypted 的匯出檔打開就是明文的名稱和值,用完要刪,不能放進 git。

n8n 步驟 4:到各服務撤銷並重發 credentials

金鑰和資料庫密碼都在外洩的環境變數裡。Zeabur 狀態頁也寫明,這次確認遭未授權存取的,包含仍跑在已淘汰共享叢集上、用戶自己部署的 PostgreSQL 與 MySQL。拿到資料庫內容又拿到金鑰,就解得開裡面的 credentials。所以存在 n8n 裡的 credentials 都當成已外洩處理:

  1. 在新環境的 n8n 列出所有 credentials,一個一個對應到是哪個服務的金鑰。
  2. 到該服務的後台撤銷舊的、重發新的。各家怎麼換、去哪看有沒有被盜用,見〈Zeabur 金鑰外洩後要換哪些?〉。
  3. 回 n8n 把新的填進去,跑一次用到它的 workflow。

順序不要反過來。先撤銷舊的,Zeabur 上的 n8n 會馬上失效,新環境還沒好,自動化就斷了;先在新環境用舊金鑰跑起來,再逐一換,每換一個就驗一個。

模板部署時有一欄「Zeabur AI Hub API Key」。Zeabur 已在 9 月 22 日關閉 AI Hub,官方寫明「Existing API keys can no longer be used to send model requests through AI Hub.」workflow 裡如果用的是 AI Hub 的金鑰,要換成直接向模型供應商申請的金鑰。

N8N_ENCRYPTION_KEY 本身能不能換? 不能在原本的資料庫上直接換。n8n 官方〈Rotate encryption keys〉寫明,實例金鑰 N8N_ENCRYPTION_KEY「This key never changes.」那份文件說的輪換,換的是另一層「data encryption key」,主金鑰不變。

要換一把新的主金鑰,官方文件寫到的路是用 CLI 匯出解密的 credentials,再匯入另一個金鑰不同的新環境:

n8n export:credentials --all --decrypted --output=backups/decrypted.json

官方說明這個參數「You can use this to migrate from one installation to another that has a different secret key in the configuration file.」但這份檔案是明文,所有金鑰都看得到。官方的警告是:「Store it with the same care as the credentials themselves, and delete it once the restore is complete.」我們的建議是:只在新環境的機器上產生與使用,不要上傳到任何雲端硬碟或聊天軟體,匯入完當場刪掉。

另一條路是新環境直接用一把新金鑰,只匯入 workflow,credentials 在步驟 4 重發時手動填新的。這樣不會產生明文檔,代價是 CLI 匯入不帶使用者、執行紀錄和 Variables,要自己重建。兩條路都可以,看你比較在意執行紀錄,還是不想經手明文檔。

n8n 步驟 5:webhook 網址與 community nodes

webhook 網址:n8n 官方文件寫明,在反向代理後面跑時,要用 N8N_WEBHOOK_URL 手動設定,「so that n8n can display it in the editor UI and register the correct webhook URLs with external services」。官方也寫明,N8N_WEBHOOK_URL 從 n8n 2.35.0 起取代 WEBHOOK_URL,舊名稱還能用,但啟動時會出現棄用警告。Zeabur 模板用的是舊名稱 WEBHOOK_URL,新環境建議改用新名稱。

網址從 xxx.zeabur.app 換成自己的網域時,你自己貼到外部服務後台的 webhook 網址(例如金流通知、表單、Git 平台的 webhook)要一個一個改。舊的 zeabur.app 網址在 Zeabur 關閉後就連不到,沒辦法設轉址。

community nodes:手動安裝的 community nodes 放在 ~/.n8n/nodes,不在資料庫裡,pg_dump 和 CLI 匯出都不會帶到。整包搬 .n8n 資料夾的話會一起過去;只搬資料庫的話,就要在新環境重裝。搬家前先到 Settings 的 Community nodes 頁面,把裝了哪些套件和版本記下來。

官方列了四種安裝方式:介面上的節點面板(限已驗證節點)、介面安裝、命令列手動安裝(進容器在 ~/.n8n/nodes 跑 npm i),以及環境變數安裝。環境變數安裝從 n8n 2.21.0 起提供,用 N8N_COMMUNITY_PACKAGES 列出套件,適合固定的部署流程。但官方警告,啟用 N8N_COMMUNITY_PACKAGES_MANAGED_BY_ENV=true 時,不在清單裡的已安裝套件會被移除,清單要列齊再開。

Umami:資料全在 PostgreSQL,追蹤碼網址要改

Umami 模板(01NQCC)的 Umami 服務本身沒有掛 Volume,資料全在 PostgreSQL。搬家就是兩件事:把 PostgreSQL 匯出、在新環境還原(做法見〈Zeabur 資料庫備份怎麼帶走〉),再接上新的 Umami。Umami 官方安裝文件寫明目前支援 PostgreSQL(v12.14 以上)。

APP_SECRET:Umami 官方文件說它是「A random string used to secure authentication tokens. Each installation should have a unique value.」並提供產生方式 openssl rand -hex 32。Zeabur 模板設的是 HASH_SALT=${PASSWORD},現行官方變數表裡沒有 HASH_SALT 這個名字;依 Umami 原始碼,沒設 APP_SECRET 時會改用 DATABASE_URL。新環境照官方文件設一組新的 APP_SECRET,資料庫連線字串也用新密碼。

追蹤碼要改網址:Umami 官方文件寫明,「By default, Umami will send data to wherever the script is located.」網站上那段 <script> 的 src 指向哪個網址,資料就送到哪。Umami 從 xxx.zeabur.app 搬到新網址後,每個有裝追蹤碼的網站都要把 src 改成新網址,沒改的那段時間,數據就收不到。改完照官方的排錯方式,打開網站按 F12,在 Network 分頁確認有送到新的 Umami。

映像標籤是 postgresql-latest,每次重新部署拉到的版本可能不同。搬之前先確認目前實際跑的版本,新環境用同一版還原。

Ghost:content 資料夾和 MySQL 都要搬,官方匯出不含圖片

Ghost 模板(SHEU50)有兩個 Volume:Ghost 的 /var/lib/ghost/content,和 MySQL 的 /var/lib/mysql。Ghost 官方設定文件寫明,content 資料夾裡有 data、images、themes、logs、adapters 幾個子資料夾,上傳的圖片預設也存在 content/images。

搬法有兩種:

  1. 整包搬:MySQL 用匯出工具匯出(見〈Zeabur 資料庫備份怎麼帶走〉,模板的資料庫名稱預設是 zeabur、帳號預設是 root),content 用 Zeabur 的 Volume 備份帶走,新環境用同一版 Ghost 還原。
  2. 用 Ghost 官方匯出:到 Settings → Advanced → Import/Export,在 Export 分頁按 All data。自架站會下載一個 zip,內容是 export.json(內容與設定)、members.csv、post-analytics.csv、佈景主題的 zip,以及 routes.yaml 和 redirects.yaml。

第二種要注意:自架站的匯出不含圖片。Ghost 官方搬家指南原句:「Images and other media aren’t part of the self-hosted export, so you’ll need shell access to your server to copy them.」官方的做法是到 content 資料夾把 images 打包:

cd /var/www/ghost/content
zip -r images.zip images/*

這是官方以 Ubuntu 安裝為例的路徑,Zeabur 模板的 content 在 /var/lib/ghost/content。在 Zeabur 上,用 content 的 Volume 備份比較省事,圖片、佈景、設定一次帶走。

另外兩件事:

  • 網址:模板用環境變數 url 設成 https://${ZEABUR_WEB_DOMAIN}。Ghost 官方設定文件寫明 URL 在正式環境是必填,新環境要設成新網址。
  • 寄信與付費會員:模板裡 mail__options__auth__user、mail__options__auth__pass 預設是空的,你如果填過 SMTP 帳密,它在外洩的環境變數裡,要換。有付費會員的,官方指南寫明要先把新站接上原本的同一個 Stripe 帳號,再匯入會員。

搬完要驗的事

檢查怎麼看適用
credentials 解得開打開幾個 credentials 按測試,或手動跑一個用到它的 workflow;匯入顯示成功不算數,金鑰錯了匯入也會成功n8n
workflow 數量與狀態數量跟舊環境對得上;CLI 匯入後預設是停用,要逐一發布n8n
webhook 收得到從外部服務送一次測試事件,看執行紀錄有沒有進來n8n
排程有在跑等排程 workflow 的下一次執行時間,看有沒有紀錄n8n
community nodes 都在Community nodes 頁面的清單跟搬家前記的一樣,workflow 沒有出現找不到節點n8n
舊 credentials 已撤銷到各服務後台確認舊金鑰已刪除,n8n 裡用的是新的n8n
歷史數據都在抽一個網站,比對搬家前後同一段日期的瀏覽數Umami
追蹤碼送到新網址開網站按 F12,Network 分頁有送到新的 UmamiUmami
文章與圖片抽 5 篇文章,圖片都顯示Ghost
寄得出信送一封測試信,主旨標「測試請忽略」,收到就刪Ghost
沒有殘留舊網址頁面原始碼與設定搜 zeabur.app全部
備份檔在自己手上Volume 備份檔和資料庫匯出檔存在自己的電腦或儲存空間,不是只在 Zeabur 上全部

全部驗完、DNS 也切過去,再停掉 Zeabur 上的服務。停之前再備份一次,避免切換期間的新資料沒帶過去。

揭露

火曜領航有提供搬家、主機代管與金鑰輪換服務。這篇的步驟不需要找任何人也能自己做。

如果您的服務還在 Zeabur 上,需要人幫忙盤點、搬遷或輪換金鑰,可以到〈PaaS 停運搬家與資安檢查服務〉看四種做法,或直接填寫詢價表單,我們會在一個工作日內回覆搬遷順序建議。

常見問題

n8n 搬家後 credentials 全部失效怎麼辦?

常見原因是新環境的 N8N_ENCRYPTION_KEY 跟舊的不一樣。把舊值填回新環境的環境變數(或把舊的 .n8n/config 放回去),重新啟動即可。我們實測過,用錯的金鑰匯入 credentials 不會報錯,要到解密時才失敗,所以「匯入成功」不能當作金鑰正確。n8n 官方寫明,沒有原本的金鑰,還原的資料庫或加密的 credentials 匯出檔都解不開;舊金鑰真的找不到,就只能在新環境重新建立每個 credential。反正搬完也要重發,可以一起做。

N8N_ENCRYPTION_KEY 在哪裡找?

用 Zeabur 的 n8n 模板部署的,在 n8n 服務的「環境變數」頁,變數名稱就是 N8N_ENCRYPTION_KEY。沒有設這個環境變數的 n8n,金鑰在 .n8n 資料夾的 config 檔裡,官方寫明 n8n 首次啟動時會自動產生並存在那裡。

n8n 可以裝在 VPS 嗎?

可以。n8n 官方文件寫明「You can self-host n8n on your own infrastructure, on-premises, or in a private cloud」,並提供 DigitalOcean、Hetzner、AWS、Google Cloud 等的安裝指南,建議用 Docker 或 Docker Compose。官方也提醒,自架需要會設定伺服器與容器、管理資源、維護安全;不熟悉主機管理的,官方建議改用 n8n Cloud。

community nodes 要重裝嗎?

看你怎麼搬。手動安裝的 community nodes 放在 .n8n 資料夾的 nodes 子資料夾,不在資料庫裡。整包搬 .n8n 資料夾會一起帶過去;只搬資料庫或用 CLI 匯出,就要在新環境重裝。搬家前先把 Community nodes 頁面上的套件名稱與版本記下來,搬完對一次。

Ghost 的圖片怎麼一起搬?

Ghost 官方寫明,自架站從後台匯出的檔案不含圖片與其他媒體,要另外從伺服器的 content/images 複製。在 Zeabur 上,Ghost 的 Volume 掛在 /var/lib/ghost/content,用 Volume 備份可以把圖片、佈景主題一起帶走;新環境把它放回 Ghost 的 content 資料夾即可。

參考來源

以上資料皆於 2026 年 10 月 18–19 日查詢。

最後更新: