Comment servir Django avec Bjoern

Written by @jefcolbi, 2022-05-14, Last update: 2024-04-27

Bonjour le monde!

Si vous avez déjà eu envie de servir un nombre plus élévé de requetes alors le server wsgi Bjoern est fait pour vous.

Introduction

On caractérise l'efficacité d'un serveur web par certains critères à savoir:

le nombre de requetes qu'il peut traiter par secondesla latence, le temps d'attente pour recevoir le resultat d'une requetela quantité d'erreurs, qui est juste le nombre de fois qu'il annule une requête

Le WSGI est le protocole utilisé par les applications et serveurs web Python. C'est un standard. Après des recherches je suis tombé sur cette comparaison des serveurs WSGI https://www.appdynamics.com/blog/engineering/a-performance-analysis-of-python-wsgi-servers-part-2/ il en ressort que les 2 meilleurs servers sont Bjoern et CherryPy. Nous allons donc voir comment configurer Bjoern pour servir une application Django parce que comparé à Gunicorn qui figure dans beaucoup de tutoriel il est largement meilleur.

Installation

On va proceder à l'installation de Bjorn sur un système Ubuntu. Les instructions devraient fonctionner pour n'importe quel autre système Linux moyennant quelques modifications. Installons les fichiers de developpement de la librairie libev sudo apt install libev-dev Maintenant installons bjoern, de préférence dans un environnement virtuel pip install bjoern

Utilisation

Un server a besoin d'un objet de type application WSGI. 🤔 Vous allez me demander sûrement où se trouve cet objet quand vous faites python manage.py runserver alors il se trouve dans le fichier wsgi.py qui se trouve dans le dossier de votre projet à coté de settings.py application = get_wsgi_application() cette ligne ci dessous correspond à l'instanciation de l'application wsgi.

Donc créer un fichier fast.py à coté de votre fichier manage.py et mettez le contenu ci-après

import bjoern

import os

from django.core.wsgi import get_wsgi_application

os.environ.setdefault('DJANGO_SETTINGS_MODULE', 'votreproject.settings')

application = get_wsgi_application()

bjoern.run(application, '127.0.0.1', 8000)

print("Server started")

Enregistrer et pour lancer, faites juste python fast.py

Ouvrez ensuite votre navigateur à l'adresse localhost:8000 Votre site va s'ouvrir mais sans fichier css et js. En effet Bjoern est adapté pour utilisation en prodution, en developpement utilisé plutot la bonne vielle commande python manage.py runserver

Maintenant il n'est pas adapté de servir directement l'application. Il est préferable et recommandé d'utiliser un autre serveur http mais en reverse proxy. Apache et Nginx conviennent pour cette tache. Voyons voir la configuration pour Nginx.

Créer un fichier test.conf dans le dossier de config de Nginx sur Ubuntu il s'agit de /etc/nginx/conf.d/ Donc faites nano /etc/nginx/conf.d/test.conf Et mettez dedans

server {
    server_name server.domain;

    location = /favicon.ico { access_log off; log_not_found off; }
    location /static/ {
        root /chemin/absolu/vers/votre/project;
    }

    location /media/ {  
        root /chemin/absolu/vers/votre/project;
    }

    location / {
        include proxy_params;
        proxy_pass http://127.0.0.1:8000;
    }

    listen 80;
}

Sauvegardez et redemarrez nginx service nginx restart ou systemctl restart nginx

Voilà! Votre application est fin prete pour servir des centaines de milliers de requetes par seconde sans crasher 👌🏽

NB: Cette configuration est celle qui est utilisé pour servir le site web de la communauté PyCM https://github.com/py-cm/website/blob/master/src/pycm/fast.py

Conclusion

Cet article vous a montré comment obtenir un meilleur rendement pour votre application django. C'est la 1ere étape ci vous rencontrer des soucis de lenteur et de crash. Si cette solution ne marche pas considerer qu'il faut deja augementer les caracteristiques de votre serveur (RAM et CPU). Le protocole WSGI est dit synchrone, il faut donc lancer un nouveau thread ou un processus enfant pour chaque requete. L'une des particularités de Bjoern c'est qu'il utilise un seul thread. Pour des vitesses plus élévées, proches de celle de nodeJS, il faut se tourner vers le protocole ASGI. Qui est juste l'analogue de WSGI mais qui fonctionne en asynchrone et donc est adapté pour le HTTP/2 et les Websockets. Notons que Django 3.0, est ASGI compatible contrairement aux précedentes versions. La version 3.1 en cours de developpement a integré les Views asynchrones. N'est elle pas belle la vie ? Je vous remercie d'avoir lu cet article, si vous l'avez aimé, laisser un Like et partager.

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


Cessez d'utiliser partout les listes Python, utilisez plutot deque
Cessez d'utiliser partout les listes Python, utilisez plutot

Utilisation de deque à la place de list

Configurer correctement Django avec Postgresql
Configurer correctement Django avec Postgresql

Bonne configuration de Postgresql pour un projet Django

Ce que je pense de l'unite
Ce que je pense de l'unite

Ce que je pense de l'unité et du vivre ensemble au Cameroun, pays aux 234 tribus.

Introduction au cinéma: Par où commencer
Introduction au cinéma: Par où commencer

Introduction au cinéma. Présentation des films cultes, des sagas classiques et de bons acteurs que tout bon cinéphile se doit de connaitre.

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.

SpaceX a installé 29 moteurs Raptor sur une fusée Super Heavy la nuit dernière.
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....

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.

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.

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.

Best way to serve django or flask app using bjoern
Best way to serve django or flask app using bjoern

We will see the best way to serve a django or flask app using bjoern via unix socket.

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...

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....

Les 8 grands ennemis du cerveau
Les 8 grands ennemis du cerveau

Une liste des ennemis du cerveau à éviter à tout prix

On the same topic


Cessez d'utiliser partout les listes Python, utilisez plutot deque
Cessez d'utiliser partout les listes Python, utilisez plutot

Utilisation de deque à la place de list


Copyright © 2020 | Powered By | Yaknema SARL