Installer un serveur web avec Apache + Python / Django sous Debian 5 avec modwsgi

On continue sur notre lancée Python / Django avec ce nouvel article concernant la mise en place d’un serveur web pour faire tourner nos sites avec Python et le framework Django, le tout avec Apache.

Installation de python

La première étape, c’est évidemment l’installation de python. On va utiliser la dernière version à ce jour de la branche 2.X, à savoir la 2.7, Django n’étant toujours pas disponible pour la branche 3.X. Pour cela 2 solutions : soit à partir des dépôts, soit à partir des sources. Voici la version dépôts (NB : il vous faut les dépôts « experimental » (voir sur debian.org)) :

1
# apt-get install python2.7

Et c’est tout concernant cette solution. La seconde, celle à partir des sources :

1
2
3
4
5
6
$ wget http://www.python.org/ftp/python/2.7/Python-2.7.tgz
$ tar xf Python-2.7.tgz
$ cd Python-2.7
$ ./configure
$ make
# make install

Ce sera tout pour cette partie, il s’agit d’une installation logicielle basique.

Installation d’Apache

Apache est un serveur HTTP libre, dont la célébrité n’est plus à faire. Surtout connu pour être utilisé conjointement avec PHP, il est aussi possible d’utiliser les langages Perl, Ruby ou encore Python, celui qui nous intéresse ici. Voici comment l’installer :

1
# apt-get install apache2 apache2-prefork-dev

L’installation du package apache2-prefork-dev est obligatoire afin de bénéfichier d’apxs – APache eXtenSion tool, un outil permettant la gestion de nos modules pour Apache. Il s’agit encore une fois d’une installation basique sur laquelle nous ne nous étendrons pas.

Installation de modwsgi

Modwsgi est un module pour Apache offrant la possibilité d’utiliser Python. Les principaux avantages comparés à mod_python sont :

  • Plus de rapidité
  • Lancement possible en mode daemon, c’est à dire un processus séparé de celui du serveur HTTP. Ainsi une erreur dans votre code ne fera pas planter tout le serveur

On peut noter que la version 3.0 de modwsgi apporte le support de la branche 3.X de Python. Passons à l’étape d’installation après cette brève présentation.

1
2
3
4
5
6
$ wget http://modwsgi.googlecode.com/files/mod_wsgi-3.3.tar.gz
$ tar xfz mod_wsgi-3.3.tar.gz
$ cd mod_wsgi-3.3/
$ ./configure --with-python=/usr/local/bin/python --with-apxs=/usr/bin/apxs2
$ make
# make install

Ceci va nous créer un dossier .libs dans le répertoire mod_wsgi-3.3/. A l’intérieur de celui-ci se trouve mod_wsgi.so, qui correspond au final à la librairie générée. Il faut déplacer notre librairie dans le dossier d’Apache puis modifier notre fichier de configuration.

1
2
# cp mod_wsgi.so /etc/apache2/mods-enabled/
# vi /etc/apache2/httpd.conf

Et on y ajoute la ligne suivante pour charger le module.

1
LoadModule wsgi_module mods-enabled/mod_wsgi.so

Il est nécessaire ensuite de redémarrer le serveur Apache, puis on vérifie les logs.

1
2
3
# /etc/inid.d/apache2 restart
#tail -n 10 /var/log/apache2/error.log
Apache/2.2.9 (Debian) mod_wsgi/3.3 Python/2.7 configured

Si vous avez cela, aucun problème, Apache a bien chargé notre module avec Python. Faisons un petit test d’application, un classique « Hello World ». Pour cela, il nous faut modifier le fichier /etc/apache2/sites-available/default.

1
# vi /etc/apache2/sites-available/default

Ajoutez y ensuite juste avant la balise VirtualHost *:80 la ligne suivante :

1
WSGIScriptAlias / /var/www/index.py

Supprimez le fichier index.html et créez le fichier index.py dans le répertoire /var/www/ avec ce code :

1
2
3
def application(environ, start_response):
    start_response('200 OK',[('Content-type','text/html')])
    return ['<html><body>Hello World!</body></html>']

En vous rendant à présent sur http://ipdevotremachine/, vous devriez voir le texte « Hello World » qui s’affiche. Votre serveur est en place, il ne lui manque plus que Django.

Installation de Django

Django est disponible sous Debian avec le paquet python-django. Pour l’installer avec les dépôts :

1
# apt-get install python-django

Ou alors toujours avec les sources, nous pouvons faire dans le dossier /site-packages/ de Python :

1
2
3
$ wget http://www.djangoproject.com/download/1.2.1/tarball/
$ cd Django-1.2.1
# python setup.py install

Django est maintenant installé. Pour tester, il suffit de faire un petit :

1
2
$ python
>>> import django

S’il n’y a aucune erreur, alors l’installation s’est bien passée. Activons maintenant WSGI avec django. Nous allons pour tester créer un projet dans /var/www/.

1
# django-admin.py startproject mysite

Créez le fichier django.wsgi dans /var/www/mysite/ puis y insérer le contenu suivant :

1
2
3
4
5
6
7
8
9
import os
import sys
 
sys.path.append('/var/www/')
 
os.environ['DJANGO_SETTINGS_MODULE'] = 'mysite.settings'
 
import django.core.handlers.wsgi
application = django.core.handlers.wsgi.WSGIHandler()

Dans le fichier /etc/apache2/sites-available/default, changez le code de la partie de test de modwsgi par celui-ci :

1
WSGIScriptAlias / /var/www/mysite/django.wsgi

Redémarrez Apache :

1
# /etc/inid.d/apache2 restart

A présent, sur http://ipdevotreserveur/, vous devrez voir :

Django avec WSGI sous Apache

Django avec WSGI sous Apache

Django est maintenant activé pour votre projet.