This guide explains how to create and deploy a Python Django web app. To run this example, follow these steps:
-
Install the
kraftCLI tool and a container runtime engine, for example Docker. -
Clone the
examplesrepository andcdinto theexamples/http-python3.12-django5.0/directory:
git clone https://github.com/unikraft-cloud/examples
cd examples/http-python3.12-django5.0/Make sure to log into Unikraft Cloud by setting your token and a metro close to you.
This guide uses fra (Frankfurt, π©πͺ):
export UKC_TOKEN=token
# Set metro to Frankfurt, DE
export UKC_METRO=fraWhen done, invoke the following command to deploy this app on Unikraft Cloud:
kraft cloud deploy -p 443:80 -M 1Gi .The output shows the instance address and other details:
[β] Deployed successfully!
β
βββββββββββ name: http-python312-django50-vt56c
βββββββββββ uuid: d8469447-fdf6-4caf-9fea-494218ca6f72
ββββββββββ state: running
ββββββββββββ url: https://dawn-sound-n5wrkxi2.fra.unikraft.app
ββββββββββ image: http-python312-django50@sha256:221666d414299aff54dbf10020b3d540270ee0c5907c1c6a728ca254ce8b0e50
ββββββ boot time: 80.32 ms
βββββββββ memory: 1024 MiB
ββββββββ service: dawn-sound-n5wrkxi2
βββ private fqdn: http-python312-django50-vt56c.internal
βββββ private ip: 172.16.6.5
βββββββββββ args: /usr/bin/python3 /app/main.py
In this case, the instance name is http-python312-django50-vt56c and the address is https://dawn-sound-n5wrkxi2.fra.unikraft.app.
They're different for each run.
Use curl to query the Unikraft Cloud instance of the Django web app server:
curl https://dawn-sound-n5wrkxi2.fra.unikraft.app<!doctype html>
<html lang="en-us" dir="ltr">
<head>
<meta charset="utf-8">
<title>The install worked successfully! Congratulations!</title>
<meta name="viewport" content="width=device-width, initial-scale=1">
<style>
html {
line-height: 1.15;
}
a {
color: #19865C;
}
[...]Or point a browser at the address and/or its /admin area.
You can set the username and password in the Dockerfile (more on this file later) to unikraft/unikraft.
Caution: The example sets ALLOWED_HOSTS to * and runs in debug mode. For a production site, ensure you read the recommended deployment guides of the official Django project.
You can list information about the instance by running:
kraft cloud instance listNAME FQDN STATE STATUS IMAGE MEMORY VCPUS ARGS BOOT TIME
http-python312-django50-vt56c dawn-sound-n5wrkxi2.fra.unikraft.app running 1 minute ago http-python312-django50@sha256:221666d41... 1024 MiB 1 /usr/bin/python3 /app/main.py 80321us
When done, you can remove the instance:
kraft cloud instance remove http-python312-django50-vt56cTo customize the app, update the files in the repository, listed below:
main.py: the entry point for the appKraftfile: the Unikraft Cloud specificationDockerfile: the Docker-specified app filesystem
Lines in the Kraftfile have the following roles:
-
spec: v0.6: The currentKraftfilespecification version is0.6. -
runtime: python:3.12: The Unikraft runtime kernel to use is Python 3.12. -
rootfs: ./Dockerfile: Build the app root filesystem using theDockerfile. -
cmd: ["/usr/bin/python3", "/app/main.py"]: Use this as the starting command of the instance.
Lines in the Dockerfile have the following roles:
FROM scratch: Build the filesystem from thescratchcontainer image, to create a base image.
The following options are available for customizing the app:
-
If you only update the implementation in the
main.pysource file, you don't need to make any other changes. -
If you create any new source files, copy them into the app filesystem by using the
COPYcommand in theDockerfile. -
More extensive changes may require extending the
Dockerfile(seeDockerfilesyntax reference). This includes the use of Python frameworks and the use ofpip, as shown in the next section.
pip is a package manager for Python.
It's used to install dependencies for Python apps.
pip uses the requirements.txt file to list required dependencies (with versions).
The http-python3.12-flask3.0 guide details the use of pip to deploy an app using the Flask framework on Unikraft Cloud.
Run the command below to deploy the app on Unikraft Cloud:
kraft cloud deploy -p 443:80 -M 1Gi .Differences from the Django app are also the steps required to create an pip-based app:
-
Add the
requirements.txtfile used bypip. -
Add framework-specific source files. In this case, this means the
server.pyfile. -
Update the
Dockerfileto:3.1.
COPYthe local files.3.2.
RUNthepip3 installcommand to install dependencies.3.3.
COPYof the resulting and required files (/usr/local/lib/python3.12andserver.py) in the app filesystem, using thescratchcontainer.
The following lists the files:
The requirements.txt file lists the flask dependency.
The Kraftfile is the same one used for Django.
For Dockerfile newly added lines have the following roles:
-
FROM python:3.12-bookworm AS base: Use the base image of thepython:3.12-bookwormcontainer. This provides thepip3binary and other Python-related components. Name the current imagebase. -
WORKDIR /app: Use/appas working directory. All other commands in theDockerfilerun inside this directory. -
COPY requirements.txt /app: Copy the package configuration file to the Docker filesystem. -
RUN pip3 install ...: Installpipcomponents listed inrequirements.txt. -
COPY --from=base ...: Copy generated Python files in the newbaseimage in thescratch-based image.
Similar actions apply to other pip3-based apps.
Use the --help option for detailed information on using Unikraft Cloud:
kraft cloud --helpOr visit the CLI Reference.