Technologies derrière un site web à base de Django aujourd’hui

april, debian-fr, planet-cullt, planet-libre, python

Suivez-moi aussi sur Identi.ca ou sur Twitter.

Comment concilier mon envie de développer un site web autour d’une idée originale (donc très motivante) et la partie technique associée qui me rebutait à priori, de par mon expérience du monde PHP/MySQL (qui date un peu je vous l’accorde) ?

Mon intérêt pour le langage Python m’a naturellement poussé vers le framework Django. Mais les technologies impliquées dans la réalisation d’un site web moderne sont aujourd’hui légions.

Je brosserai dans cet article un large portrait des choix techniques que j’ai faits et de la difficulté associée à leur emploi.

Technologies employées

Debian

debian-button

Système stable avec beaucoup de paquets. Personnellement j’adore ;) Debian Squeeze avec les backports puis Wheezy aujourd’hui. Migration très simple effectuée récemment dans mon cas.

Django

django-logo

Le choix de Django vient de mon intérêt pour Python. J’ai quand même observé une adoption de plus en plus large de ce framework web pour des sites à forte audience, me réconfortant sur sa capacité de passage à l’échelle.  Le site utilise le framework Django en version 1.5. J’ai eu beaucoup de mal au début à intégrer le fonctionnement de Django, mais une fois maîtrisé ça a clairement boosté mes capacités à mettre en place ce que je voulais coder pour le site. C’est solide, cohérent, modulaire et très conforme à l’esprit du langage Python.

Apache

apache-logo

Pour la partie serveur web, je suis parti sur un Apache 2.2 + mod wsgi, principalement pour des raisons de simplicité de mise en place. J’envisagerais quelque chose de plus travaillé si le site décolle et devient plus exigeant en performances. Je pense en particulier à l’emploi de Nginx.

PostgreSQL

postgresql

Django s’interface avec plusieurs bases de données (PostgreSQL, MySQL, Oracle, SQLite). J’ai choisi PostgreSQL pour la robustesse de cette solution et sa pérennité. J’avais aussi de bonnes connaissances dans cette solution et je souhaitais l’utiliser plus largement dans un projet personnel, les fonctionnalités de la version 9.2 étant très alléchantes.

South

south-logo

J’en parle immédiatement car cette petite application a considérablement réduit la complexité du passage en production. Elle gère de manière transparente la migration des schémas et la migration des données de la base de données lorsque vous installez une nouvelle version de votre application. Concrètement, vous avez rajouté des colonnes à une table dans votre version de développement, vous avez installé la nouvelle version de développement en préproduction, maintenant vous avez deux choix : soit vous passez des ordres SQL à la main afin de rajouter les colonnes qui vous manquent sur la base de préproduction (ce qui impliquent de bien avoir identifié les éléments à rajouter) avec tous les risques que comportent ces opérations, soit vous utilisez South :) qui le fait pour vous. J’ai mis un peu de temps à bien maîtriser les différentes étapes du processus de migration des données, mais la documentation est précise et c’est un vrai plaisir à lire.

Git

git-logo

Le gestionnaire de sources Git que j’utilise déjà sur plusieurs autres projets s’est imposé comme un très bon choix pour ce projet. Avec des connaissances basiques, j’en ai néanmoins fait un point très important de ma chaîne d’industrialisation particulièrement pour le développement et l’intégration du développement vers la préproduction. Voir plus bas.

Memcached

memcache-logo

Django propose de s’interfacer simplement avec Memcached, le serveur de cache qui permet de gagner du temps lorsque les données interrogées sont déjà stockées en cache. Sa prise en charge par Dhango a poussé mon choix vers l’ancêtre (ancêtre si on le compare à Redis par exemple).  A titre personnel, je serais plutôt parti sur Redis, mais je voulais rester aussi proche que possible des outils utilisés par Django. A voir dans le futur. Une chose est sûre, Memcache uned fois lancé ronronne et on en entend plus parler. Un plaisir pour l’administrateur système. Memcached s’interface très bien à Django via le module Python-memcache.

Haystack/Whoosh

haystack-logo

Un ensemble d’outils pour la fonction recherche du site. J’ai cherché des projets actifs et simple à intégrer dans Django. Elles remplissent bien leur job et n’ont pas représenté de difficultés particulières pour être mises en place.

Zinnia

zinnia-logo

Cette application Django permet de rajouter un moteur de blog adaptable à votre propre site web très facilement. J’en parlais déjà dans l’un de mes vrac de mini-messages et j’ai bien fait d’approfondir. Le projet est actif, utilisé par de nombreux sites. Ayant déjà travaillé sur son intégration à mon site, je peux confirmer que c’est bien pensé et fidèle au modèle de fonctionnement de Django. Et en plus c’est bourré de fonctionnalités intéressantes :) J’ai hésité entre zinnia et externaliser le blog mais j’ai préféré intégrer le blog au sein du site pour être sûr plus tard de pouvoir augmenter au maximum les interactions entre les deux, et ce de la manière la plus transparente possible pour l’utilisateur. J’ai trouvé le temps de prise en main très court quand on comprend bien le principe de base, à savoir la surcharge systématique des fonctionnalités offertes par défaut pour les adapter à vos besoins.

