Installation¶
The short story¶
pip install appkernel
The long story¶
Create your project folder:
mkdir my_project && cd my_project
Set up a virtual environment:
python3 -m venv venv
source venv/bin/activate
Note
AppKernel requires Python 3.12 or later.
Verify your Python version:
python --version
Python 3.12.x
Install AppKernel and all its dependencies:
pip install appkernel
Creating a microservice¶
The following is a minimal microservice that exposes CRUD operations for an Order model.
Save it as orderservice.py:
from datetime import datetime
from typing import Annotated
from appkernel import AppKernelEngine, Model, MongoRepository, Required, Generator
from appkernel import create_uuid_generator, date_now_generator
class Order(Model, MongoRepository):
id: Annotated[str | None, Generator(create_uuid_generator('O'))] = None
products: Annotated[list | None, Required()] = None
order_date: Annotated[datetime | None, Required(), Generator(date_now_generator)] = None
if __name__ == '__main__':
kernel = AppKernelEngine('Order Service')
kernel.register(Order, methods=['GET', 'POST', 'DELETE'])
kernel.run()
Start the service:
python orderservice.py
INFO: Uvicorn running on http://0.0.0.0:5000 (Press CTRL+C to quit)
Configuration file¶
Create a cfg.yml file next to your service script to override defaults:
appkernel:
logging:
file_name: myapp.log # log file name
max_size: 5048 # maximum log file size in bytes
backup_count: 5 # number of archived log files to keep
server:
address: 0.0.0.0 # bind address
port: 8080 # listening port
shutdown_timeout: 10 # seconds to allow in-flight requests to finish on shutdown
mongo:
host: localhost # MongoDB host (accepts full mongodb:// URI)
db: appkernel # database name
i18n:
languages: ['en-US', 'de-DE'] # supported translation languages
Docker deployment¶
Create a Dockerfile:
FROM python:3.12-slim
WORKDIR /app
COPY . /app
RUN pip install appkernel
EXPOSE 5000
CMD ["python", "orderservice.py"]
Build the image:
docker build -t order_service_image .
Find your local MongoDB container’s IP if needed:
docker inspect bridge | grep -A 5 mongo
Run the container:
docker run --name orderservice -d -p 5000:5000 order_service_image
Stream logs:
docker logs -f orderservice
Run in interactive mode:
docker run -it --rm --name order-service order_service_image sh