從 Heroku 遷移
本指南將帶您逐步將應用程式從 Heroku 遷移到 Zeabur。大多數 Heroku 應用程式都是以 Git 為基礎,並使用標準語言 buildpack,因此遷移過程非常順暢——Zeabur 能零設定自動偵測您的專案。
開始之前
- 一個 Zeabur 帳號。
- 您的應用程式原始碼存放在 Git 儲存庫中。
- 可存取您的 Heroku 主控台或 CLI(
heroku)。
步驟 1:連結 Git 儲存庫
大多數 Heroku 應用程式已經有對應的 Git 儲存庫。如果您的應用程式也是如此:
- 登入 Zeabur 主控台。
- 建立新專案並選擇專用伺服器(或購買新伺服器)。
- 點選 Add Service → Git,連結您的 GitHub 帳號。
- 選擇您的應用程式所在的儲存庫。
Zeabur 會自動偵測 Node.js、Python、Ruby、Go、Java、PHP 及許多其他語言——不需要 Procfile。
如果您的程式碼僅存在於 Heroku Git 中(不在 GitHub 上),請先將它推送到 GitHub 儲存庫:
heroku git:clone -a my-app
cd my-app
git remote add github https://github.com/your-username/my-app.git
git push github main步驟 2:轉移環境變數
Heroku 將設定儲存在 Config Vars 中。匯出它們並新增到 Zeabur:
-
列出您的 Heroku config vars:
heroku config -a my-app -
在 Zeabur 主控台中,點選您的服務並前往 Variables 分頁。
-
逐一新增每個變數,或使用 Bulk Edit 功能一次貼上多組鍵值對。
您不需要在 Zeabur 上設定 PORT。Zeabur 會自動分配並注入連接埠。如果您的應用程式會從環境變數讀取 PORT(大多數 Heroku 應用程式都會),則無需任何調整即可正常運作。
步驟 3:遷移資料庫
如果您使用 Heroku Postgres:
-
建立備份並下載:
heroku pg:backups:capture -a my-app heroku pg:backups:download -a my-app這會下載一個
latest.dump檔案,為 Postgres 自訂格式。 -
在 Zeabur 上建立資料庫:點選 Add Service → 資料庫 → PostgreSQL。
-
匯入資料,使用 Zeabur PostgreSQL 的連線字串:
pg_restore -d "your-zeabur-postgres-connection-string" --no-owner latest.dump -
更新應用程式的資料庫連線:在 Zeabur 的 Variables 分頁中設定
DATABASE_URL。您可以使用 Zeabur 的變數參照${POSTGRES_URI}來自動注入資料庫服務的連線字串。
若使用 Heroku Redis,可使用 redis-cli --rdb 匯出資料,再匯入到 Zeabur 的 Redis 服務。
步驟 4:替換 Heroku Add-on
Heroku 的 add-on 在 Zeabur 中有對應的替代方案,或可作為外部服務連接:
| Heroku Add-on | Zeabur 對應方案 |
|---|---|
| Heroku Postgres | 資料庫 → PostgreSQL |
| Heroku Redis | 資料庫 → Redis |
| Heroku Scheduler | 使用系統 cron 或排程服務 |
| Papertrail(日誌) | 主控台內建日誌檢視器 |
| SendGrid | 透過環境變數連接 |
| Cloudinary | 透過環境變數連接 |
對於屬於外部 SaaS 產品的 add-on(如 SendGrid、Cloudinary 等),只需繼續使用它們——將 API 金鑰轉移到 Zeabur 的 Variables 分頁即可。
步驟 5:設定自訂網域
- 在 Zeabur 主控台中,點選您的服務並前往 Networking 分頁。
- 點選 Generate Domain 取得免費的
.zeabur.app子網域,或點選 Custom Domain 新增您自己的網域。 - 更新您的 DNS 記錄:
- 移除舊的 Heroku DNS 目標(指向
*.herokuapp.com或 Heroku SSL 端點的 CNAME)。 - 新增 CNAME 記錄,指向 Zeabur 提供的目標位址。
- 移除舊的 Heroku DNS 目標(指向
步驟 6:驗證並上線
- 推送一個 commit 來觸發部署(或在主控台點選 Redeploy)。
- 檢查 Zeabur 的 Logs 分頁,確認應用程式成功啟動。
- 測試應用程式的關鍵流程(身份驗證、資料庫讀寫、API 呼叫)。
- 確認無誤後,將正式環境的 DNS 指向 Zeabur。
主要差異:Heroku vs Zeabur
| 功能 | Heroku | Zeabur |
|---|---|---|
| 設定方式 | Procfile + buildpack | 自動偵測(零設定) |
| 部署方式 | git push heroku main | Git push 到 GitHub(自動部署) |
| 擴展 | Dyno 類型(Basic、Standard、Performance) | 按使用量計費,自動擴展 |
| 休眠行為 | Eco dyno 閒置 30 分鐘後休眠 | 不休眠——持續運行 |
| Slug 大小限制 | 壓縮後 500 MB | 無 slug 大小限制 |
| 資料庫 | Heroku Postgres(受管理) | 內建資料庫(PostgreSQL、MySQL、MongoDB、Redis 等) |
| 附加服務 | Heroku Add-on 市集 | 內建服務 + 外部服務 |
| 計價模式 | 按 dyno 月費計價 | 按使用量計費,用多少付多少 |
Heroku 的 Procfile 在 Zeabur 上不是必要的。Zeabur 會自動偵測您的啟動指令。如果需要自訂,可以在服務設定的 Build & Deploy 中進行設定。
完成了!您的 Heroku 應用程式現在已在 Zeabur 上運行,不再需要 dyno、Procfile 和 slug 大小限制。如果遇到任何問題,歡迎到我們的 社群論壇 尋求協助。