jQuery

Jquery-logo

JQuery est une bibliothèque Javascript dont je me sers pour la partie bling-bling web 2.0 du site. J’en ai une utilisation très basique mais je suis très content du résultat. Etant peu motivé pour coder du Javascript, j’ai largement simplifié cette phase grâce à JQuery.

Découpage dev/préprod/prod

Dès le début du projet j’ai découpé ma chaîne d’industrialisation en trois étapes :

  • Le développement, où j’implémente les nouvelles fonctionnalités
  • La préproduction, qui récupère la version de développement, s’installe sur un vhost Apache dédié grâce à un script mise-en-preproduction.sh
  • La production, qui est une copie des données de préproduction adaptée via un script mise-en-production.sh pour un vhost Apache dédié

L’utilisation de cette chaîne d’industrialisation me permet de pousser rapidement des nouvelles versions du développement vers la préproduction où s’effectue les premiers tests et l’adaptation au contexte fonctionnels, puis de la préproduction vers la production. Mon prochain objectif est la mise au point de campagnes automatisées de tests fonctionnels, sûrement avec Selenium.

Et vous ? Que pensez-vous des technologies mentionnées dans cet article ? Des remarques sur l’industrialisation ? N’hésitez pas à réagir dans les commentaires.

Aide-mémoire pour Git : Git à 100%

april, debian-fr, planet-libre, python

Suivez-moi aussi sur Identi.ca ou sur Twitter.

Si vous êtes comme moi un programmeur régulier sans être toutefois un professionnel et travaillez avec plusieurs gestionnaires de sources (pêle-mêle Subversion, Mercurial et Git dans mon cas), vous pouvez fréquemment être victime d’oublis dans la syntaxe et dans les possibilités offertes par ce merveilleux outil qu’est Git, lorsque vous reprenez votre travail sur un projet dont les sources sont gérées par la création de Linus Torvald.

Dans cette optique j’utilise quand je m’y remets un livre (Pro Git) pour me rafraîchir la mémoire mais en extraire l’information que je souhaite rapidement n’est pas toujours chose aisée. C’est pourquoi la parution chez Eyrolles dans la collection Memento d’un aide-mémoire nommé « Git à 100% » m’est apparu d’emblée comme une bonne idée. Si en plus les deux auteurs sont les développeurs Debian Raphaël Hertzog et Pierre Habouzit, je n’allais pas me faire prier pour m’y intéresser.

Le mémento vient sous la forme d’un dépliant plastifié de 9 pages. Après une courte introduction générale au fonctionnement interne de Git, on entre rapidement dans le vif du sujet avec les premiers exemples de syntaxe et d’utilisation des commandes les plus courantes. À travers un série de thèmes (modifications, exploration, annulation, restauration et nettoyage, gestion des branches, résolution des conflits, partage et publication) les commandes de Git et leurs utilisation sont présentées.

J’ai beaucoup apprécié la clarté des explications données mais aussi le format condensé de la mise en page et l’accès direct à l’information, rendant possible de ne pas renoncer à certaines fonctionnalités sous prétexte qu’il va falloir quinze à vingt minutes de recherche sur le Net pour retrouver comment mettre en oeuvre une certaine commande. L’exemple sur la commande git bisect et les explication sur git rebase me reserviront par exemple à coup sûr.

Un dépliant qui restera désormais à portée de main sur mon bureau.

Pro Git

debian-fr, planet-libre, python

Suivez-moi aussi sur Identi.ca ou sur Twitter.

La prise en main de Git par des programmeurs qui utilisaient auparavant des gestionnaires de sources centralisés est souvent difficile. Comment démarrer ? Comment s’organiser ? Comment gérer les rapports entre la version locale et la version sur le serveur de gestionnaire de sources ? Pourquoi les branches ? Comment travailler avec ?

git

Pour répondre à ces questions, je vous propose de découvrir un livre formidable sur git, accessible en ligne et proposer en licence Creative Commons Attribution-Non Commercial-Share Alike 3.0. Il m’a suffi d’une dizaine de minutes pour être emballé par la progression pas-à-pas et les exemples bien choisis. Une demi-heure plus tard j’avais compris que j’utilisais 1% des possibilités de git et que je venais de trouver le support idéal pour apprendre. J’ai commencé à prendre des notes à coup de copier/coller car les exemples illustrent parfaitement les propos de l’auteur.

Étant amené à travailler avec git pour Reportbug au sein du projet Debian ou pour Bélier, je pense en retirer beaucoup de choses.

Pro Git – professional version control : http://progit.org/book/

Si vous êtes emballé par le livre, il est également disponible en format papier. Merci à son auteur de mettre ainsi son travail (et un travail de grande qualité) à disposition.

PS : Merci à Jean-Baptiste Denis pour me l’avoir fait découvrir.

Et vous ? Que pensez-vous de Git dans votre utilisation quotidienne ? N’hésitez pas à laisser votre témoignages dans les commentaires.