FastAPI HTTP Server
This guide explains how to create and deploy a Python FastAPI web app. To run this example, follow these steps:
-
Install the CLI and a container runtime engine, for example Docker. Use the unikraft CLI or the legacy kraft CLI.
-
Clone the
examplesrepository andcdinto theexamples/httpserver-python3.12-FastAPI-0.121.3/directory:
Code
Make sure to log into Unikraft Cloud and pick a metro close to you.
This guide uses fra (Frankfurt, 🇩🇪):
When done, invoke the following command to deploy this app on Unikraft Cloud:
The output shows the instance address and other details:
Code
In this case, the instance name is httpserver-python312-fastapi-01213-0n84f and the address is https://dry-water-0oexx89g.fra.unikraft.app.
They're different for each run.
Use curl to query the Unikraft Cloud instance of the Python FastAPI web app server:
Code
Code
You can list information about the instance by running:
Code
When done, you can remove the instance:
Customize your app
To customize the app, update the files in the repository, listed below:
server.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: base-compat:latest: The Unikraft runtime kernel to use is the latest that provides a minimal Linux-compatible environment. -
rootfs: ./Dockerfile: Build the app root filesystem using theDockerfile. -
cmd: ["/usr/bin/python3", "-m", "uvicorn", "src.server:app", "--host", "0.0.0.0", "--port", "8080"]: 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
server.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.
Using pip
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 httpserver-python3.12-FastAPI-0.121.3 guide details the use of pip to deploy an app using the FastAPI framework on Unikraft Cloud.
Run the command below to deploy the app on Unikraft Cloud:
Differences from the FastAPI 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 fastapi and uvicorn dependencies.
The Kraftfile is the same one used for httpserver-python3.12, except changed lines that have the following roles:
cmd: ["/usr/bin/python3", "-m", "uvicorn", "src.server:app", "--host", "0.0.0.0", "--port", "8080"]: Use/usr/bin/python3 -m uvicorn src.server:app --host 0.0.0.0 --port 8080as the starting command of the instance.
For Dockerfile newly added lines have the following roles:
-
FROM python:3.12-bookworm AS build: Use the base image of thepython:3.12-bookwormcontainer. This provides thepip3binary and other Python-related components. Name the current imagebuild. -
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=build ...: Copy generated Python files in the newbuildimage in thescratch-based image.
Similar actions apply to other pip3-based apps.
Learn more
Use the --help option for detailed information on using Unikraft Cloud:
Or visit the CLI Reference or the legacy CLI Reference.