Skip to content

Migrate from Vercel ​

On Zenavo a Next.js app runs as one long-running server (next start) instead of serverless functions, and a static site is served by Caddy. Most apps move without code changes.

How Vercel maps to Zenavo ​

VercelZenavo
ProjectA service in a project
Git deployments of the production branchDeploy on push
Preview deploymentsNo equivalent: add a service that tracks another branch, or clone the project
Serverless and Edge FunctionsPart of the one Next.js server
Environment variablesVariables; NEXT_PUBLIC_* as build arguments
vercel.json redirects, rewrites and headersnext.config.js, or your static server's config
Vercel Postgres, KV, BlobKeep the provider, or move to database services
Cron JobsNo scheduled jobs yet: run a worker service with a scheduler

1. Deploy the app ​

  1. Add a server and create a project.
  2. Add Service → GitHub, pick the repository, and set the root directory if the app is in a monorepo.
  3. Follow the Next.js or Static Sites guide: Next.js builds with next build and starts with next start; Vite and other static builds are served from their output folder.

Things that behave differently from Vercel:

  • Incremental Static Regeneration and the image cache work with next start, but their cache lives in the container and starts empty after each deploy.
  • Middleware runs in the Node.js server, not at an edge location.
  • Redirects, rewrites and headers in vercel.json are not read. Move them to redirects(), rewrites() and headers() in next.config.js.

2. Copy the variables ​

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

Paste the lines under the service's Variable tab → Edit Raw Variables, leaving out the VERCEL_* ones. Move every NEXT_PUBLIC_* variable (and VITE_* for static sites) to Settings → Build → Build arguments, because they are needed while building. Delete the file afterwards.

3. Data ​

Databases from the Vercel Marketplace (Neon, Upstash, Supabase and others) keep working from Zenavo through their connection strings. To bring PostgreSQL onto your server instead, dump it as plain SQL with pg_dump --no-owner --no-acl "$POSTGRES_URL" | gzip > vercel.sql.gz, then upload and restore it under a new PostgreSQL service's Backup & Restore tab (Uploading a backup).

4. Switch the domain ​

Bind the domain under Networking, then point it at the server with an A record. If the domain uses Vercel's nameservers, change the record at Vercel DNS or move the nameservers first (Domains & HTTPS).

Not affiliated with Zeabur.