Mit Knoten live gehen

In meinem letzten Artikel sprach ich über meine Freude, das Express-Framework zu entdecken. Express ist das, was mir das Gefühl gibt, ich könnte wirklich etwas mit Node bauen und Spaß daran haben. Und in der Tat - das habe ich getan! Ich baute einige Beispiel-Web-Apps und hatte viel Spaß. Aber irgendwann entschied ich mich, es war Zeit zu bücken und ernst zu werden. Ich mochte Node, ich liebte Express, und wenn ich mich wirklich dazu verpflichten würde, es zu lernen, dann machen Sie nicht den letzten Schritt und erstellen tatsächlich einen echt Website, die es verwendet.

Eine andere Sache, die ich während meiner Node-Ausbildung (Nodacation?) Früh gelernt habe, war, dass das Stoppen und Neustarten einer Node-App ein wirklicher Schmerz im Heck war. Ich hatte großen Erfolg mit Nodemon von Remy Sharp. Ihr Code wird aktualisiert, und die Node-App wird automatisch neu gestartet.

Das klingt zwar trivial, aber für mich war meine gesamte Erfahrung mit Node auf der Kommandozeile. Ich würde einfach rennen Knoten App und testen Sie den Port 3000. Ich wusste wirklich nicht, worauf es ankommt, um dieselbe Anwendung auf einem realen Server zum Laufen zu bringen und auf eine Domäne zu reagieren. In diesem Artikel beschreibe ich zwei verschiedene Versuche, eine Node-App in Produktion zu bringen. Natürlich gibt es mehr Möglichkeiten (und hier bei Nettuts + nach weiteren Artikeln suchen!). Denken Sie daran, dies ist das, was ich mit Erfolg versucht habe und hatte.


Versuch eins: Apache FTW!

Mein typischer Vorgang zum Hochfahren einer neuen ColdFusion-Site bestand darin, meine Dateien einfach per FTP hochzuschieben und meinen Apache manuell zu bearbeiten httpd.conf Datei, um den neuen virtuellen Server hinzuzufügen.

Ich habe in meinem vorherigen Artikel bereits erwähnt, dass ich bei der serverseitigen Entwicklung hauptsächlich auf Adobe ColdFusion zurückgreifen muss. Wenn Sie es noch nie verwendet haben, ist die Integration in Ihren Webserver (ähnlich wie in PHP) eine der Hauptfunktionen. Dies bedeutet, dass ich den App-Server anweisen kann, Apache (oder IIS usw.) mitzuteilen, dass jede Anforderung einer Datei mit einer bestimmten Erweiterung an den ColdFusion-Server weitergeleitet werden sollte.

Natürlich ist Node etwas anders - Sie übernehmen im Wesentlichen bereits die Rolle eines Webservers. Ich wusste nicht, wie ich eine Node-App auf meinem vorhandenen Produktionsserver veröffentlichen würde. Mein typischer Vorgang zum Hochfahren einer neuen ColdFusion-Site bestand darin, meine Dateien einfach per FTP hochzuschieben und meinen Apache manuell zu bearbeiten httpd.conf Datei, um den neuen virtuellen Server hinzuzufügen. (Wenn ich IIS verwendet hätte, wäre es praktisch das gleiche - außer, ich würde stattdessen ihr grafisches Werkzeug verwenden.)

