Sommaire
Documentation non-complète
Basé sur: http://www.justanothercodemonkey.com/2009/08/deploying-django-with-buildout.html
Buildout
Buildout est le système de déploiement d'applications Python pour les systèmes à Montréal. Buildout permet de gérer les dépendances, crée un environnement virtuel similaire a virtualenv, etc.
Création d'un projet avec Buildout
Nous disposons d'un squelette Buildout Django à l'AUF qui recense nos bonnes pratiques.
- Télécharger le fichier qui servira à boostraper le projet
wget http://git.auf.org/?p=olivier.git;a=blob_plain;f=bootstraper/mk_django_project.py;hb=HEAD
Buildout a généré un django.wsgi dans bin, il suffira de configurer Apache pour l'utiliser
Les recettes (recipe) expliquent au buildout ce qu'il a à faire. Par exemple, celle utilisée dans tous nos projet est la djangorecipe, pour bootstraper un projet. Elle permet de dire quelle version de django on veut utiliser, les modules tiers à récupérer (eggs) et bien d'autres options http://pypi.python.org/pypi/djangorecipe
http://pypi.python.org/pypi/djangorecipe
http://pypi.python.org/pypi/hexagonit.recipe.download Quelque-fois les modules ne sont pas sur pypi, mais il est possible grâce à cette recette de les télécharger et de les décompresser dans le répertoire parts. Exemple :
http://pypi.python.org/pypi/collective.recipe.cmd/0.5 Cette recette permet de faire des opérations systèmes Lors d'un développement local, il est utile de faire les installations dans un environnement virtuel avec virutalenv Ceci reste néanmoins optionnel (car le script se charge de récupérer la dernière version), mais fortement conseillé.
python mk_django_project.py
Utilisation
Environnement de dev
# Créer la structure initiale du buildout, génerer les scripts
$ python bootstrap.py
# Faire le buildout de dev
$ bin/buildout -c devel.cfg
# Lancer le serveur de dev
$ bin/django runserver
Mise en prod
# Créer la structure initiale du buildout, génerer les scripts
$ python bootstrap.py
# Faire le buildout de prod
$ bin/buildout -c buildout.cfg # des fois, on peut avoir un production.cfg
Les recettes
djangorecipe
[django]
recipe = djangorecipe
version = 1.2.3
project = auf_projets
wsgi=true
settings=production
extra-paths = auf_projets
eggs = auf_references_client
south
django-admin-tools
datamaster_modeles
django-tinymce
django-form-utils
hexagonit.recipe.download
[wkhtmltopdf]
recipe = hexagonit.recipe.download
url = http://wkhtmltopdf.googlecode.com/files/wkhtmltopdf-0.9.9-static-i386.tar.bz2
collective.recipe.cmd
[wkhtmltopdf_executable]
recipe = collective.recipe.cmd
on_install = true
on_update = true
cmds =
cd ${buildout:directory}/parts/wkhtmltopdf
chmod +x wkhtmltopdf-i386
cd ${buildout:directory}/bin
ln -s ${buildout:directory}/parts/wkhtmltopdf/wkhtmltopdf-i386 wkhtmltopdf