Et c’est partie pour le premier article de la série. Après une entrée en matière, voici l’heure pour moi d’écrire, et pour vous de lire, l’épisode #1 de la série. Il n’y a pas d’ordre particulier, les sujets seront abordés assez indépendamment. En revanche, les articles seront illustrés d’un cas d’utilisation réel : Piwam.
Aujourd’hui, je vous propose, et vous n’avez pas vraiment le choix, de découvrir la manière dont je teste le déploiement de l’application. Quels sont les pièges, les méthodes, bref, tout.
Virtualiser, c’est la mode.
Je ne possède pas de serveur de test. Et de toute manière, si j’en possédais un, je me servirais tout de même d’un système virtualisé, afin d’éviter d’utiliser inutilement le vrai serveur. Voilà donc le premier point : le déploiement est testé en conditions réelles au sein d’une machine virtuelle. Le système virtualisé est le plus proche possible de celui qui tourne en production : OS, noyau, mémoire disponible, swap, version de PHP, MySQL, fichiers de configuration…

Serveur Debian virtualisé, lancé depuis WindowsXP
Cette précaution permet de s’affranchir au maximum des mauvaises surprises liées à l’environnement. Imaginez un peu, votre système sur lequel vous développez possède le paramètre memory_limit fixé à 128M. Tout fonctionne parfaitement. Sans passer par le scénario de test de déploiement présenté ici, vous décidez de mettre tout de suite à jour la version en production. Tout fonctionne parfaitement. Erreur. Tout semble fonctionner parfaitement. C’était sans compter cet utilisateur qui, voulant lister 100 résultats de recherche par page, obtient une magnifique erreur d’explosion de la mémoire allouée, dont le maximum était fixé à 64M sur le serveur de production.
Quelle solution choisir ?
Les solutions de virtualisation ont le vent en poupe actuellement. Citons VM Ware, VirtualBox, Parallels (MacOSX)… Pour laquelle opter ? Après un essai des différentes solutions, je ne peux que vous conseiller la solution de Sun (Oracle…) : VirtualBox. Disponible sous toutes les plate-formes, gratuite, libre, cette box magique satisfaira toute nos exigences. Une fois installée, installez votre système virtualisé (dans mon cas : Debian 5.0), installez / configurez vos applications (ici : Apache 2, PHP 5.3 + modules, MySQL 5.1, symfony 1.2).
Note :
Votre serveur virtualisé possède un accés à votre réseau local, et après un petit peu de configuration, il est également accéssible au sein de celui-ci (configuration de la carte réseau en mode bridge) à l’instar d’un véritable serveur.
Envoyer ses fichiers au serveur
C’est bien joli d’avoir maintenant une réplique de son serveur de production, mais comment y tester son application ? Plusieurs solutions :
- Vous recodez intégralement votre projet au sein de votre serveur virtualisé (…)
- Vous avez pris la bonne habitude d’utiliser un serveur CVS, SVN ou Git. Dans cas là, un commit d’un côté et un update de l’autre fera très bien l’affaire.
- Vous avez configuré un répertoire partagé sous VirtualBox, accessible aussi bien sous votre système hôte que depuis votre serveur. Placez donc juste l’archive du projet à tester dans ce répertoire.
Piège à éviter :
Alors que je découvrais VirtualBox, la solution me paraissait si puissante que j’avais décidé d’en faire directement mon serveur de développement, via un répertoire partagé entre le système hôte (alors un Windows XP) et virtualisé (la Debian). Je continuais à développer sous Windows, mais le code était directement interprété par le serveur virtualisé. « Chouette, je peux tester en temps réel en conditions réelles !« . MAIS, un problème d’implémentation du « pilote » permettant le partage de répertoires rendait l’exécution d’un projet symfony complexe extrêmement lente (plus de 30 secondes par page).
Et maintenant, je fais quoi ?
Pour résumer, vous possédez maintenant une version à jour de votre application, disponible sur un serveur (virtualisé), réplique parfaite (normalement) du serveur qui l’accueillera. Et bien, rappelez vous pourquoi vous venez de faire toutes ces manipulations : pour tester ! Suivez donc la procédure de déploiement de votre application que vous avez pu décrire au sein de votre documentation. Pour certains projets, il n’y a rien à faire de particulier, le projet est directement fonctionnel, mais pour d’autres, c’est le moment de vérifier que votre documentation, bêtement suivie à la lettre, permet d’arriver à une application qui fonctionne ; quelques exemples en vrac :
- Configuration de l’accès au SGBDR
- Droits en lecture/écriture de certains répertoires
- Mises à jour de fichiers
- Exécution de requêtes pré-requises
Si, une fois, les instructions de la documentation suivies, votre application ne fonctionne pas, c’est qu’il y a bien un problème, lié à la documentation ou à l’application.
Youpi ! Ça fonctionne !
Allons allons, calmons nous. Le déploiement du projet (ou de la mise à jour) fonctionne. Nous ne sommes pas encore en mesure de savoir si le projet fonctionne à 100% comme il devrait. Il vous faut maintenant torturer votre application dans tous les sens afin de déceler les bugs éventuels. Ou alors, et je vais peut-être créer une certaine frustration en m’arrêtant ici, c’est le moment de lancer vos 2000 tests unitaires et fonctionnels, qui vérifieront automatiquement le bon fonctionnement de votre application sur le système courant.
Virtualiser, encore +
Il est fort possible que votre application ne soit pas destinée à une plate-forme en particulier mais à être déployée sur un grand nombre de serveurs très différents, aux versions et configurations de PHP différentes. Vous pouvez alors virtualiser d’autres OS, aux configurations différentes. Ou vous pouvez pousser la virtualisation encore plus loin en optant pour VServer. Une fois VServer installé sur votre serveur de test, vous serez en mesure d’isoler parfaitement différents « sous-environnements » différents et de switcher d’une configuration à une autre extrêmement facilement, rapidement, et de manière très fiable, sécurisée parfaitement isolée.
En bref :
- Installez VirtualBox
- Virtualisez l’OS de votre choix
- Configurez cet OS virtualisé
- Testez, lancez vos tests