Comme précisé dans le précédent billet, j'aime utiliser un environnement aussi proche que possible à l'environnement de production, cela commence par le serveur web finalement utilisé, dans mon cas Apache.
Voyons comment configurer un Vhost pour gérer notre projet Django
Le programme
- -OnLine- Présentation et installation du framework et MysqlDB
- --> Configuration du serveur web Apache, liaison avec le projet
- -OffLine- Première application sous django ( urls.py, settings.py )
- -OffLine- Mise en place de Django-Debug-toolbar
- -OffLine- Protection CSRF , utilisation , Jquery et requetes AJAX
- -OffLine- Les formulaires, utilisation basique du paquet Django.forms
- -OffLine- Les models création, utilisation et synchronisation
- ... la suite en fonction de mon apprentissage personnel

Prérequis
Nous allons nous mettre en condition pour mener à bien cette étape qui finalement, vous allez le voir, sera assez rapide.
Je part du principe ou apache est installé avec les paquets par défaut de la distribution.
Pour prendre en charge un projet python, nous avons plusieurs pistes,
- mod_python
Déprécié, je ne l'utiliserai donc pas
- fastcgi ou sgi
- mod_wsgi
C'est ce dernier mode que je vais détailler ici, bien que les autres soient viables et "comme le dit la documentation" plus performants dans certaines configurations, le mod_wsgi reste le mode conseillé par Django.
Rappel sur wsgi
wsgi est une interface entre le serveur HTTP et l'application Python.
Pour plus d'information sur le sujet je vous conseil le site officiel.
Mise en place
Au niveau de l'application
Pour permettre à notre application de tirer parti de wsgi, nous allons créer à la racine un répertoire nommé "apache", dans ce répertoire , nous allons créer un fichier nommé django.wsgi.
Voici le contenu du fichier "django.wsgi"
import os, sys
sys.path.append('/var/www')
os.environ['DJANGO_SETTINGS_MODULE'] = 'monprojet.settings'
import django.core.handlers.wsgi
_application = django.core.handlers.wsgi.WSGIHandler()
def application(environ, start_response):
#environ['SCRIPT_NAME'] = '/'
environ['PATH_INFO'] = environ['SCRIPT_NAME'] + environ['PATH_INFO']
return _application(environ, start_response)
Deux lignes sont à modifier selon votre projet, et son emplacement ( lignes 2 et 3 ).
Dans le précédent billet, nous avons créer le projet monprojet à l'emplacement /var/www
Niveau apache
Il nous suffit de configurer correctement notre Vhost en précisant quelques paramètres propres à wsgi.
Voici le vhost de notre projet nommé : monprojet et disponible à l'adresse http://monprojet.com
<VirtualHost *:80>
ServerAdmin monemail@domaine.com
ServerName monpropjet.com
ServerAlias www.monprojet.com
DocumentRoot /var/www/monprojet/
Alias /static/ /var/www/monprojet/static/
Alias /uploads/ /secure_dir/uploads/
WSGIDaemonProcess daemon-monprojet user=www-data group=www-data processes=1 maximum-requests=1 threads=1 inactivity-timeout=6
WSGIProcessGroup daemon-monprojet
WSGIScriptAlias / /var/www/monprojet/apache/django.wsgi
<Directory /var/www/monprojet/apache>
Order deny,allow
Allow from all
</Directory>
<Location "/uploads/">
SetHandler None
</Location>
ErrorLog /var/log/apache2/monprojet.error.log
CustomLog /var/log/apache2/mystock.access.log combined
</VirtualHost>
Les fichiers "statiques" ( img,css,js,... ) seront servi directement par apache, à partir du moment ou les urls pointent vers /static/* , concernant /uploads/, comme son nom l'indique, pointe vers l'espace de stockage des éventuelles uploads des clients, il est conseillé de mettre hors d'atteinte les fichiers uploadés par les clients, et encore moins interprétables, d'ou le SetHandler None.
Pour le reste, apache passe le relais à WSGI, vous devrai certainement affiner les paramètres, tels que processes, maximum-requests threads ou inactivity-timeout, il y en a d'autres, et je vous laisse lire la doc pour ajouter/modifier des paramétrés à WSGIDaemonProcess
Attention à mettre un nom de daemon différent à chaque vhost hébergeant un projet Django.
Veillez à adapter le Vhost à votre environnement ( directory, user et group )
Ne vous reste plus qu'à ré-démarrer votre serveur Apache ( apres avoir enregistré votre vhost, en site-enabled ou simplement Inclus dans httpd.conf ).
Conclusion
Voilà , notre environnement de développement est maintenant en place, nous allons pouvoir dans le prochain billet attaquer un peu le code, nous verrons l’organisation des "applications", la configuration de base et les templates partagés ect ..
Concernant Python, j'utilise pour mes développements la version 2.7 / 2.6 sous mac.
( ce serai surtout stupide de faire à la main ce qui peut être fait automatiquement ).

Derniers commentaires