Installation/Configuration/Mise en cache de Django sur votre serveur Linux

par Anderson Silva et Steve 'Ashcrow' Milner (Copyright © 2010)

traduction par Assirem LOUALIA (tous droits réservés) loualia.assirem@gmail.com


Ces derniers temps, tout le monde du développement web est sujet à une métamorphose. Les entreprises veulent maximiser les profits de leurs productions tout en minimisant les coûts et le temps de développement. Au fur et à mesure les petites équipes de développement sont devenues la norme dans les grands départements de ce domaine. Découvrez Django: le framwork très populaire de Python qui applique d'une manière propre et pragmatique les principes de conception RWAD (rapid web application development) et DRY (don't repeat yourself).

Le but de cet article n'est ni de vous apprendre à programmer avec Python, ni comment utiliser le framework Django.Il s'agit plutôt de vous montrer comment promouvoir vos applications Django sur un serveur Apache existant ou bien sur un environnement Lighttpd .

Nous allons conclure en vous donnant un procédé simple qui vous permettra d'améliorer les performances de votre application Django en ayant recours au cache afin de reduire le temps d'accès. Cet article part du principe que vous utilisez Fedora comme serveur d'application web, mais tous les paquetages mentionnés dans cet article sont egalement disponibles dans divers SE y compris Extra Packages for Enterprise Linux repository, ce qui veut dire ces instructions doivent aussi être valides sous Red Hat Enterprise Linux et CentOS servers.

Ce dont vous avez besoin

Vous devez avoir installé Django:

$ yum install Django

Si vous souhaitez vous servir des applications Django sous Apache vous aurez besoin mod_wsgi:

$ yum install httpd mod_wsgi

Si vous souhaitez vous servir des applications Django sous Lighttpd:

$ yum install lighttpd lighttpd-fastcgi python-flup

Installation du memcached pour 'augmenter la vitesse de réponse' des applications Django

$ yum install memcached python-memcached
Installation du memcached pour 'augmenter la vitesse de réponse' des applications Django

$ yum install memcached python-memcached

Démarrage d'un nouveau projet Django

1. Création du workspace.

$ mkdir -p $LOCATION_TO_YOUR_DEV_AREA 
$ cd $LOCATION_TO_YOUR_DEV_AREA

2. Démarrez une nouvelle de projet Django. Cela va créer une structure de projet réutilisable.

$ django-admin startproject my_app

3. Lancez le serveur de développement web Django sur le port 8080 (ou n'importe quel autre port).

Remarque: Le serveur de développement web sert juste aux tests et aux vérifications. Ne l'utilisez pas comme un serveur de production d'applications!

$ python manage.py runserver 8080

4. Exécutez votre projet Django sous Apache avec mod_wsgi en permettant mod_wsgi. Remarque Pour le faire il vous faut avoir votre projet dans un système d'éxploitation Linux et de préférence dans un répertoire personnalisé (n'utilisez pas les répertoires dédiés! (Home directories)) pour que ça soit plus lisible par appache. Sur Fedora le mod_wsgi est ajouté automatiquement lors de l'installation par /etc/httpd/conf.d/wsgi.conf. On Fedora mod_wsgi is auto added upon install via /etc/httpd/conf.d/wsgi.conf. Le module va être chargé, après le redémarrage d'appache.

5. Création de serveurs virtuels en créant un nouveau fichier dans /etc/httpd/conf.d/myapp.conf.

WSGIScriptAlias / /path/to/myapp/apache/django.wsgi

DocumentRoot /var/www/html/
ServerName your_domain_name
ErrorLog logs/my_app-error.log
CustomLog logs/my_app-access_log common
6. A la 5ème étape nous avons défini un scriptalias, mainteneant nous avons besoin de créer le fichier wsgi au quel il fait référence.
import os
import sys

import django.core.handlers.wsgi

# Append our project path to the system library path
sys.path.append('/path/to/')

# Sets the settins module so Django will work properly
os.environ['DJANGO_SETTINGS_MODULE'] = 'myapp.settings'

# sets application (the default wsgi app) to the Django handler
application = django.core.handlers.wsgi.WSGIHandler()

Exécution de votre projet Django sous Lighthttpd avec fastcgi

Démarrez votre serveur FastCGI en premier lieu.

./manage.py runfcgi method=prefork socket=/var/www/myapp.sock pidfile=django_myapp.pid

Ensuite modifiez votre fichier lighttpd.conf pour utiliser le serveur FastCGI.

