Vivre avec Node

Dans mon article précédent, j'ai parlé de ma joie de découvrir le framework Express. Express est ce qui me donne l’impression que je pourrais vraiment construire quelque chose avec Node et que je me amuserais à le faire. Et en fait, j'ai fait ça! J'ai construit des exemples d'applications Web et je me suis beaucoup amusé. Mais finalement, j'ai décidé qu'il était temps de s'attacher et de devenir sérieux. J’ai aimé Node, j’ai aimé Express, et si j’allais vraiment m’engager à l’apprendre, pourquoi ne pas passer à la dernière étape et créer un réal site web l'utilisant.

Une autre chose que j’ai apprise dès le début de mon éducation de nœud (Nodacation?) Était que le fait d’arrêter et de redémarrer une application de nœud était une vraie douleur à l’arrière. J'ai eu beaucoup de succès avec Nodemon de Remy Sharp. Il remarquera les mises à jour de votre code et redémarrera votre application Node automatiquement.

Cela semble anodin, je suppose, mais pour moi, toute mon expérience avec Node était sur la ligne de commande. Je courrais simplement application de noeud et testez sur le port 3000. Je ne savais vraiment pas ce que cela impliquait de faire fonctionner cette même application sur un vrai serveur et de répondre à un domaine. Dans cet article, je vais décrire deux tentatives différentes que j'ai effectuées pour mettre une application Node en production. Évidemment, il y a plus de moyens (et cherchez plus d'articles ici chez Nettuts +!), Alors gardez à l'esprit que c'est ce que j'ai essayé et obtenu avec succès..


Tentative: Apache FTW!

Mon processus habituel pour créer un nouveau site ColdFusion consistait simplement à faire remonter mes fichiers via FTP et à modifier manuellement mon Apache. httpd.conf fichier pour ajouter le nouveau serveur virtuel.

L'une des choses que j'ai mentionnées dans mon article précédent est que la plupart de mes expériences de développement côté serveur concernent Adobe ColdFusion. Si vous ne l’avez jamais utilisé, l’une de ses principales fonctionnalités consiste à s’intégrer à votre serveur Web (un peu comme PHP). Cela signifie que je peux dire au serveur d'applications de faire savoir à Apache (ou à IIS, etc.) que toute demande de fichier portant une extension particulière doit être transmise au serveur ColdFusion..

De toute évidence, Node est un peu différent - vous assumez déjà le rôle de serveur Web. Je ne savais donc pas comment prendre une application de nœud et la publier sur mon serveur de production existant. Mon processus habituel pour créer un nouveau site ColdFusion consistait simplement à faire remonter mes fichiers via FTP et à modifier manuellement mon Apache. httpd.conf fichier pour ajouter le nouveau serveur virtuel. (Si j'utilisais IIS, ce serait pratiquement pareil - sauf que j'utiliserais leur outil graphique à la place.)

