Move from Vercel to Naijacloud
Your Next.js app running on Naijacloud as a web service, with its environment variables, its Postgres data and its domain, and the Vercel project kept as a rollback.
What things are called here
Before you move: what Vercel has that we don't
- A global edge network. Static files and functions served from many locations; we serve from your service’s region.
- Edge Functions and the Edge Runtime.
- Incremental Static Regeneration served from the edge.
- Web Analytics and Speed Insights.
- Comments on preview deployments.
- Functions that scale to zero between requests. A web service here is always running.
- A SOC 2 report.
If your app depends on one of these, stay on Vercel for now.
The cutover, in order
The order is what keeps the site up. Each step below matches one point on this line.
- 01Lower DNS TTL48 hours before. Set the record to 60 seconds.
- 02Deploy here and add the domainTraffic still goes to Vercel.
- 03Certificate issuedWait for it before you touch DNS, where you can.
- 04Copy the dataDump, restore, compare the counts.
- 05Switch DNSPoint the record at Naijacloud.
- 06Keep the old project 7 daysGoing back is one DNS change.
Lower the DNS TTL, 48 hours before
At your DNS provider, set the TTL on your domain’s record to 60 seconds and wait at least as long as the old TTL. If Vercel runs your DNS (the domain uses Vercel’s nameservers), you’ll make the record changes in Vercel’s dashboard; that’s fine, as long as you leave the nameservers alone until this move is done.
Deploy here and add the domain
Decide the shape first. If next.config sets output: "export", deploy the out folder as a static site. Otherwise create a Web service from your GitHub repository. Naijacloud detects Next.js and fills in npm ci && npm run build and npm start, which runs next start.
Pull your production variables from Vercel:
Open the file and drop every VERCEL_ and NEXT_PUBLIC_VERCEL_ variable: Vercel’s runtime sets those, and here they mean nothing. If your code builds absolute links from VERCEL_URL, give it your own variable instead. Then load the rest onto the web service, either through Variables → Bulk edit, or with the CLI:
Create a Database (Postgres) and set DATABASE_URL on the web service to its Internal URL. If your app migrates its schema, run the migration in the start command, for example npx prisma migrate deploy && npm start. Redeploy and test the app on its naijacloud.app address against the empty database.
Then open Domains, enter your domain in Custom domain and click Add domain. Add the records it lists that prove ownership and issue the certificate. Don’t change the record that routes traffic yet.
Wait for the certificate
Where the Domains table lists ownership and HTTPS records, the certificate is issued while traffic is still on Vercel. Wait until the domain shows Verified · HTTPS ready.
If the table lists only one routing record (an A record, as it does for a root domain and in some regions), the certificate is issued in the minutes after the record points here. Plan the switch for a quiet hour.
Copy the data
Skip this step if your data stays where it is: you can keep a Neon or Supabase database and only move the app, by setting DATABASE_URL to the provider’s connection string. The database then sits outside our private network.
To move it, use PostgreSQL 18 client tools. Dump with the provider’s non-pooled connection string (POSTGRES_URL_NON_POOLING on Vercel Postgres): a dump through a transaction-mode pooler can fail partway. On Naijacloud, add your IP under the database’s External access → Specific IPs, switch Connection to External · TLS and copy the Connection URL.
How to know the restore is complete. Run analyze; on both databases first — n_live_tup is only an estimate until you do. Then compare the table list, exact counts on your two or three largest tables, the sequence values, and the extension list. Matching row counts with a sequence still sitting at 1 means the next insert will collide.
Vercel Cron Jobs call a path on your app on a schedule. Recreate each one as a Cron job whose command calls the same path, for example curl -fsS https://my-app.naijacloud.app/api/digest, with the same schedule in UTC.
Switch DNS
At your DNS provider, replace Vercel’s record with the routing record shown in Domains. Don’t keep both: two A records for one name send half your visitors to each platform. With a 60-second TTL most visitors follow within minutes. Leave the domain attached to the Vercel project.
Keep the old project for 7 days
Leave the Vercel project, its last production deployment and the domain on it. If something goes wrong, point the record back at Vercel.
- The Vercel project and its last production deployment
- The domain attached to the Vercel project
- Your old database, untouched
- The app.dump file
- The 60-second TTL on your record
To go back: point the record at Vercel again. The last production deployment is still there.