Débuter avec Node.js partie 4

Déploiement sur le cloud avec Nodester

| Romain Maton | Bovino |

Dernier article (eh oui déjà) de la série consacrée à Node.js. Maintenant que nous avons codé notre première application Node.js et HTML5, nous allons terminer en beauté le déploiement de l'application sur le cloud. C'est le sujet de cette quatrième partie avec l'étude du service Nodester, une plate-forme de déploiement open source d'applications Node.

Nous allons regarder de plus près comment fonctionne cette plate-forme, comment déployer notre application et où elle se trouve. Comment gère-t-elle les modules Node… En bref : qu'est-ce que Nodester et comment l'utilise-t-on ?

L'article original peut être lu sur le blog de Web Tambouille : Node.js partie 4 - Déploiement sur le cloud avec Nodester : Node.js, NPM, REST, Amazon EC2 et Git (date de publication : mars 2011).

Commentez ♪

- Titre : Débuter avec Node.js partie 4

- Auteurs : Romain Maton, Bovino

- Parution : 29 mars 2012

- Licence : Le contenu de cet article est rédigé par Romain Maton et est mis à disposition selon les termes de la Licence Creative Commons Attribution 3.0 non transposé. Les logos Developpez.com, en-tête, pied de page, css, et look & feel de l'article sont Copyright ® 2013 Developpez.com.

Sommaire

- Introduction

- Outils

- API REST

- Ready ? Now Register, Set Up and Deploy it !

- Autre exemple : JSRoulette

- Autres services

- Conclusion et remerciements

Introduction

Nodester

Nodester est une plate-forme de déploiement d'applications Node sur le cloud. Cette plate-forme utilise de nombreuses technologies parmi lesquelles :

- Node : actuellement Nodester utilise Node.js 0.4.0 et essaie d'être le plus à jour possible ;

- NPM : le package manager de modules Node est aussi pris en charge par Nodester et l'ajout/suppression de modules se fait en une seule ligne ;

- Amazon WS : avec, pour faire simple, une instance d'EC2 gérée par Nodester et gratuite pour nous sur laquelle sera déposée notre application ;

- Amazon EC2, RackSpace, GoGrid… : mais il sera aussi possible de déployer votre application Node sur votre propre instance d'un service sur le cloud (moyennant quelques installations sur votre instance) ;

- CouchOne : un service qui fournit une base CouchDB sur le cloud sur laquelle Nodester stocke entre autres les utilisateurs ;

- REST : Nodester s'attaque par API REST, que ce soit pour demander un coupon, paramétrer votre clé SSH, installer/démarrer/arrêter votre application, mais aussi pour installer/supprimer un module NPM ;

- Git : la commande git push est utilisée pour déployer votre application sur Nodester, il vous suffira d'ajouter une remote Nodester à votre projet GitHub.

Pas mal non ? On remarque plusieurs technologies, outils et services qui ont le vent en poupe en ce moment, qu'ils soient utilisés par les entreprises (EC2) ou par la communauté (Git/GitHub, NPM…). Mais ce n'est pas seulement une vitrine technologique, cela permet finalement une utilisation très simple du service. On peut ainsi tout déployer en deux minutes chrono, le plus long étant surtout d'attendre votre coupon !

Il n'y a que la base de données CouchDB par CouchOne sur laquelle j'aurais quelques doutes :

- nombreux billets décrivant des migrations de CouchDB vers Riak ou autres suite à des problèmes de scalabilité (qui est tout de même la base du mouvement NoSQL) ;

- une attaque en début d'année qui a supprimé toutes les données de la base de Nodester.

Je chipote, mais cela fait peut-être déjà trop…

Outils

Petite section juste pour dire que vous pouvez utiliser Nodester de différentes manières :

- un bon vieux curl ;

- ou le superbe client Nodester, qui s'installe par NPM : npm install nodester-cli.

Toutes les API (ou presque) ont été intégrées au client, ce qui les rend ainsi encore plus simples d'utilisation. Si vous avez NPM installé sur votre machine (ce qui devrait déjà être le cas), je vous le recommande fortement. Quelques exemples :

