2026 年 10 月 17 日更新
Zeabur 宣布 12 月 31 日全面停止營運,共享叢集 12 月 1 日就會暫停。 先說一句:謝謝 Zeabur 這幾年讓台灣開發者可以用中文、用熟悉的介面把東西部署上線。 我們同樣在做基礎設施,知道這條路有多難。
接下來六週大家手上的服務要搬家。這一頁分三段:今天就該做的止血清單、不管搬去哪都適用的搬家順序、以及搬到 Containarium 長什麼樣。 前兩段跟我們沒有關係,直接拿去用。
今天
換掉所有秘密
兩次事件都外洩了環境變數,key 在外面已經在被用了。
12 月 1 日
共享叢集暫停
專用伺服器同日停止續費,依各自到期日關機。
12 月 31 日
全面關閉
資料刪除日與最後匯出期限尚未公布。不要等到這天。
第一段
8 月 27 日那次外洩了專案的環境變數;10 月 14 日那次攻擊者拿到共享叢集的管理權限,直接在使用者容器裡執行指令,並讀取了平台資料庫。 只要你的 key 還在外面能用,它就是最緊急的事。照這個順序做:
OpenAI、Anthropic、Gemini、OpenRouter 全部 revoke 再重發,並查 10 月 14 日之後的用量。這些 key 已經被觀察到在外面被盜用,是最先失血的地方。
AWS、Stripe、SMTP、OAuth client secret、webhook secret。換 webhook secret 的同時要更新接收端。
先在 Postgres / MySQL / Redis 內部改密碼,再更新環境變數,再重啟每一個連它的服務。只改環境變數,資料庫本身什麼都沒變。
所有 *_SECRET 與 JWT_SECRET。換 JWT_SECRET 會把所有使用者登出,先公告再換。
先匯出所有 workflow,再動 N8N_ENCRYPTION_KEY。只換金鑰不匯出,既有 credential 會變成一堆解不開的密文。底層的服務憑證各自去原服務輪替,然後在新的 n8n 重建。
Postgres、Redis 若沒有外部系統直連,把 public access 關掉。關之前先確認真的沒有人在連。
重新產生 Zeabur API token 與 zSend / Email key。有 Google Cloud 專用伺服器的人,改 root 密碼並清掉不認識的 SSH key。
每個 key、每個服務的每日用量與帳單截圖留下來。餘額退款與資安賠償要分開申請,用量紀錄不一定會留很久。
第二段
這段沒有任何一步需要 Containarium。搬去 Render、Fly、自己租 VM 都一樣。
| 步驟 | 會踩到的坑 |
|---|---|
| 1. 確認每個服務的到期日 | 專用伺服器是各自到期就關,不是統一 12/31。先排出最早關的那一台。 |
| 2. 資料庫 dump 並三重核對 | row count 從統計值來的不可靠;row count 一樣內容不一定一樣。對幾張關鍵表的 content hash。Postgres 大版本換了掛載路徑會進 restart loop。 |
| 3. 上傳的檔案另外搬 | volume 裡的檔案不在 DB dump 裡。n8n 的 community node 也不在 dump 裡。 |
| 4. 環境變數全部抄一份 | Zeabur 自動注入的 ${ZEABUR_*} 搬過去會變空字串。NEXT_PUBLIC_* 這類是 build time 固定的,要在 build 之前設好。 |
| 5. 新網址先測通 | 用一個新 subdomain 把整條業務流程走一遍,不要直接切正式網域。 |
| 6. 憑證與 DNS | Cloudflare 橘雲開著 Let's Encrypt 會驗證失敗,先轉 DNS only。切之前把 TTL 調低。 |
| 7. 切換 | 舊端停寫入、再 dump 一次、核對、切 DNS。舊的留一週當 rollback。 |
| 8. 切完之後 | 確認告警真的會送、備份任務真的有在跑、auto-deploy 沒有被新防火牆擋掉。備份不要只留在同一台機器上。 |
坑的清單整理自台灣社群這幾天公開的搬家經驗,以及 Zeabur 官方狀態頁。若發現有誤或有新的坑, 開 issue 告訴我們,我們會更新這頁。
第三段
這次事件最痛的一點:一組共享叢集的管理權限外洩,所有租戶的容器一起被進去。 這不只是一家公司的問題,是「大家擠在同一個叢集、由平台持有所有鑰匙」這個架構的問題。 Containarium 一開始就選了另一條路。
平台哪天不在了,你的東西還在你手上:程式碼在你的 git、資料在你的備份、秘密在你能匯出的地方、網域在你的註冊商。 搬家變成「重新部署、切 DNS」,而不是「從一個快關門的平台把資料挖出來」。
我們不會跟你說的話
下面是用 Containarium Cloud 的流程。自架 OSS 的話指令一模一樣,只是第 0 步多一行安裝。
開一台 box
在 Cloud 建立,或用 CLI。拿到一個 ssh 別名。
ssh 進去,把原本的 compose 跑起來
Zeabur 上的服務本來就是容器,大多可以直接寫成 compose。
把 dump 灌回去
pg_restore 進新的 Postgres,照第二段核對。
掛上網域
expose-port 之後 HTTPS 憑證自動簽發。先用新 subdomain 測,再切正式網域。
秘密與備份收好
新的 key 放進 secrets,開加密備份,金鑰自己留。
# 0. (只有自架才需要)在一台 Ubuntu 24.04 VM 上安裝
$ curl -fsSL https://containarium.dev/install.sh | sudo bash
# 1. 開一台 box,並寫好 ssh 設定
$ containarium create n8n
$ containarium ssh-config sync
# 2. 進去,把 n8n + postgres 跑起來
$ ssh n8n
n8n$ mkdir app && cd app && vim docker-compose.yml # n8n + postgres
n8n$ docker compose up -d
# 3. 把 Zeabur 的 dump 灌回去,然後核對
n8n$ docker compose exec -T postgres pg_restore -U n8n -d n8n < zeabur.dump
n8n$ docker compose exec postgres psql -U n8n -c 'select count(*) from workflow_entity'
# 4. 掛上網域,HTTPS 自動
$ containarium expose-port n8n --container-port 5678 --domain n8n.example.com
# 5. 新 key 放 secrets,開加密備份
$ containarium secrets set n8n N8N_ENCRYPTION_KEY "$(openssl rand -hex 32)"
$ containarium backup create n8n
完整的 CLI 說明在 GitHub README。 我們會在這週錄一支 60 秒的實際搬家影片,放在這裡。
Zeabur 用戶限定・到 2026/12/31
註冊 Containarium Cloud 之後,把你 Zeabur 帳戶餘額的截圖寄到 [email protected], 我們把等額的 Containarium 點數加到你的帳戶。Zeabur 那邊的退款你照樣去申請,這份是另外送的。
註冊 Containarium Cloud搬家卡住了
依 2026 年 10 月 17 日的公告:共享叢集 12 月 1 日暫停運行,專用伺服器 12 月 1 日起停止續費並在各自到期日關機,所有服務最晚 12 月 31 日全面關閉。資料刪除日期與最後匯出期限尚未公布,不要等到那天才搬。
先止血,再搬家。兩次資安事件可能外洩了環境變數與資料庫內容,所以第一步是撤銷並重發所有 AI key 與第三方 key、在資料庫內部更改密碼、輪替 JWT_SECRET 等應用秘密,n8n 要先匯出 workflow 再碰加密金鑰。這些與搬去哪無關,今天就做。
開一台 box,ssh 進去用 docker compose 把原本的服務跑起來,把資料庫 dump 灌回去,再用 expose-port 掛上你的網域,HTTPS 憑證自動簽發。你拿到的是一台完整的 Linux 主機,不是一個平台抽象層。
Containarium 整個平台以 Apache 2.0 開源,同一套 CLI 可以在你自己的 Ubuntu VM 上五分鐘架起來。你的程式碼在你的 git、資料庫 dump 和備份在你手上、秘密在你能匯出的 secrets 裡、網域在你的註冊商。平台哪天不在了,你的東西還在你手上。