If you’re reading this article it might be because you’re frustrated that you cannot deploy your Next.js app with a custom server on Zeit Now 2 platform.
And if you have been googling around for the answer this is the article to read!
If you want a little background on what’s been going on with Zeit and their platform continue reading.
If you’d like the answer to the problem go straight to the end of the article!
Next.js is a framework to serve server-side render applications by using Node.js and React.
The goal with Next.js is to serve the user a fast initial load, than serve the rest of the application or site with ReactJS on the client side.
Next.js allows you to customize practically everything such as Webpack, custom server and routing.
But all of that comes already baked into the framework so you spend zero setup time.
They try to let the engineer focus on the UI as much as possible.
This is what makes Next.js pretty awesome.
Back in version 1, deploying your Next.js application with a custom server was as easy as typing 1 word in the command line.
But Now 1 has been deprecated and is recommended to go with Now 2.
Now 2 follows a micro-server architecture, and requires your applications to have a bit of configuration.
This allows you, the engineer, to have a monorepo setup but be able to split your project into it’s own server.
This is an ideal solution, because it reduced cold boot-up times, per-route scaling and resources allocations, and increases security due to less code.
Think of it as code-splitting for your back-end code.
But this comes with a problem for Next.js framework with a custom server.
It doesn’t fit the Now 2 paradigm.
But there is a workaround to make it fit!
First create a Dockerfile in the root of your Next.js project.
Now let’s add the following configuration your now.json file.
You can now run now in your terminal.