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

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.


Vus : 2115
Publié par Carl Chenet : 277