Pré-requis

Le système d'exploitation utilisé est Ubuntu 10.04.3 LTS x64.

Les paquets suivants sont requis :

On installe les paquets :

~$ sudo apt-get install apache2 libapache2-mod-wsgi python python-django

Création du site Django

Le projet idreammicro servant de support à cet article se situe dans le dossier /var/www/idreammicro. L'application se nomme helloworld. L'arborescence est donc la suivante :

/var/www/
    |_idreammicro
          |_helloworld

Création du projet idreammicro

On se place dans le dossier accueillent les sites web par défaut /var/www :

~$ cd /var/www

On crée un projet Django nommé idreammicro :

/var/www$ sudo django-admin startproject idreammicro

Les fichiers suivants sont créés dans le dossier /var/www/idreammicro :

  • __init__.py ;
  • manage.py ;
  • settings.py ;
  • urls.py.

On se place dans le dossier du projet :

/var/www$ cd idreammicro/

On vérifie que le projet est correctement créé en lançant le serveur de développement intégré à Django :

/var/www/idreammicro$ python manage.py runserver

Si tout se passe bien, le message suivant apparaît dans la console :

Validating models...
0 errors found

Django version 1.1.1, using settings 'idreammicro.settings'
Development server is running at http://127.0.0.1:8000/
Quit the server with CONTROL-C.

La console nous informe que le serveur de développement Django est accessible à l'adresse http://127.0.0.1:8000. Si on ouvre le lien, la page ci-dessous doit s'afficher.

project.png

Création de l'application helloworld

On crée une application nommée helloworld :

/var/www/idreammicro$ sudo python manage.py startapp helloworld

Les fichiers suivants sont créés dans le dossier /var/www/idreammicro/helloworld :

  • __init__.py ;
  • models.py ;
  • tests.py ;
  • views.py.

Il est nécessaire d'ajouter l'application helloworld à la liste des applications du projet idreammicro. Pour ce faire on édite le fichier settings.py et on ajoute l'application helloworld à la liste des applications installées :

INSTALLED_APPS = (
    'django.contrib.auth',
    'django.contrib.contenttypes',
    'django.contrib.sessions',
    'django.contrib.sites',
    'helloworld'
)

Il est nécessaire de créer une vue. On édite le fichier helloworld/views.py. On y ajoute la vue index :

# Create your views here.

from django.http import HttpResponse

def index(request):
    return HttpResponse("Hello  world! You're at the index.")

Il est nécessaire de faire pointer au moins une URL sur la vue index. Dans le fichier urls.py, on ajoute deux URLs pointant sur la vue index (lignes 10 et 11) :

from django.conf.urls.defaults import *

# Uncomment the next two lines to enable the admin:
# from django.contrib import admin
# admin.autodiscover()

urlpatterns = patterns('',
    # Example:
    # (r'^idreammicro/', include('idreammicro.foo.urls')),
    (r'^$', 'helloworld.views.index'),
    (r'^helloworld/$', 'helloworld.views.index'),
    # Uncomment the admin/doc line below and add 'django.contrib.admindocs' 
    # to INSTALLED_APPS to enable admin documentation:
    # (r'^admin/doc/', include('django.contrib.admindocs.urls')),

    # Uncomment the next line to enable the admin:
    # (r'^admin/', include(admin.site.urls)),
)

Ainsi les adresses http://127.0.0.1:8000 et http://127.0.0.1:8000/helloworld afficheront la même page d'index.

On relance le serveur de développement :

/var/www/idreammicro$ python manage.py runserver

On ouvre à nouveau la page http://127.0.0.1:8000 qui doit désormais afficher ceci :

application.png

Comme on vient de le vérifier avec le serveur de développement, le site Django idreammicro est désormais fonctionnel. Toutefois Django déconseille fortement d'utiliser le serveur de développement en production. C'est pourquoi cet article propose maintenant de servir le site idreammicro à l'aide d'Apache.

[Télécharger le projet idreammicro]

Servir le site idreammicro avec Apache 2

Application WSGI

Il est nécessaire de créer une application WSGI. Celle-ci sera contenue dans le fichier /var/www/idreammicro/apache/django.wsgi.

Dans le dossier du projet Django, on crée un dossier apache :

/var/www/idreammicro$ sudo mkdir apache

On crée un fichier django.wsgi dans le dossier précédemment créé et on y écrit le contenu suivant :

import os
import sys

path = '/var/www/'
if path not in sys.path:
    sys.path.append(path)

sys.path.append('/var/www/idreammicro/')

os.environ['DJANGO_SETTINGS_MODULE'] = 'idreammicro.settings'

import django.core.handlers.wsgi
application = django.core.handlers.wsgi.WSGIHandler()

Création du VirtualHost

On crée un VirtualHost dédié dans le fichier /etc/apache2/sites-available/idreammicro :

<VirtualHost *:80>

    ServerName idreammicro

    DocumentRoot /var/www/idreammicro

    <Directory /var/www/idreammico>
        Order allow,deny
        Allow from all
    </Directory>

    WSGIDaemonProcess daemon user=www-data group=www-data processes=2 threads=15 display-name=%{GROUP}
    WSGIProcessGroup daemon

    WSGIScriptAlias / /var/www/idreammicro/apache/django.wsgi

</VirtualHost>

On indique qu'Apache (utilisateur www-data, groupe www-data) est le propriétaire de l'application Django :

/var/www/idreammicro$ sudo chown -R www-data:www-data /var/www/idreammicro

On active le site idreammicro :

/var/www/idreammicro$ sudo a2ensite idreammicro

On recharge la configuration d'Apache :

/var/www/idreammicro$ sudo /etc/init.d/apache2 reload

Le VirtualHost Apache précédemment créé porte le nom idreammicro (ServerName idreammicro). Par conséquent il est nécessaire de créer une nouvelle association nom de machine / adresse IP. Dans le fichier /etc/hosts, on ajoute la ligne :

127.0.1.1    idreammicro

Vérification

On vérifie que le site idreammicro est bien servi par Apache en se connectant à l'adresse http://idreammicro. Si tout fonctionne correctement, la page correspondant à la vue index doit s'afficher.

idreammicro.png

[Télécharger le projet idreammicro]

Conclusion

Finalement, servir un site Django avec Apache n'est pas si compliqué, pour peu qu'on trouve la bonne méthode. Il est certainement possible de réaliser une configuration plus avancée, aussi bien concernant Apache que le module WSGI. Leurs sites respectifs sont des mines d'informations...

Références

Sujets relatifs