server.document-root = "/var/www/django/"
fastcgi.server = (
    "/my_app.fcgi" => (
        "main" => (
            # Use host / port instead of socket for TCP fastcgi
            # "host" => "127.0.0.1",
            # "port" => 3033,
            "socket" => "/var/www/my_app.sock",
            "check-local" => "disable",
        )
    ),
)
alias.url = (
    "/media/" => "/var/www/django/media/",
)
url.rewrite-once = (
    "^(/media.*)$" => "$1",
    "^/favicon\.ico$" => "/media/favicon.ico",
    "^(/.*)$" => "/my_app.fcgi$1",
)

Configuration de la mise en cache dans Django

Django a beaucoup de backends de cache différents, y compris une base de données, mémoire et le célèbre memcached aussi. Selon http://www.danga.com/memcached/, le memcached est " un objet très pérformant et de nature générique du sysème de cache de memoire distribuée, mais déstiné à être utilisé pour augmenter la rapidité de réponse des applications web dinamique en allégeant la chargement des bases de données." .Il est utilisé dans les sites qui ont un fort trafic tels que Slashdot et Wikipedia. Ceci fait de lui le condidat idéal pour le cache dans votre nouvelle application web.

Premièrement, installez le memcached.

$ yum install memcached

Puis, installez les liaisons python pour le memecached.

$ yum install python-memcached

Ensuite, en utilisant le script init vérifiez que le memcached est en cours d'exécution.

$ /etc/init.d/memcached status 
memcached (pid 6771) is running...

S'il n'est pas en cours d'exécution, vous pouvez le lancer manuellement.

$ /sbin/service memcached start

Si voulez vous assurer qu'il se lancera automatiquement après chaque redémarrage :

$ /sbin/chkconfig --level 35 memcached on

Maintenant que vous avez vérifié que le memcached est en cours d'exécution, vous allez indiquer à votre application Django de l'utiliser comme son backend cache. Vous pouvez faire cela en ajoutant une entrée CACHE_BACKEND à votre fichier settings.py.

CACHE_BACKEND = 'memcached://127.0.0.1:11211/'

La syntaxe est "backend://host:port/" ou "backend:///path" ça dépend du backend choisi. Depuis que nous utilisons le memcached, nous avons l'opportunité d'exécuter plusieurs processus démons sur différents serveurs et partager le cache sur plusieurs machines. Tous ce que vous avez à faire pour l'appliquer est d'ajouter la combinaison de ports de serveurs dans le CACHE_BACKEND et les séparer par des points-virgules. Dans cet exemple nous partageons le cache sur trois serveurs memcached différents:

CACHE_BACKEND = 'memcached://127.0.0.1:11211;192.168.0.10:11211;192.168.0.11/'

Pour plus d'informations sur les différents types de mises en cache qui peuvent être réalisées dans le framework Django, rendez-vous ici official documentation.

Pour finir, lorsque vous serez prêt à mettre en oeuvre votre application , vous pouvez aussi ecrir votre propre Django service script, de sorte que votre application puisse se lancer dès le démarrage.

L'article original a été publié le 5 juin 2008, par Red Hat Magazine, et revisé pour le numéro de novembre 2010 de la Gazette Linux.

Anderson Silva et Steve 'Ashcrow' Milner

Anderson Silva est un ingénieur informaticien chez Red Hat, Inc. Il est titulaire d'une licence(BS) en informatique de l'université Liberty, et d'un Mastèr(MS) en systèmes d'information obtenu à l'université du Maine. Il est un architecte certifié de Red Hat et l'auteur de plusieurs articles et publications sur Linux dont : la Gazette Linux, Revista do Linux, et Red Hat Magazine. Anderson est marié depuis 11 avec sa petite amie du lycée Joanna (qui l'a aidé à écrir ses articles avant leur dépôts) avec la quelle il a 3 enfants. Quand il ne travaille pas ou il n'écrit pas, il aime bien la photographie, passer du temps avec sa famille, le road cycling, regarder la Formule 1 et les courses d'Indycar , et prendre ses enfant au Karting.

Steve 'Ashcrow' Milner

Steve 'Ashcrow Milner est un analyste en sécurité chez Red Hat, Inc. Il est un ingenieur certifié de Red Hate et d'ITIL Foundations. Steve a deux chiens, Anubis et Emma-Lee qui gardent sa maison. Dans son temps libre Steve aime regarder les robots, écrir du du code open source, la ceféine, escalader les arbres à terre et lire des comics.


Adaptation française de la Gazette Linux

L'adaptation française de ce document a été réalisée dans le cadre du Projet de traduction de la Gazette Linux

Cet article est publié selon les termes de la Open Publication License. La Linux Gazette n'est ni produite, ni sponsorisée, ni avalisée par notre hébergeur principal, SSC, Inc.

Vous pourrez lire d'autres articles traduits et en apprendre plus sur ce projet en visitant notre site http://www.traduc.org/Gazette_Linux

Si vous souhaitez apporter votre contribution, n'hésitez pas à nous rejoindre, nous serons heureux de vous accueillir.