Best way to serve django or flask app using bjoern

Written by @jefcolbi, 2022-02-18, Last update: 2024-04-27

Hello world!

Today, we are going to see the best way to serve a django or flask app using bjoern. As you might know, bjoern is a wsgi server. Currently it is considered as the fastest server. You can check this link https://www.appdynamics.com/blog/engineering/a-performance-analysis-of-python-wsgi-servers-part-2/

We assume you already install bjoern in your environment. Git their github for instructions https://github.com/jonashaag/bjoern

The code

Here is the code to serve a django app

This code must be placed in the same folder with manage.py

The explanations

Now let's study it.

We import the required packages, first

import bjoern
from pathlib import Path
import socket
import sys
import os
import traceback
from django.core.wsgi import get_wsgi_application

We dynamically get the project name, instantiate the django wsgi application and declare the server_address we will use.

proj_name = Path(os.path.abspath(__file__)).parent.name

os.environ.setdefault('DJANGO_SETTINGS_MODULE', f'{proj_name}.prod')
application = get_wsgi_application()

server_address = f'/tmp/{proj_name}.sock'

Now we must remove any existing unix socket so we don't get any error on creation

try:
os.unlink(server_address)
except OSError:
if os.path.exists(server_address):
os.remove(server_address)

We create the socket and change his access mode you any server can access it

sock = socket.socket(socket.AF_UNIX, socket.SOCK_STREAM)
sock.bind(server_address)
sock.listen()

print("Setting access mode to 777")
os.chmod(server_address, 0o777)

Finally, we tell bjoern to run via the websocket

try:
print(f"Serving {proj_name} via {server_address}")
bjoern.server_run(sock, application)
except Exception as e:
traceback.print_exc()
try:
sock.close()
except:
traceback.print_exc()
try:
os.remove(server_address)
except:
traceback.print_exc()

Some considerations

Why you should use unix sockets over regular tcp sockets? In a production environment taking care of which tcp port is assigned to each app or service is tricky. It is a lot easier to work with unix socket because they are defined using names. Using the file serve.py we just studied for every project you serve you will have a related unix socket.

It is also known that unix sockets are slightly faster than tcp sockets. For a big project this can have a good impact.

Flask

Serving flask is the same as serving django. you just have to import your flask app. For example if your flask app lives in main.py, you will import it like this

from main import app as application

Bonus: Nginx

To exploit this method, you must use a web server in reverse proxy. Here is a configuration example for nginx

upstream [proj_name]{
server unix:/tmp/[proj_name].sock;
}

server {
server_name [proj_domain];

location = /favicon.ico { access_log off; log_not_found off; }
location /static/ {
root /[proj_path];
}

location /media/ {
root /[proj_path];
}

location / {
include proxy_params;
proxy_set_header X-Forwarded-SSL 'on';
proxy_set_header X-Forwarded-Protocol $scheme;
proxy_set_header X-Forwarded-Proto $scheme;
proxy_set_header Referer $http_referer;
add_header Referer $http_referer;
proxy_pass http://[proj_name];
}


listen 80;
}

We reached the end of our article. I wish you like it. Stay tuned!

About the blog

Jefcolbi

Ceci est mon blog personnel, où je partage mes connaissances

About the author

Jeff Matt

Je suis développeur Python de metier, entrepreneur à mes heures perdues et lecteur assidu.

Contact: @jefcolbi

From the same author


Comment ajouter des articles dans sa boutique Yaknema
Comment ajouter des articles dans sa boutique Yaknema

Vous avez déjà crée votre boutique sur Yaknema et vous souhaitez ajouter des produits/articles ? Cet article est fait pour vous....

Les 3 règles fondamentales d'un bon programmeur
Les 3 règles fondamentales d'un bon programmeur

Vous vous êtes toujours demander qu'est ce qui fait la différence entre les bons programmeurs et les moins bons, et comment rejoindre le club des bons...

30 exploits footballistiques du Cameroun
30 exploits footballistiques du Cameroun

Présentation de 30 superbes exploits footballistiques de l'équipe nationale de football du Cameroun.

Github est desormais gratuit pour les equipes
Github est desormais gratuit pour les equipes

Github est désormais gratuit pour les équipes.

Introduction au cinéma: Faut-il exprimer ou pas des émotions?
Introduction au cinéma: Faut-il exprimer ou pas des émotions

Pourquoi devrions-nous laisser nos sentiments s'exprimer lorsque nous regardons les films.

Comment telecharger des fichiers avec python requests
Comment telecharger des fichiers avec python requests

Dans ce tuto, nous allons voir comment télécharger des fichiers avec le package python requests.

Linux Mint 22 inclura une application Matrix préinstallée.
Linux Mint 22 inclura une application Matrix préinstallée.

Linux Mint 22 abandonne Jargonaut pour inclure par défaut le client web Matrix, offrant une expérience utilisateur similaire à Slack ou Discord.

Revanced: Comment nioxer Youtube, Spotify etc pour rien
Revanced: Comment nioxer Youtube, Spotify etc pour rien

Un article qui explique comment jouir de youtube premium de manière sécurisée et légale.

Maitrisez les décorateurs Python - Les décorateurs revisités Partie 1
Maitrisez les décorateurs Python - Les décorateurs revisités

Nous allons voir ce que sont les décorateurs Python, comment on les ecrit et à quoi ils servent dans la pratique....

Comment installer python mysqlclient
Comment installer python mysqlclient

Guide pas à pas sur comment installer le package python mysqlclient sur votre système.

Comment créer sa boutique sur Yaknema
Comment créer sa boutique sur Yaknema

Vous venez de vous inscrire sur Yaknema et vous ne savez pas comment démarrer? Nous allons vous montrer pas à pas....

Comment servir Django avec Bjoern
Comment servir Django avec Bjoern

Servir votre projet Django de la façon la plus optimale possible.

Comment entretenir la batterie de son téléphone pendant très très longtemps
Comment entretenir la batterie de son téléphone pendant très

Vous avez tout le temps des problèmes de batterie? Voici le secret pour la conserver pendant plus longtemps.

Les meilleures plateformes de E Commerce en 2021 au Cameroun
Les meilleures plateformes de E Commerce en 2021 au Cameroun

Quelles sont les meilleures plateformes d'e-commerce au Cameroun en 2020-2021? Nous allons le découvrir dans le reste de l'article....

Pourquoi je suis sceptique à propos du Data Science et du Deep Learning - Partie 1
Pourquoi je suis sceptique à propos du Data Science et du De

L'afrique en général et le Cameroun en particulier sont ils prets pour l'intelligence artificielle et le data science?

On the same topic



Copyright © 2020 | Powered By | Yaknema SARL