Flask with SQLite
This guide explains how to create and deploy a Python Flask app using SQLite. To run this example, follow these steps:
-
Install the
kraftCLI tool and a container runtime engine, for example Docker. -
Clone the
examplesrepository andcdinto theexamples/python3.12-flask3.0-sqlite/directory:
Code(bash)
Make sure to log into Unikraft Cloud by setting your token and a metro close to you.
This guide uses fra (Frankfurt, ๐ฉ๐ช):
Code(bash)
When done, invoke the following command to deploy this app on Unikraft Cloud:
Code(bash)
Code(ansi)
In this case, the instance name is python312-flask30-sqlite-qodkd and the address is https://lingering-orangutan-840mmdvd.fra.unikraft.app.
They're different for each run.
Use curl to query the Unikraft Cloud instance of the Python-based HTTP web server:
Code(bash)
Code(text)
You can list information about the instance by running:
Code(bash)
Code(text)
When done, you can remove the instance:
Code(bash)
Implementation details
The app uses the following files:
schema.sql: SQL schema for the databaseinit_db.py: script to initialized the database file fromschema.sqlin/app/database.dbserver.py+templates/: the actual Flask-based implementation: Python source code file and HTML template filesrequirements.txt:pipconfiguration file to install required packages: Flask and SQLiteKraftfile: 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/server.py"]: Use/usr/bin/python3 /app/server.pyas 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. -
COPYrules copy required files. The process copies therequirements.txtfile before runningpip3 install. The process copies other files (includingschema.sql,init_db.py) for the initialization of the database. -
RUNcommands trigger actions such as installing Python packages and initializing the database. -
The new
scratchimage contains the relevant contents required by the app:- the SQLite dynamic library:
/usr/lib/x86_64-linux-gnu/libsqlite3.so.0 - the Python package files:
/usr/local/lib/python3.12 - the
/appdirectory
- the SQLite dynamic library:
Customize your app
To customize the app, update app files in the repository:
schema.sql: Update the database schema.server.py,templates/: Update the Flask app..requirements.txt,Dockerfile: Update the list of Python packages used by the app.Kraftfile: Update the command line used to start the app.
The following options are available for customizing the app:
-
If you only update the implementation in the
server.pysource file ortemplate/directory, and the database schema inschema.sql, 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. -
If you add new dependencies in
requirements.txt, theRUN pip3 installin theDockerfilecommand should take care of everything. It may be the case that you need to copy other files, such as the/usr/lib/x86_64-linux-gnu/libsqlite3.so.0for SQLite, viaCOPYcommands in theDockerfile. More extensive changes may require extending theDockerfile(seeDockerfilesyntax reference). -
If you add a new Python source file that's running the
main()function, update thecmdline in theKraftfileand replaceserver.pyto run that file when creating the instance.
Learn more
Use the --help option for detailed information on using Unikraft Cloud:
Code(bash)
Or visit the CLI Reference.