Le client fournit aussi une aide détaillée pour chaque commande (selon le niveau dans lequel vous êtes). Par exemple, prenons directement à la racine du client et ensuite, une fois app sélectionné :

C'est quand même mieux, non ? Et surtout on n'a plus besoin de faire des va-et-vient sur la page API de Nodester.
Mais tout n'est pas intégré actuellement (suppression d'application) donc gardez le curl à côté de vous.

API REST

Les grandes catégories de l'API sont les suivantes (détail complet) :

- Coupon : le point d'entrée pour l'accès à Nodester, faites votre appel et vous obtiendrez un coupon (batch par mail) que vous pourrez ensuite utiliser pour vous enregistrer ;

- Status : le statut de la plate-forme ;

- User : enregistrement, mise à jour et suppression de l'utilisateur ;

- App : information, création, mise à jour et suppression d'une application de l'utilisateur ;

- Apps : liste toutes les applications d'un utilisateur ;

- Appnpm : ajout, mise à jour ou suppression d'un module NPM ;

- Appdomains : permet de mettre un domaine pour une application.

Avec toutes ces commandes, nous sommes prêts pour enfin déployer notre application Node. C'est parti !

Ready ? Now Register, Set Up and Deploy it !

Je pars du principe que vous n'avez pas de compte utilisateur. Donc pour commencer, nous allons en créer un et pour cela, il vous faut un coupon :

Maintenant, on utilise l'URL de création d'utilisateur avec notre coupon (que vous recevrez par mail), un identifiant, notre mot de passe et notre clé SSH. Notez que vous pouvez, pour cette partie, vous rendre sur le site et passer par le menu register. Attention, Nodester a besoin que tous les caractères '+' de votre clé SSH soient remplacés par %2B. Un petit combo cat/sed/pbcopy fait le travail :

Voilà ! Vous avez créé un user en deux appels REST. Maintenant, occupons-nous de l'application et commençons par la créer (le nom de l'application en dernier argument n'est pas nécessaire si on est déjà dans le dossier projet) :

Très bien, l'application est créée, je n'ai plus qu'à récupérer le port et la remote Git, soit une commande pour récupérer les informations et deux commandes pour ajouter la remote et faire mon premier push :

Maintenant, j'installe les modules dont j'ai besoin à savoir express et socket.io et je démarre l'application :

C'est tout ! L'application sera accessible à l'URL suivante : http://node-example.nodester.com/ avec, dans mon cas, une petite erreur et un non-démarrage de l'application,  car j'utilise express@2.0.0beta, or je ne peux pas l'installer sur Nodester puisque ce module demande au moins un Node 0.4.1. Mais ce qui est plutôt agréable, c'est que ma ligne supérieure, lors de l'installation d'express, me renvoie un message d'erreur explicite.

Ce qui me fait rebondir sur les logs du serveur qui sont accessibles par la commande nodester app logs.

Je pourrais bien sûr utiliser la version 1.0.7 d'express, mais l'important n'est pas là et je préfère attendre que Nodester mette à jour sa version de Node. Mais on voit encore une fois que l'on touche une limite du cloud…

Pour que vous ne restiez pas sur votre faim, voici une application qui fonctionne (elle) et qui utilise aussi les Web Sockets.

Autre exemple : JSRoulette

La JSRoulette est une petite roulette qui sort aléatoirement un résultat, par défaut elle est remplie avec des nombres. Mais on peut la configurer pour afficher ce que l'on veut avec, tant que les données sont accessibles par requête GET avec un résultat en JSON, le tout avec un appel JSONP pour le cross-domain. Un petit exemple :

Une fois l'appel et la transformation effectués, la roulette sera remplie avec les abonnés Twitter de John Resig ! Notez l'attribut callback=callback, en effet la roulette s'attend à recevoir obligatoirement un JSONP dans une méthode callback. Cela mériterait une petite évolution.

L'application est accessible de deux façons différentes.

