Run a Next.js app
In this guide we create and deploy a Next.js app. To run this example, follow these steps:
-
Install the
kraft
CLI tool and a container runtime engine, e.g. Docker. -
Clone the
examples
repository andcd
into theexamples/node21-nextjs
directory:
Make sure to log into KraftCloud by setting your token and a metro close to you.
We use fra0
(Frankfurt, 🇩🇪) in this guide:
When done, invoke the following command to deploy the application on KraftCloud:
The output shows the instance URL and other details:
In this case, the instance name is node21-nextjs-bfrq0
and the URL is https://small-frog-ri8c1vtw.fra0.kraft.host
.
They are different for each run.
Use curl
to query the KraftCloud instance of the Next.js server:
Or even better, point a browser at it 😀.
At any point in time, you can list information about the instance:
When done, you can remove the instance:
Customize your Application
To customize the application, update the files in the repository, listed below:
Kraftfile
: the KraftCloud specificationDockerfile
: the Docker-specified application filesystem
Lines in the Kraftfile
have the following roles:
-
spec: v0.6
: The currentKraftfile
specification version is0.6
. -
runtime: node:21
: The Unikraft runtime kernel to use is Node 21. -
rootfs: ./Dockerfile
: Build the application root filesystem using theDockerfile
. -
cmd: [["/usr/bin/node", "/usr/src/server.js"]]
: Use/usr/bin/node /usr/src/server.js
as the starting command of the instance.
Lines in the Dockerfile
have the following roles:
FROM scratch
: Build the filesystem from thescratch
container image, to create a base image.
The following options are available for customizing the application:
-
If only updating the implementation in the
server.js
source file, no other change is required. -
If you want to add additional files, you need to copy them into the filesystem using the
COPY
command in theDockerfile
. -
If you want to replace
server.js
with a different source file, update thecmd
line in theKraftfile
and replace/usr/src/server.js
with the path to your new source file. -
More extensive changes may require extending the
Dockerfile
with additionalDockerfile
commands. This includes the use of Node frameworks and the use ofnpm
, as shown in the next section.
Using npm
npm
is a package manager for Node.
It is used to install dependencies for Node applications.
npm
uses a package.json
file to list required dependencies (with versions).
The node21-expressjs
example in the examples
repository details the use of npm
to deploy an application using the ExpressJS framework on KraftCloud.
Clone the examples
repository and cd
into the node21-expressjs
directory:
Run the command below to deploy the application on KraftCloud:
Differences from the http-node21
app are also the steps required to create an npm
-based app:
-
Add the
package.json
file used bynpm
. -
Add framework-specific source files. In our case, this means
app/index.js
. -
Update the
Dockerfile
to:-
COPY
the local files. -
RUN
thenpm install
command to install dependencies. -
COPY
of the resulting and required files (node_modules/
andapp/index.js
) in the application filesystem, using thescratch
container.
-
The files are listed below:
The package.json
file lists the express
dependency.
The Kraftfile
is the same one used for http-node21
.
For Dockerfile
newly added lines have the following roles:
-
FROM node:21-alpine AS build
: Use the base image of thenode:21-alpine
container. This provides thenpm
binary and other Node-related components. Name the current imagebuild
. -
WORKDIR /usr/src
: Use/usr/src
as working directory. All other commands in theDockerfile
run inside this directory. -
COPY . /usr/src/
: Copy the contents of the local current directory to the Docker filesystem. Note that paths in the.dockerignore
file are not copied. This means thatpackage.json
andapp/index.js
are copied. -
RUN npm install
: Installnpm
components listed inpackages.json
. -
COPY --from=build ...
: Copy existing files in the newbuild
image in thescratch
-based image./etc/os-release
must be copied to provide the distribution information required by node./usr/src/node_modules
are thenpm
-generated files./usrc/src/app/index.js
is the originalExpressJS
source code file.
Similar actions are required for other npm
-based applications.
See also other Node examples: node18-prisma-rest-express
and node21-nextjs
.
Learn More
Use the --help
option for detailed information on using KraftCloud:
Or visit the CLI Reference.