What actually has to happen to run a Next.js app in production, wherever it's hosted.
A Next.js production build produces a mix of distinct output types: static assets (pre-rendered HTML for static routes), serverless or Edge functions (for dynamic routes, Route Handlers, and Middleware), and an optimized client JS bundle. Deploying it means every one of those pieces needs somewhere that actually supports it — straightforward on Vercel, built by the same team with first-class support for every feature, and requiring more manual setup on other platforms.
Self-hosting on a standard Node.js server or in Docker works, but specifically loses automatic Edge Middleware execution at the CDN edge, and requires manually configuring where ISR's cache actually lives, since Vercel's infrastructure otherwise handles both transparently. The practical question when evaluating any deployment target isn't just 'does it run Next.js' — it's whether it supports every rendering mode and caching layer the specific app actually relies on.
What you'll walk away knowing