- Soit avec un seul navigateur : http://jsroulette.nodester.com/, vous avez un bouton et vous faites tourner la roulette.

- Soit avec deux navigateurs, un sur votre PC portable/bureau et l'autre sur votre mobile : http://jsroulette.nodester.com/?profile=le_token_de_votre_choix à saisir sur vos navigateurs. Si vous n'avez pas de mobile sur vous, vous pouvez ajouter en paramètre &theme=mobile pour simuler un navigateur sur mobile.

La seconde manière est plus intéressante puisqu'elle utilise les Web Sockets :

- en appuyant sur le bouton push sur le mobile, on envoie une demande de lancement de la roulette ;

- le navigateur qui contient la roulette et qui possède le même token récupère la demande et lance la roulette ;

- une fois le résultat obtenu, le gagnant est envoyé au serveur qui retourne l'information au client mobile de même token qui affichera le résultat sous le bouton.

Malgré une longue période d'inactivité, la connexion reste ouverte et les appels restent quasi instantanés (qu'ils soient Web Sockets, Long Polling, Flash, etc.). Un bon point pour l'application et la plate-forme Nodester !

Autres services

Si vous vous intéressez de près aux solutions de déploiement d'applications Node sur le cloud, je vous conseille deux autres solutions :

- Duostack : déploiement sur le cloud d'applications Ruby et Node par commande Git ;

- Joyent Nodehttps://no.de (et son superbe nom de domaine !) : ici aussi, une API REST et du Git pour le déploiement.

Bien sûr, si vous connaissez d'autres services gratuits d'hébergements d'applications Node, faites-le savoir dans les commentaires !

Je n'ai pas regardé les offres payantes, si quelqu'un a un retour à faire sur celles-ci je suis preneur.

Conclusion et remerciements

Nodester est un service intéressant pour déployer une application Node, POC ou autre. Maintenant, il faut reconnaître que le service est en évolution constante et il n'est pas rare que lors d'une mise à jour importante, plus rien ne fonctionne. C'est arrivé lors de la mise à jour vers Node 0.4.0 où pendant tout le week-end, le service d'authentification pour accéder par API à son application ne fonctionnait plus. Certes, les développeurs ont été très réactifs et pour un POC ce n'est pas si grave, mais pour une application qui se doit d'être disponible…

Toutefois, je ne chargerai pas trop Nodester, car comme beaucoup l'ont remarqué, Web Tambouille a été indisponible presque une journée dernièrement. Vous le savez peut-être déjà, mais ce blog, écrit en Python, tourne sur Google App Engine et malheureusement, ce jour-là, GAE a eu quelques soucis pour les applications Python :

Donc certes le cloud nous offre une scalabilité infinie, une disponibilité adaptée selon la charge serveur (plus de serveur, de CPU…), néanmoins on est pas à l'abri d'une panne de service ! Cela arrive, même à Google. Nodester risque aussi de rencontrer ces problématiques et je constate que la réactivité des développeurs est là et cela me plaît !

Plusieurs liens pour suivre ou contribuer autour de Nodester :

- le site : http://nodester.com/ ;

- la vidéo d'introduction : https://www.youtube.com/watch?v=IMCXbrI_Ygk ;

- le blog : http://nodester.tumblr.com/ ;

- le compte twitter : http://twitter.com/Nodester ;

- le compte GitHub : https://github.com/nodester/nodester.

Bien sûr, on est très loin d'une application de gestion et ce n'est pas le but de cet article. Mais vous pouvez voir avec cet exemple un code très minimal qui fait des Web Sockets, du send, du broadcast, du MVC… le tout très facilement !

Pour ceux qui veulent récupérer le projet, le code se trouve ici : node-example (ou télécharger l'archive).

Cet article a été publié avec l'aimable autorisation de Web Tambouille, l'article original (Node.js partie 4 - Déploiement sur le cloud avec Nodester : Node.js, NPM, REST, Amazon EC2 et Git) peut être vu sur Web Tambouille.

Nous tenons à remercier _Max_ pour sa relecture attentive de cet article.