Depending on your setup and preferences, there are multiple ways to run Emmett applications. In this chapter, we'll try to document the most common ones.
Changed in version 2.7
Emmett comes with Granian as its HTTP server. In order to run your application in production you can just use the included serve
command:
emmett serve --host 0.0.0.0 --port 80
You can inspect all the available options of the serve
command using the --help
option. Here is the full list:
option | default | description |
---|---|---|
host | 0.0.0.0 | Bind address |
port | 8000 | Bind port |
workers | 1 | Number of worker processes |
threads | 1 | Number of threads |
blocking-trheads | 1 | Number of blocking threads |
runtime-mode | st | Runtime implementation (possible values: st,mt) |
interface | rsgi | Server interface (possible values: rsgi,asgi) |
http | auto | HTTP protocol version (possible values: auto,1,2) |
http-read-timeout | 10000 | HTTP read timeout (in milliseconds) |
ws/no-ws | ws | Enable/disable websockets support |
loop | auto | Loop implementation (possible values: auto,asyncio,rloop,uvloop) |
log-level | info | Logging level (possible values: debug,info,warning,error,critical) |
backlog | 2048 | Maximum connection queue |
backpressure | Maximum number of requests to process concurrently | |
ssl-certfile | Path to SSL certificate file | |
ssl-keyfile | Path to SSL key file |
Changed in version 2.7
Since an Emmett application object is also an ASGI application, you can serve your project with any ASGI compliant server.
To serve your project with such servers, just refer to the specific server documentation an point it to your application object.
Even if Docker is not properly a deployment option, we think giving an example of a Dockerfile
for an Emmett application is proficient for deployment solutions using container orchestrators, such as Kubernetes or Mesos.
In order to keep the image lighter, we suggest to use the slim Python image as a source:
FROM python:3.9-slim
RUN mkdir -p /usr/src/deps
COPY requirements.txt /usr/src/deps
WORKDIR /usr/src/deps
RUN pip install --no-cache-dir -r /usr/src/deps/requirements.txt
COPY ./ /app
WORKDIR /app
EXPOSE 8000
CMD [ "emmett", "serve" ]