跳到正文

从 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 无关联。