J'ai commencé par googler sur le sujet et j'ai trouvé pas mal de réponses. Celui qui a vraiment le plus aidé est un article de Davy Brion, "Hébergement d’un site Node.js via Apache". (Pour savoir comment procéder avec IIS, consultez l'article détaillé de Scott Hanselman.) Cet article présente deux aspects: assurer l'exécution du script de nœud lors de l'initialisation du serveur et de la configuration d'Apache. J'ai ignoré l'aspect de démarrage du script car sa solution impliquait Linux et mon serveur de production utilisait Windows. (Je suis un grand fan d’OS X mais, pour une raison quelconque, je me suis toujours senti plus à l’hébergement sur Windows. Je ne sais pas pourquoi, mais cela fonctionne pour moi. Sa solution consiste essentiellement à utiliser Apache comme proxy pour les requêtes. entre lui et votre application Node. Voici un exemple que j’ai utilisé pour tester:

  ServerName nodetest.dev ProxyRequests Off ProxyPass / http://127.0.0.1:3000/ ProxyPassReverse / http://127.0.0.1:3000/ 

Notez que ceci est légèrement différent de l'exemple de Davy. Vous voulez vous assurer que vous avez activé mod_proxy et mod_proxy_http ce qui devrait être aussi simple que de s'assurer qu'ils ne sont pas commentés dans votre fichier conf. Enfin, j'ai redémarré Apache et ajouté une entrée à mon fichier d'hôtes local pour le domaine que j'ai spécifié ci-dessus. Et ça a fonctionné!

Maintenant, bien que cela ait fonctionné, je soulignerai que de nombreux résultats obtenus par Google sur ce sujet discuteront du fait que les gens ne pensent pas que cette solution est très performante. Pour être honnête, je m'attendais à héberger un site qui atteindrait, au mieux, environ mille visites par jour, donc cela ne me concernait pas vraiment. Ce qui me préoccupait, c’était de configurer mon application afin qu’elle démarre automatiquement et redémarre sous Windows. J'ai vu quelques solutions, mais avant de débrancher et de lancer mon site, j'ai décidé de creuser un peu et de voir si une autre option pourrait fonctionner mieux pour moi..


Tentative 2: découverte d'AppFog


J'ai découvert AppFog après avoir lu à ce sujet un collègue à moi. AppFog est un service en nuage (ce qui n’est plus le cas de nos jours) qui facilite l’hébergement d’applications à l’aide de divers moteurs populaires. De PHP à Grails à Ruby et - bien sûr - Node. Parallèlement à la prise en charge de divers moteurs, il s'intègre également parfaitement à diverses bases de données et fournisseurs SCM. Il dispose d’un excellent support en ligne de commande, mais ce qui m’a vraiment bien vendu, c’est que vous pouviez le tester gratuitement. AppFog propose une variété de niveaux de service, mais vous pouvez tout de suite tester gratuitement une URL publique quelque peu laide. Voyons à quelle vitesse vous pouvez aller vivre avec AppFog.

Tout d'abord, vous voudrez vous inscrire. Une fois l'enregistrement et la vérification terminés, vous êtes déposé dans la console d'AppFog:


Il y a beaucoup de choses ici que nous ne couvrirons pas dans l'article, mais pour l'instant, il suffit de cliquer sur applications.


Pour votre première application, appuyez simplement sur le brillant Nouvelle application bouton. Maintenant, vous avez une décision à prendre. Avec laquelle des nombreuses applications de démarrage verrez-vous votre application? Notez que pour chacune des applications de démarrage, vous pouvez réellement voir quel code sera utilisé pour initialiser votre application. Pour être clair, si vous avez une application Node existante, comme je l'ai fait, le code utilisé ici n'interférera pas. Vous allez simplement le détruire plus tard. J'ai sélectionné Node Express.


Ensuite, vous devrez choisir comment votre application est hébergée. Je vais être honnête ici et dire que quand j'ai joué pour la première fois avec AppFog, je ne savais vraiment pas quoi choisir ici. J'ai choisi AWS US East car je connaissais mieux AWS que les solutions HP ou Microsoft..


Enfin, vous êtes invité à sélectionner un nom de domaine. Notez que vous ne sélectionnez qu'une partie du nom de domaine. Une fois que vous passez à un niveau payant, vous pouvez ajouter de "vrais" domaines à vos applications. Mais pour les tests, c'est bien. Je suis allé avec nettutshelloworld.


Clique le Créer une application et reculez pendant qu'AppFog se rend en ville…


Une fois que tout est terminé, vous êtes transféré dans la console d'administration principale de votre application. Plusieurs options sont disponibles ici, y compris la possibilité d'ajouter des éléments tels que le support de base de données et les packages de journalisation. Vous pouvez également démarrer, arrêter et redémarrer votre application à partir d'ici..


Enfin, allez-y et cliquez sur le bouton Visiter le site en direct bouton juste pour confirmer que - oui - en environ une minute, vous avez déployé une application Node sur le Web sans vous déchaîner:


Woot! Ok, donc les parties difficiles sont faites. Comment pouvons-nous obtenir notre application sur la plate-forme AppFog? Vous avez peut-être remarqué un bouton "Télécharger le code source". Cela vous donne une copie de l'application "source" Node Express, mais nous souhaitons déployer notre application à la place. Si vous lisez mon article précédent, vous vous souviendrez que nous nous sommes retrouvés avec une simple application de blog. Il comportait deux vues (une liste d'entrées et une entrée particulière) basées sur une liste statique de données de blog. Dans le fichier zip que vous pouvez télécharger à partir de cet article, le dossier "blog4" est celui avec lequel je vais travailler.

Pour déployer du code sur AppFog, vous utilisez un simple programme en ligne de commande, af. Cet outil peut être installé sur Windows, OS X et Linux. Les instructions d'installation sont détaillées ici (https://docs.appfog.com/getting-started/af-cli), mais cela revient essentiellement à:

 bijou installer af

Une fois que vous avez installé, vous pouvez, pour la plupart, presque oublier la console AppFog. Vous devrez certainement y retourner éventuellement, mais pour mon site de production, je l’ai rarement utilisé. L'outil af supporte - autant que je sache - tout ce que la console supporte également. Pour commencer, vous devez d'abord vous connecter.


Cette connexion semble persister pendant un moment, mais en général, je me connecte toujours en premier lorsque je commence à travailler avec mon application. Maintenant, je vais passer au dossier contenant mon application..


Maintenant pour la partie cool. Transférer votre code dans AppFog est aussi simple que d’émettre une commande de mise à jour, comme suit:


La capture d'écran ci-dessus ne vous donne pas vraiment une idée de la durée du processus. Chacune de ces lignes ont été recrachées au fur et à mesure. Dans mes tests, ce processus prend environ 10 secondes. Mes applications sont petites et votre kilométrage peut varier. Au cas où vous seriez curieux, oui, ma candidature a été refusée pendant ce processus. Dans le processus de mise à jour de 10 secondes, ce temps d'arrêt s'élevait à environ 2 secondes. Je pense que ça va, mais si cela vous gêne, il existe une excellente solution de contournement décrite sur le blog AppFog: Comment mettre à jour votre application AppFog avec ZERO indisponibilité.

Cela a-t-il fonctionné? Voir par vous-même. Ouvrez votre navigateur sur http://nettutshelloworld.aws.af.cm/ et vous devriez voir le merveilleux blog, même statique, que j'ai construit:



Est-ce vraiment?

La première fois que j'ai traversé ce processus, j'ai presque crié de joie. Je ne pouvais pas croire à quel point c'était simple. Pour moi, c'était vraiment la "connexion finale" entre écrire des applications Node et les partager avec le monde. Bien sûr, il y a eu quelques mises en garde que j'ai rencontrées. La première est que, bien que mon application fonctionne telle quelle sur AppFog, vous êtes censé lier le port qu'elle écoute via une variable d'environnement. J'ai donc dû changer cette ligne:

 app.listen (3000);

Pour ça:

 app.listen (process.env.VCAP_APP_PORT || 3000);

Comme je l'ai dit, mon application fonctionnait telle quelle, mais j'imagine que 3 000 personnes ne seront peut-être pas toujours disponibles. Vous voulez donc vous assurer de faire ce petit ajustement. Si vous utilisez d'autres services, comme MySQL ou Mongo, vous devrez apporter des modifications similaires. (Bien que dans mon application de production, je n'ai pas encore mis à jour la connexion Mongo et cela n'a pas encore posé de problème. Mais c'est sur ma liste de tâches!)

Alors, comment cela a-t-il fonctionné pour moi? Pour la plupart - parfait. J'ai maintenant lancé deux sites sur AppFog, JavaScript Cookbook et CajunIpsum. Si je devais faire une critique, ce serait que la première - et la seule - fois où je devais contacter le support, je n’étais pas contente du temps qu’il a fallu pour obtenir une réponse. Jusqu'à présent, je n'ai reçu qu'une demande d'assistance, alors je suis prêt à parier (ou à espérer) qu'il s'agissait d'une situation inhabituelle..

.