Ich fing an, über das Thema zu googeln und fand einige Antworten. Der eine, der am meisten geholfen hat, war ein Artikel von Davy Brion, "Hosting einer Node.js-Site über Apache". (Einen Überblick darüber, wie dies mit IIS möglich ist, finden Sie in Scott Hanselmans ausführlichem Artikel.) In seinem Artikel werden zwei Aspekte beschrieben: Sicherstellen, dass Ihr Knotenskript ausgeführt wird, wenn der Server gestartet wird und Apache konfiguriert wird. Ich habe den Skript-Startaspekt ignoriert, da seine Lösung Linux betraf und mein Produktionsserver Windows verwendete. (Ich bin ein großer Fan von OS X, aber aus irgendeinem Grund habe ich mich immer wohler mit dem Hosting unter Windows gefühlt. Ich weiß nicht warum, aber es funktioniert für mich. Im Wesentlichen kommt es darauf an, dass Apache die Anforderungen (zurück und zurück) erfüllt zwischen sich und Ihrer Node-Anwendung. Hier ein Beispiel, das ich zum Testen verwendet habe:

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

Beachten Sie, dass dies etwas anders ist als das von Davy. Sie möchten sicherstellen, dass Sie aktiviert sind mod_proxy und mod_proxy_http Dies sollte so einfach sein, dass sichergestellt ist, dass sie in Ihrer conf-Datei nicht auskommentiert sind. Schließlich habe ich Apache neu gestartet und meiner lokalen Hostdatei einen Eintrag für die oben angegebene Domäne hinzugefügt. Und es hat funktioniert!

Nun, während dies funktioniert hat, werde ich darauf hinweisen, dass viele der Ergebnisse, die Sie bei Googling zu diesem Thema erhalten, besprechen werden, dass die Leute nicht der Meinung sind, dass dies eine sehr performante Lösung ist. Um ehrlich zu sein, hatte ich damit gerechnet, eine Site zu hosten, die am besten jeden Tag eintausend Treffer erzielt, was mich also nicht wirklich interessierte. Was mich jedoch beschäftigte, war das Einrichten meiner App, sodass sie unter Windows automatisch gestartet und neu gestartet wurde. Ich habe einige Lösungen gesehen, aber bevor ich den Stecker gezogen habe und meine Website gestartet habe, habe ich mich entschieden, ein bisschen herumzuschauen und zu sehen, ob eine andere Option für mich besser funktioniert.


Versuch zwei: AppFog entdecken


Ich habe AppFog entdeckt, nachdem ich es von einem Kollegen von mir gelesen hatte. AppFog ist ein Cloud-basierter Service (was heutzutage nicht der Fall ist), der das Hosten von Anwendungen mit einer Vielzahl gängiger Engines vereinfacht. Von PHP über Grails bis Ruby und natürlich Node. Neben der Unterstützung verschiedener Engines lässt es sich auch gut in verschiedene Datenbanken und SCM-Anbieter integrieren. Es hat eine großartige Befehlszeilenunterstützung, aber was mich wirklich verkaufte, war, dass man es kostenlos testen konnte. AppFog bietet eine Vielzahl von Service-Levels, Sie können jedoch sofort mit einer öffentlichen, etwas hässlichen URL kostenlos testen. Lassen Sie uns einen Blick darauf werfen, wie schnell Sie AppFog verwenden können.

Zuerst wollen Sie sich anmelden. Nach Abschluss der Registrierung und Überprüfung werden Sie in der AppFog-Konsole angezeigt:


Es gibt eine Menge hier, die wir im Artikel nicht behandeln werden, aber für den Moment klicken Sie einfach auf Apps.


Für Ihre erste App klicken Sie einfach auf das Glänzende Neue App Taste. Jetzt haben Sie eine Entscheidung zu treffen. Mit welcher der vielen Starter-Apps sehen Sie Ihre Anwendung? Beachten Sie, dass Sie für jede der Starter-Apps tatsächlich einen Blick darauf werfen können, welcher Code zum Initialisieren Ihrer Anwendung verwendet wird. Wenn Sie eine vorhandene Node-App wie ich haben, wird der hier verwendete Code nicht stören. Sie werden es später einfach wegblasen. Ich habe Node Express ausgewählt.


Als Nächstes müssen Sie auswählen, wie Ihre Anwendung gehostet wird. Ich werde hier ehrlich sein und sagen, als ich zum ersten Mal mit AppFog spielte, wusste ich wirklich nicht, was ich hier auswählen sollte. Ich war bei AWS US East, da ich mit AWS besser vertraut war als mit HP oder den Lösungen von Microsoft.


Zum Schluss werden Sie aufgefordert, einen Domainnamen auszuwählen. Beachten Sie, dass Sie nur einen Teil des Domainnamens auswählen. Nach dem Upgrade auf eine kostenpflichtige Stufe können Sie Ihren Anwendungen "echte" Domänen hinzufügen. Aber zum Testen ist das in Ordnung. Ich bin mit nettutshelloworld gegangen.


Drücke den App erstellen und zurück, während AppFog in die Stadt geht…


Nachdem Sie alles erledigt haben, gelangen Sie in die Hauptverwaltungskonsole Ihrer Anwendung. Hier gibt es einige Optionen, darunter die Möglichkeit, Datenbankunterstützung und Protokollierungspakete hinzuzufügen. Sie können von hier aus auch Ihre Anwendung starten, stoppen und erneut starten.


Als letzten Schritt klicken Sie auf die Schaltfläche Besuchen Sie Live Site Klicken Sie einfach auf diese Schaltfläche, um dies zu bestätigen - ja - in etwa einer Minute, nachdem Sie eine Node-App im Web bereitgestellt haben, ohne ins Schwitzen zu geraten:


Woot! Ok, so sind die harten Teile erledigt. Wie bringen wir unsere Anwendung auf die AppFog-Plattform? Möglicherweise haben Sie eine Schaltfläche "Quellcode herunterladen" bemerkt. Dadurch erhalten Sie eine Kopie der "Seed" Node Express-Anwendung. Stattdessen möchten wir unsere Anwendung bereitstellen. Wenn Sie meinen vorherigen Artikel lesen, werden Sie sich daran erinnern, dass wir eine einfache Bloganwendung erhalten haben. Es hatte zwei Ansichten (eine Liste von Einträgen und einen bestimmten Eintrag), basierend auf einer statischen Liste von Blogdaten. In der ZIP-Datei, die Sie von diesem Artikel herunterladen können, ist der Ordner "blog4" der Ordner, mit dem ich arbeite.

Um Code für AppFog bereitzustellen, verwenden Sie ein einfaches Befehlszeilenprogramm, af. Dieses Tool kann unter Windows, OS X und Linux installiert werden. Die Installationsanweisungen sind hier (https://docs.appfog.com/getting-started/af-cli) detailliert beschrieben. Im Wesentlichen gilt jedoch Folgendes:

 gem installieren af

Sobald Sie ein af installiert haben, können Sie die AppFog-Konsole fast vergessen. Sicher müssen Sie irgendwann dorthin zurückkehren, aber für meine Produktionsstätte habe ich sie selten verwendet. Das af-Tool unterstützt - soweit ich das beurteilen kann - auch alles, was die Konsole unterstützt. Um loszulegen, müssen Sie sich zuerst anmelden.


Dieses Login scheint für eine Weile zu bestehen, aber im Allgemeinen logge ich mich immer zuerst ein, wenn ich mit meiner Anwendung arbeite. Jetzt wechsle ich zu dem Ordner, der meine Anwendung enthält.


Nun zum coolen Teil. Wenn Sie Ihren Code auf AppFog übertragen, geben Sie einfach einen Aktualisierungsbefehl ein:


Der Screenshot oben gibt Ihnen keine Vorstellung davon, wie lange der Vorgang dauert. Jede dieser Zeilen wurde ausgespuckt, als sie passierten. In meinen Tests dauert dieser Vorgang etwa 10 Sekunden. Meine Anwendungen sind klein, daher kann Ihre Laufleistung variieren. Falls Sie neugierig sind, ja, meine Bewerbung war während dieses Prozesses nicht verfügbar. Im 10-Sekunden-Update-Prozess betrug diese Ausfallzeit etwa 2 Sekunden. Ich denke, das ist in Ordnung, aber wenn dies Sie stört, wird im AppFog-Blog eine hervorragende Problemumgehung beschrieben: So aktualisieren Sie Ihre AppFog-App mit NULL-Ausfallzeiten.

Hat es funktioniert? Überzeugen Sie sich selbst. Öffnen Sie Ihren Browser unter http://nettutshelloworld.aws.af.cm/ und Sie sollten den wunderbaren, wenn auch statischen Blog sehen, den ich erstellt habe:



Ist es wirklich so??

Das erste Mal, als ich diesen Prozess durchlief, schrie ich fast vor Freude auf. Ich konnte nicht glauben, wie verdammt einfach es war. Für mich war dies wirklich die "letzte Verbindung" zwischen dem Schreiben von Node-Anwendungen und dem Teilen dieser mit der Welt. Natürlich gab es ein paar Einschränkungen, auf die ich gestoßen bin. Das erste ist, dass, während meine Anwendung als AppFog ausgeführt wurde, der Port, den er abhört, über eine Umgebungsvariable gebunden werden soll. Also musste ich diese Zeile ändern:

 App.listen (3000);

Zu diesem:

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

Wie gesagt, meine Anwendung funktionierte so wie sie ist, aber ich schätze, dass 3000 nicht immer verfügbar ist. Sie möchten also sicherstellen, dass Sie diese winzige Optimierung vornehmen. Wenn Sie andere Dienste wie MySQL oder Mongo nutzen, müssen Sie ähnliche Änderungen vornehmen. (Obwohl in meiner Produktionsanwendung die Mongo-Verbindung noch nicht aktualisiert wurde, war dies noch kein Problem. Aber sie steht auf meiner To-Do-Liste!)

Wie hat es für mich funktioniert? Zum größten Teil - perfekt. Ich habe jetzt zwei Websites auf AppFog gestartet, das JavaScript-Cookbook und CajunIpsum. Wenn ich eine Kritik machen müsste, wäre es das erste und einzige Mal, dass ich mich an den Support wenden musste. Ich war nicht zufrieden damit, wie lange es dauerte, bis ich eine Antwort erhielt. Ich hatte bisher nur eine Supportanfrage, also bin ich bereit zu wetten (oder zu hoffen), dass dies eine ungewöhnliche Situation war.

.