Run a SvelteKit app
In this guide we create and deploy a SvelteKit app. SvelteKit is built on Svelte, a UI framework that uses a compiler to let you write breathtakingly concise components that do minimal work in the browser.
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-sveltekit/
directory:
Make sure to log into Unikraft Cloud 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 Unikraft Cloud:
The output shows the instance URL and other details:
In this case, the instance name is node21-sveltekit-zmt39
and the URL is https://dark-fog-z18n0ej1.fra0.kraft.host
.
They are different for each run.
Use curl
to query the Unikraft Cloud instance:
Or even better, point a browser at it π This will get you to play with the SvelteKit demo app.
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.
That is, you update the SvelteKit / Node / npm
-specific files, or the Unikraft Cloud-specific files.
We detail each below.
Updating the SvelteKit Application
Updating the SvelteKit application is reliant on making npm
-related updates.
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 application files were generated using npm create svelte@latest
, and by making use of the @sveltejs/adapter-node
adapter.
The core implementation is located in src/routes/sverdle/
directory.
Detailed information on updating the implementation is part of the official SvelteKit documentation.
Updates to the implementation will probably require updates to the package.json
file.
The package.json
file lists npm
application dependencies.
Deploying Locally
Before deploying the SvelteKit application on Unikraft Cloud, you can deploy locally.
Assuming npm
is installed, use the following commands:
You can test the application locally by pointing your browser to http://localhost:5173/
.
Updating the Unikraft Cloud Specification
Updates to the Unikraft Cloud specification are driven by updates to the SvelteKit application. There are two specification files:
Kraftfile
: the Unikraft Cloud specificationDockerfile
: the Docker-specified application filesystem
Current Contents
Their current contents are:
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", "/app/build/index.js"]]
: Use/usr/bin/node /app/build/index.js
as the starting command of the instance.
Lines in the Dockerfile
have the following roles:
-
FROM node:21-alpine AS deps
: Use the base image of thenode:21-alpine
container. This provides thenpm
binary and other Node-related components. Name the current imagedeps
. -
WORKDIR /app
: Use/app
as working directory. All other commands in theDockerfile
run inside this directory. -
COPY package.json /app
: Copy thenpm
configuration file to be able to install dependencies. -
RUN npm install
: Installnpm
components listed inpackages.json
. -
FROM deps AS build
: Create a fresh checkpoint of the base image for the build phase. -
COPY . /app
: Copy contents of the current directory (the actual application files) in the Docker filesystem. Note that paths in the.dockerignore
file are not copied. -
RUN npm run build; ...
: Build the files required for running the application standalone. The application entry point is the resulting/app/build/index.js
file thatβs used as the start command in theKraftfile
. In order to run the application, it has to be configured as a module. -
FROM scratch as prod
: Use thescratch
empty container` as the actual runtime environment. It will only contain the required files from the build. -
COPY --from=build ...
: Copy existing files from newbuild
image to thescratch
-based image. This means the application build directory (/app/build
) and the required dependencies (/app/node_modules
).
Customization Options
It is unlikely you will have to update the Kraftfile
.
The only potential update is the cmd
option.
But since the /app/build/index.js
file is generated by SvelteKit / npm
, it is unlikely to be updated.
The Dockerfile
is also unlikely to be modified.
Updates to the application would be part of the package.json
file or the src/
directory.
And updating these wonβt affect the contents of the Dockerfile
.
Still, if required, applications may require extending the Dockerfile
with additional Dockerfile
commands.
Learn More
Use the --help
option for detailed information on using Unikraft Cloud:
Or visit the CLI Reference.