跳到正文

從 Vercel 遷移 ​

在 Zenavo 上,Next.js 應用以一個長期執行的伺服器(next start)執行,而不是 serverless 函式;靜態網站由 Caddy 提供。大多數應用無需修改程式碼就能遷移。

Vercel 與 Zenavo 的對應關係 ​

VercelZenavo
Project專案中的一個服務
生產分支的 Git 部署推送時部署
Preview 部署沒有對應功能:新增一個跟蹤其他分支的服務,或者複製專案
Serverless 與 Edge Functions都在同一個 Next.js 伺服器裡
環境變數變數;NEXT_PUBLIC_* 作為建置參數
vercel.json 中的 redirects、rewrites 和 headersnext.config.js,或靜態伺服器的設定
Vercel Postgres、KV、Blob繼續使用原服務供應商,或遷移到資料庫服務
Cron Jobs暫不支援定時任務:執行一個帶排程器的 worker 服務

1. 部署應用 ​

  1. 新增伺服器並建立專案。
  2. 新增服務 → GitHub,選擇儲存庫;如果應用在 monorepo 中,設定根目錄。
  3. 按照 Next.js 或靜態網站指南操作:Next.js 用 next build 建置、next start 啟動;Vite 等靜態建置從輸出資料夾提供。

與 Vercel 行為不同的地方:

  • 增量靜態再生(ISR)和圖片快取 在 next start 下可以工作,但快取儲存在容器裡,每次部署後都從空開始。
  • Middleware 在 Node.js 伺服器中執行,而不是在邊緣節點。
  • vercel.json 中的 redirects、rewrites 和 headers 不會被讀取。請把它們移到 next.config.js 的 redirects()、rewrites() 和 headers() 中。

2. 複製變數 ​

sh
vercel env pull .env.production --environment=production

把這些行貼上到服務的 變數 分頁 → 編輯原始變數,去掉 VERCEL_* 開頭的變數。把所有 NEXT_PUBLIC_* 變數(靜態網站則是 VITE_*)移到 設定 → 建置 → 建置參數,因為建置時就需要它們。完成後刪除這個檔案。

3. 資料 ​

來自 Vercel Marketplace 的資料庫(Neon、Upstash、Supabase 等)在 Zenavo 上透過連線字串仍然可以繼續使用。如果想把 PostgreSQL 搬到自己的伺服器上,用 pg_dump --no-owner --no-acl "$POSTGRES_URL" | gzip > vercel.sql.gz 匯出純 SQL,然後在新的 PostgreSQL 服務的 備份與還原 分頁上傳並還原(上傳備份)。

4. 切換網域 ​

在 網路 中繫結網域,然後用 A 記錄 把它指向伺服器。如果網域使用 Vercel 的 nameserver,請在 Vercel DNS 中修改記錄,或者先遷移 nameserver(網域與 HTTPS)。

與 Zeabur 無關聯。