How to Deploy Next.js Without Vercel in 2026: Five Routes, Real Config
Deploy Next.js without Vercel in 2026: a Node server or Docker keeps every feature, Cloudflare Workers starts at $5/mo; Netlify Pro has no seat fee. Steps, config.

Key facts5 routes compared: Node.js server on a VPS, Docker container (Coolify, Kubernetes, Cloud Run)…
- 5 routes compared: Node.js server on a VPS, Docker container (Coolify, Kubernetes, Cloud Run), Cloudflare Workers (vinext or OpenNext), Netlify (OpenNext adapter), Static export
- Node.js server on a VPS (best for: One app, one server, full control): $6/mo for a 1 GiB DigitalOcean Droplet
- Docker container (Coolify, Kubernetes, Cloud Run) (best for: Teams that want git-push deploys on their own servers): Coolify self-hosted is free
- Cloudflare Workers (vinext or OpenNext) (best for: Global edge delivery and no bandwidth bill): $5/mo Workers Paid; a free plan exists
- Netlify (OpenNext adapter) (best for: A Vercel-like workflow without per-seat pricing): $20/mo Pro with unlimited members
Run next build and next start on any host with Node.js, or ship output: "standalone" in a Docker image: the Next.js docs list both as supporting every feature. A 2 GiB DigitalOcean Droplet costs $18/mo with Coolify on it for free. Cloudflare Workers ($5/mo) and Netlify Pro ($20/mo) run Next.js through their own adapters. Prices read on vendor pages on October 18, 2026.
The choice is less about price than about which Next.js features your app leans on. A single server with a persistent disk needs almost no configuration. Several instances, a serverless platform or a CDN in front each add work, because the cache, the Server Functions key and the build ID stop being local.
Toolradar data: Toolradar tracks 317 hosting and deployment tools as of October 17, 2026. Over the 30 days to that date, Vercel drew the most compare-page visits in the category (127), ahead of Cloudflare Workers (111) and Netlify (90), so the buyers weighing a move are looking at the same two platforms this page covers.
The five routes at a glance
The Next.js deploying guide groups every option into four types, and the adapter type splits in two for this page because Cloudflare and Netlify work differently.
| Route | Feature support (Next.js docs) | Entry price | Best for |
|---|---|---|---|
| Node.js server on a VPS | All features | $6/mo for a 1 GiB DigitalOcean Droplet | One app, one server, full control |
| Docker container (Coolify, Kubernetes, Cloud Run) | All features | Coolify self-hosted is free | Teams that want git-push deploys on their own servers |
| Cloudflare Workers (vinext or OpenNext) | Varies by adapter | $5/mo Workers Paid; a free plan exists | Global edge delivery and no bandwidth bill |
| Netlify (OpenNext adapter) | Varies by adapter | $20/mo Pro with unlimited members | A Vercel-like workflow without per-seat pricing |
| Static export | Limited: no server features | Whatever your file host charges | Marketing sites and docs with no server code |
Prices come from the DigitalOcean Droplet pricing, Coolify pricing, Cloudflare Workers pricing and Netlify pricing pages, read on October 18, 2026. Usage beyond each plan's allowance is not included.
Step 1: List the features that need a server
Before you pick a host, check which parts of your app depend on a running Next.js server. The answer decides whether static export is even possible and which adapter gaps can hurt you.
- Image optimization.
next/imageworks with zero configuration undernext start. On a static export it needs a custom loader, and the images are optimized at request time, not at build. - Proxy. It needs the incoming request, so static export drops it entirely. A Node server runs it with no setup.
- ISR and on-demand revalidation. These share one server cache, stored on the local disk of each instance by default. That is fine for one server and wrong for three.
- Server Functions. Their closure variables are encrypted with a key generated per build, which matters as soon as you run more than one instance.
- Streaming and Suspense. They work self-hosted, but every proxy and load balancer in the path must pass chunked responses through without buffering.
If none of these appear in your code, static export is the cheapest route by a wide margin. If several do, a Node server or Docker keeps them working without adapter caveats.
Route A: a Node.js server behind nginx
This is the shortest path and the one the self-hosting guide treats as the baseline. Your package.json needs build and start scripts, the server needs Node.js 20.9 or newer (the current minimum in the installation docs), and that is enough to serve every feature.
- Add
output: "standalone"tonext.config.js. The build then writes.next/standalonewith a minimalserver.jsand only thenode_modulesfiles the app traces to, so the server does not need a full install. - Copy the static files the standalone server does not copy on its own:
cp -r public .next/standalone/ && cp -r .next/static .next/standalone/.next/. Skip this and every CSS file and image returns 404. - Start it with
PORT=3000 HOSTNAME=127.0.0.1 node .next/standalone/server.jsunder systemd or another process manager, so it restarts on crash and on reboot. - Put nginx in front. The Next.js docs recommend a reverse proxy rather than exposing the Node server, because it absorbs malformed requests, slow-connection attacks, payload limits and rate limiting.
- Turn off proxy buffering if you stream. The docs show a
headers()rule innext.config.jsthat setsX-Accel-Buffering: noon every path; without it nginx holds the response until the render finishes and Suspense boundaries arrive all at once.
On shutdown, send SIGTERM and wait. The server finishes in-flight requests and runs pending after() callbacks first, and the docs recommend a drain period of 10 to 30 seconds. A deploy script that kills the process outright drops that work.
The weak point is the server itself: you patch the OS, renew certificates and watch the disk, and a single Droplet is a single point of failure. For a side project or an internal tool, that trade is usually worth it; for a customer-facing app with an uptime promise, plan a second server and read Step 2 first.
Route B: a Docker image on Coolify or any container host
Docker gives the same full feature set as a Node server, packaged so the same image runs on a laptop, a VPS or a cluster. Next.js maintains a standalone Docker example that builds a minimal production image from the standalone output, and the deploying guide links provider guides for DigitalOcean, Fly.io, Google Cloud Run, Render and SST.
Coolify is the closest thing to Vercel's git-push flow on your own hardware. Its installation docs ask for 2 CPU cores, 2 GB of RAM and 10 GB of free disk, install it with one script, and open the dashboard on port 8000. On DigitalOcean the smallest Droplet that meets the CPU and RAM floor is 2 GiB with 2 vCPUs, the $18 size in the cost table below.
The catch with containers is configuration that used to be implicit. NEXT_PUBLIC_ variables are inlined into the JavaScript bundle at build time, so one image cannot carry different public values per environment. Server-only variables read during dynamic rendering do resolve at runtime, which is what lets you promote one image from staging to production.
Route C: Cloudflare Workers with vinext or OpenNext
Cloudflare's Next.js guide now recommends vinext, a Vite plugin that reimplements the Next.js API so you keep your app/, pages/, next.config.js and public/ folders, though it is still in beta and not yet a safe default for a revenue-critical app. Run npx vinext check first, then npx vinext init, and deploy with npx @vinext/cloudflare deploy; Cloudflare lists image optimization as only partially supported.
The older path is the OpenNext Cloudflare adapter, @opennextjs/cloudflare. It supports every minor of Next.js 16 and the latest minors of 14 and 15, and covers the App Router, ISR, image optimization and middleware. Two limits shape the decision:
- Worker size. The compressed worker can be 3 MiB on the free plan and 10 MiB on Workers Paid. A large dependency tree can push you onto the paid plan before traffic does.
- No edge runtime lines. The OpenNext setup guide tells you to remove
export const runtime = "edge"from source files, and Node middleware from Next.js 15.2 is not supported yet.
Setup means npx @opennextjs/cloudflare migrate, or by hand: install the adapter and Wrangler 3.99.0 or later, add a wrangler.jsonc with the nodejs_compat flag, and add preview and deploy scripts that run opennextjs-cloudflare build first. Add .open-next to .gitignore.
The pricing is the draw. That paid plan includes 10 million requests and 30 million CPU milliseconds included, then $0.30 per extra million requests. Static asset requests are free and unlimited, and Cloudflare charges nothing for bandwidth.
Route D: Netlify with zero config
Netlify is the move that changes the least. Its Next.js docs cover Next.js 13.5 and later through @netlify/plugin-nextjs, an open-source OpenNext adapter that Netlify updates on each build, so there is nothing to configure. ISR with on-demand revalidation, Server Actions and skew protection are supported, middleware runs as Edge Functions, and next/image goes through Netlify Image CDN.
The limits are narrow but real. Node middleware cannot use C++ addons or the filesystem, rewrites cannot point at files in public, and client-side fetch calls do not carry the deployment identifier.
Billing is credit-based rather than per seat: Pro covers unlimited members and 3,000 credits a month, which is why it suits teams that add developers often. A production deploy costs 15 credits, bandwidth 20 credits per GB, compute 10 credits per GB-hour and web requests 2 credits per 10,000. A team that deploys often should count deploys first: at 15 credits each, 3,000 credits cover 200 production deploys and nothing else. Extra credits on Pro cost $10 per 1,500 once auto recharge is on.
Route E: static export
Set output: "export", run the build, and upload the HTML, CSS and JavaScript to any static host: an S3 bucket, nginx, Apache or GitHub Pages. It is the cheapest and most portable route, and the least capable one.
Static export drops everything that needs a request: proxy, ISR, Server Functions, dynamic rendering. It suits marketing sites, docs and blogs, and it leaves a door open. The deploying guide notes you can start static and add server features later by moving to one of the other routes.
Step 2: Settings for more than one instance
A single next start process on a persistent disk works out of the box. The moment you run two containers behind a load balancer, or any serverless setup, four settings become mandatory.
| Setting | What breaks without it | Fix from the Next.js docs |
|---|---|---|
| Server Functions key | "Failed to find Server Action" errors when a request hits another instance | Set NEXT_SERVER_ACTIONS_ENCRYPTION_KEY at build time, a base64 AES key of 16, 24 or 32 bytes |
| Build ID | Instances built separately disagree about the version | Return the git hash from generateBuildId, or set deploymentId |
| Deployment ID | Missing assets and failed navigations during rolling deploys | Set deploymentId; on a mismatch Next.js does a full reload instead |
| Shared cache | Each pod serves its own stale copy of ISR pages | A cacheHandler backed by Redis or S3, with cacheMaxMemorySize: 0 |
The cache handler is the one teams underestimate. The docs ask it to store entries where every instance can reach them, cap the store's size, serialize Buffer and Map values that JSON cannot carry, and keep a tag index in the shared store so revalidateTag on one instance clears every instance. Skip the serialization and client navigations fail with errors like segmentData.get is not a function.
What a 3-developer team pays on each route
The scenario is one Next.js app and three developers who all deploy. Each line uses the plan's base price only, so traffic above the included allowance adds to every row.
| Route | Plan | Monthly price | What the price includes |
|---|---|---|---|
| Vercel (the baseline) | Pro, 3 deploying seats | $60 | Platform fee with 1 seat and a usage credit of the same amount, plus 2 extra seats at $20 each |
| Netlify | Pro | $20 | Unlimited members, 3,000 credits |
| Cloudflare Workers | Workers Paid | $5 | 10 million requests, 30 million CPU ms, free static asset requests |
| Coolify, self-hosted | Free software on a 2 GiB, 2 vCPU Droplet | $18 | 3,000 GiB of transfer, 60 GiB SSD |
| Coolify Cloud | Cloud base fee on the same Droplet | $23 | Coolify run by its makers, connecting up to 2 servers |
| Node server | 1 GiB Droplet | $6 | 1,000 GiB of transfer, 25 GiB SSD |
Vercel figures come from its Pro plan docs, read on October 18, 2026, alongside the sources under the first table. Vercel Hobby is free, but Vercel limits it to personal, non-commercial use, so a company app needs Pro.
Seats explain most of the gap: Vercel bills per deploying seat while Netlify Pro and the self-hosted routes do not, so the difference grows with each developer you add. The cheaper Vercel alternatives page runs that math at a fixed bandwidth and compute load; this page stops at plan prices.
Gotchas before you switch
- Sharp memory on Linux. The self-hosting guide warns that image optimization on glibc-based Linux may need extra memory-allocator configuration to avoid excessive memory use. Watch RAM on a small Droplet.
- The 50 MB in-memory cache. By default the server cache also lives in memory, up to 50 MB. On a small server that is RAM you did not budget for.
- Coolify's secrets file. Back up
/data/coolify/source/.envafter install. Lose it and you lose the instance's secrets. - Workers bills cached requests too. With Workers Caching on, requests served from the cache are billed at the per-request rate, though CPU time is billed only on cache misses.
- Verified adapters are still coming. The Next.js team lists only Vercel and Bun as verified adapters today. Cloudflare and Netlify are building adapters on the new Adapter API, so their current integrations are not run against the Next.js test suite.
Frequently asked questions
Can you deploy Next.js without Vercel?
Yes. The Next.js docs list a Node.js server and a Docker container as supporting all features, so any host that runs Node, from a $6/mo DigitalOcean Droplet to a Kubernetes cluster, can serve a full Next.js app. Netlify and Cloudflare run it through their own adapters, and static export works on any file host.
What is the cheapest way to host Next.js without Vercel?
Static export is cheapest when the app has no server features, because you pay only for file hosting. For a full app, Cloudflare Workers Paid is the lowest plan price in this guide, and a $6 Droplet running next start is the cheapest server you control.
Does ISR work when you self-host Next.js?
Yes, with one server and a persistent disk it works with no setup. With several instances, ephemeral containers or serverless, you need a custom cacheHandler backed by shared storage such as Redis or S3, plus refreshTags() so revalidateTag reaches every instance.
Is Netlify a good Vercel replacement for Next.js?
It is the lowest-effort switch: zero config for Next.js 13.5 and later, with ISR, Server Actions and middleware supported. The trade is credit billing, where each production deploy costs 15 of Pro's monthly credits, and a few limits on Node middleware and rewrites.
Do I need Docker to self-host Next.js?
No. output: "standalone" produces a folder you can run with node server.js on a plain VPS. Docker helps when you want the same image across environments or a platform like Coolify, but the Next.js server is identical either way.
What breaks when I run Next.js on several servers?
Server Functions fail unless every instance shares NEXT_SERVER_ACTIONS_ENCRYPTION_KEY, ISR serves stale pages unless the cache is shared, and rolling deploys cause missing assets unless deploymentId is set. A single server avoids all three.
How this guide was put together
Deployment steps come from the Next.js, Cloudflare, OpenNext, Netlify and Coolify documentation, read on October 18, 2026, and every price from the vendor's own pricing page on the same date, in USD. Plan prices exclude usage overages and taxes. The stats come from Toolradar, the software directory Dupple runs.
Cite this: Devshot, "How to Deploy Next.js Without Vercel in 2026: Five Routes, Real Config", October 2026.
For platform-by-platform verdicts, see best hosting for Next.js, the Vercel review, the Netlify review and the Vercel vs Netlify head to head. Vercel's own plans are broken down in Vercel pricing. The self-hosted route continues in best VPS hosting for developers, the DigitalOcean review, best self-hosting tools and best serverless platforms. Moving off Heroku instead? The Heroku migration guide covers that path. Directory records are on Toolradar: Vercel, Netlify, Cloudflare Workers, Coolify and DigitalOcean.
Planning a move off a platform? Devshot's newsletter tracks deploy targets, framework releases and price changes for working developers. Subscribe at devshot.co.
Some offers on this page may be paid placements or contain affiliate links.
Devshot: the daily dev & AI brief
Free daily newsletter, read in 5 minutes.
Subscribe free