从 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)。