Bereitstellen eines Produktions-Node.js-Servers
Habe ich geschrieben Node.js app, ich bin auf der Suche, um es läuft auf einer unserer Maschinen in der Produktion. Dies scheint wie eine ziemlich häufige Anfrage aber ich kann nicht finden eine adäquate Lösung. Gibt es keine etablierten Lösungen für die Bereitstellung von Produktions-Node.js apps?
Die app ist einfach (<100 LOC), Bedarf aber einer sehr effizienten, zuverlässigen und könnte ständig laufen seit Jahren ohne Neustart. Es läuft auf einer ganzen Seite mit Dutzenden von verbindungen/Sekunde. (die app ist nicht verwendet als webserver, es hat nur ein JSON-API)
Hier sind die Ansätze habe ich in Betracht gezogen, jedoch bin ich mir noch nicht sicher:
Mit einem Rahmen (zB. Express)
Weil die app benötigt, um hohe Leistung und ist so simpel, das hinzufügen von Paketen in der form des Rahmens ist etwas, was ich vermeiden möchte.
Starten Sie den server mit nohup
Das größte problem hier ist mit exception handling, wir (offensichtlich) nicht wollen, dass die gesamten server zum Absturz, weil die Ausnahme. Von dem was ich verstehe, das einwickeln der gesamten app in einem try {} catch {}
Schleife wird nicht helfen, da der Javascript-interpreter ist in einem unvorhersehbaren Zustand nach eine Ausnahme. Ist das richtig?
Mit so etwas wie Ewig
Habe ich das installiert Immer in einer FreeBSD-Maschine von uns und es war sehr buggy. Es endete laichen endlose Prozesse, die nicht getötet werden, für Immer ab. Ich hatte, um kill -9
um meine Maschine wieder und ich fühle mich nicht zu selbstsicher über die Ausführung einer Produktions-app auf Ewig. Es scheint auch, dass Upstart (ähnliches tool, aber mehr generic) läuft nicht unter FreeBSD.
Gehostete Lösungen (zB. Heroku, Rackspace, Amazon EC2, etc.)
Dies ist wahrscheinlich die einfachste Lösung, aber wir haben schon die ernsthafte hardware für den rest unseres webservers. Aus finanziellen überlegungen macht es keinen Sinn.
Sicher muss es einige etablierte Lösung für dieses? Bin ich etwas fehlt?
InformationsquelleAutor der Frage David Chouinard | 2011-12-05
Du musst angemeldet sein, um einen Kommentar abzugeben.
InformationsquelleAutor der Antwort alessioalex
Sehen Hosting-Knoten-Apps.
InformationsquelleAutor der Antwort helpermethod
Gibt es drei Fragen, die hier, denke ich.
Frage 0: "Sollte ich einen Rahmen für meine Knoten-app?"
Frage 1: "Wie führe ich die node-Server auf Maschinen in der Produktion?"
Frage 2: "Wie richte ich den Knoten apps, um die Produktion".
Für Frage 1ich mag Cluster (obwohl die Letzte Knoten-version hat sowas eingebaut, so dass Sie möglicherweise, dass der check out). Ich habe guten Erfolg mit so etwas wie Monit/Upstart-monitor-OS-level-Veranstaltungen und stellen Sie sicher, dass Ihre Server in guten Gesundheit. (Dies war die überwachung von N-Cluster von Ruby-Thin-Server, aber gleiche).
Je nach traffic können Sie ausführen möchten cluster auf mehrere Maschinen, dann ein load-balancer vor. Dies hängt davon ab, Ihren traffic, wie lange die Anträge dauern /wie lange Sie blockieren Sie die event-Schleife, und wie viele Prozessoren/Knoten-Instanzen, die Sie starten, pro Maschine.
Einen Rahmen gibt Ihnen eine bessere Fehlerbehandlung und fängt Fehler, würde exit normal node.js apps. Wenn Sie es tun, ohne einen Rahmen, stellen Sie sicher, dass Sie Lesen, bis auf die Fehlerbehandlung im node.js.
Für Frage 2ich glaube nicht, dass der Knoten Community (Gemeinschaft) hat eine gute Bereitstellung von standard noch. Sie könnten versuchen, mit Ruby - Capistrano-tool (und hier ist ein blog-Eintrag sprechen die Bereitstellung von cluster mit Capinstrano).
Die schlechte Sache über Capistrano ist, dass es macht einige Annahmen, die möglicherweise nicht wahr (das heißt:, dass Sie den Einsatz einer Rails-Projekt), so können Sie am Ende kämpfen mit dem Rahmen viel.
Mein goto-deployment-Lösung im Allgemeinen ist Python Stoff tool, welches Ihnen die Bereitstellung von tools, und Sie können tun, was Sie tun müssen.
Einer anderen Implementierung ist die option "die Wolke", mit Dingen wie Nodester: lassen Sie Sie kümmern sich um Sie.
InformationsquelleAutor der Antwort RyanWilcox
Versuchen Sie es mit pm2, es ist die einfache und intuitive CLI installierbar via NPM. Nur starten Sie Ihre Anwendung mit PM2 und die Anwendung ist bereit zu behandeln, die eine Tonne des Verkehrs
PM2 Offiziellen Link
Wie einrichten eines node-js-Anwendung für die Produktion mit pm2
InformationsquelleAutor der Antwort Sunil Hirole
Könnte man besser Antworten mehr auf ServerFault, aber es gibt eine Beschreibung von eine Benutzer-Erfahrungen hier mit
supervisord
. Sie gehen zu müssen, irgendeine Art von Prozess-watcher halten dasnode
Prozess lebendig, und eine weitere gemeinsame Empfehlung zu sein scheint, reverse-proxy-verbindungen zu dernode
Prozess irgendwie. Ich würde wahrscheinlich Stimmen Sie fürnginx
(auf diese Weise können Sienginx
Griff die Protokollierung, Authentifizierung, oder irgendeiner anderen höheren-level-HTTP-Funktionen, die Sie benötigen, im Gegensatz zu irgendwie Backen Sie in Knoten), aber die oben genannten Artikel erwähnthaproxy
in den Kommentaren hier und dort, die vielleicht leichter. Ihre Wahl der reverse-proxy wird wahrscheinlich weitgehend davon abhängen, ob oder nicht Sie müssen WebSocket-Unterstützung.Sicher bin ich nicht mehr "standard" - workflow existiert für die Knoten nur noch; es ist noch nicht ganz so ausgereift wie so etwas wie Schienen, hat eine Vielzahl von Möglichkeiten, um eine webapp läuft.
InformationsquelleAutor der Antwort Wyatt Anderson
Die Jungs von Cloudkick schrieb einen eine hervorragende Lösung für dieses. Es heißt
Cast
http://cast-project.org/.Installieren cast auf Ihrem server und auf Ihrem Rechner. Starten Sie die cast-agent auf die server und Ihre Arbeitsplatz-Zeichen mit den Servern cast-Instanz. Können Sie dann erstellen "bundles", lade Sie auf den server, erstellen/aktualisieren/löschen von Ihnen sowie starten/stoppen der Instanzen. Cast wird automatisch starten Sie Ihre Dienste neu, wenn Sie Abstürzen. Sie können auch Schwanz die stdout/strerr annähernd so gut wie erhalten eine Liste der aktiven Instanzen und PID#s und verwalten Sie Ihre Instanzen/Server von Ihrem Arbeitsplatz (keine SSHing erforderlich). Die docs sind etwas veraltet, aber die Ergebnisse sind es Wert, die wenig zusätzliche Arbeit. Alle Interaktionen und Befehle werden über HTTPS und eine RESTful API.
Zuvor war ich dabei alle upgrades, die von hand mit SCP/SSH. Wir
supervise
halten Dinge. Wir haben es nicht bereut.InformationsquelleAutor der Antwort Ryan Olds