J'aurai pu poster ce topic dans la rubrique projet, mais étant donné qu'il ne concerne que ZdS, je le poste ici.
Comme vous le savez (ou pas), le site zestedesavoir.com possède une version de production et une version de préproduction, tous les deux hébergées sur des vps différents. Lorsqu'une release du projet est prête, on la déploie en préprod, puis ensuite en prod, à l'aide d'un script bash qui exécute un ensemble de commande séquentielles sur le serveur.
Qu'est ce qu'on a comme problème ?
- Personne n'est capable de dire si la préprod est iso-prod en tout points (logiciels installés, etc.)
- Si demain on change de serveur, il nous faudrait au moins 3 jours pour configurer notre nouveau serveur à partir d'une machine vierge (avec des risques de souci de configuration).
- Si on décide de passer sur une autre distribution Linux (CentOS par exemple), il y'a moyen de s'arracher les cheveux.
- Si quelqu'un désire forker ZdS, il y'a de grande chances qu'il abandonne au moment de l'installation de son serveur de production (d'une part parce que ce n'est pas documenté, d'autre part parce que c'est complexe).
Une solution parmi d'autres : Puppet
Puppet qu'est ce que c'est ?
Puppet est un outil de Configuration Management qui permet en gros de déployer une application web sur un serveur vierge (si vous ne l'avez pas lu, j'en parle dans un de mes article ). Il fonctionne dans une logique de master/agent, ou on a un serveur (le master) qui contrôle le déploiement d'un ou plusieurs serveurs agents. Il a la particularité (en théorie) d'être agnostique sur la plateforme (debian, CentOS, Ubuntu, Windows, etc.), mais en pratique la plupart des modules Puppet ne tournent que sur des distributions Linux (facilité toussa).
Puppet est Opensource. Une grosse communauté existe autour de Puppet, ce qui permet d'avoir des modules pour à peu près tout et n'importe quoi maintenus par la communauté.
Pourquoi j'en parle ici ?
Parce que j'ai développé un module Puppet pour zds qui pour l'instant permet de déployer en partant d'une machine vierge, le projet ZdS. Le module prend en input un fichier de configuration qui ressemble à celui-ci s'occupe de l'installation et de la configuration de :
- paquets systèmes (python compris)
- moteur wsgi (gunicorn) et supervisor
- moteur Solr
- pandoc (avec LateX et cie)
- la partie front-end (npm, node), avec prise en compte des settings
- le SGBD cible (mysql)
- le serveur web (nginx)
Le module déploie ainsi la branche/tag X du repository Y sur le machine Z.
Le module est disponible sur la puppet forge et s'installe comme n'importe quel module puppet puppet module install firm1-zds
sur le serveur master. Il ne reste plus qu'a piloter vos agents depuis votre master.
Le code source du module est Opensource et disponible sur Github.
Une démonstration est disponible à cette adresse (ne faites pas attention aux couleurs c'est pour tester le coté customisable de zds).
Et maintenant ?
Le module n'est néanmoins pas complet (il reste à faire la configuration d'un serveur mail), mais j'aimerai d'abord savoir si c'est le genre de chose qui intéresserait les déployeurs de ZdS (les forkeurs y compris). Si oui, je pourrais le finaliser, sinon et bah c'est pas grave, car configurer un serveur pour Django est tellement synonyme de prise de tête que je pense que ça ferait du bien à la communauté Puppet d'avoir un module pour.