從 Vercel 遷移
在 Zenavo 上,Next.js 應用以一個長期執行的伺服器(next start)執行,而不是 serverless 函式;靜態網站由 Caddy 提供。大多數應用無需修改程式碼就能遷移。
Vercel 與 Zenavo 的對應關係
| Vercel | Zenavo |
|---|---|
| Project | 專案中的一個服務 |
| 生產分支的 Git 部署 | 推送時部署 |
| Preview 部署 | 沒有對應功能:新增一個跟蹤其他分支的服務,或者複製專案 |
| Serverless 與 Edge Functions | 都在同一個 Next.js 伺服器裡 |
| 環境變數 | 變數;NEXT_PUBLIC_* 作為建置參數 |
vercel.json 中的 redirects、rewrites 和 headers | next.config.js,或靜態伺服器的設定 |
| Vercel Postgres、KV、Blob | 繼續使用原服務供應商,或遷移到資料庫服務 |
| Cron Jobs | 暫不支援定時任務:執行一個帶排程器的 worker 服務 |
1. 部署應用
- 新增伺服器並建立專案。
- 新增服務 → GitHub,選擇儲存庫;如果應用在 monorepo 中,設定根目錄。
- 按照 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)。