Was ist der beste Weg, um Node.js bereitzustellen?
Ich habe einen Dreamhost-VPS (so nennt man eine VM ), und ich konnte Node.js installieren und einen Proxy einrichten. Dies funktioniert hervorragend, solange ich die SSH-Verbindung, mit der ich den Knoten gestartet habe, offen halte.
node.js
service
deployment
daemon
respektiere den Code
quelle
quelle
Antworten:
Antwort 2016 : Fast jede Linux-Distribution wird mit systemd geliefert , was bedeutet, dass für immer Monit, PM2 usw. nicht mehr erforderlich sind - Ihr Betriebssystem erledigt diese Aufgaben bereits .
myapp.service
Erstellen Sie eine Datei (ersetzen Sie 'myapp' natürlich durch den Namen Ihrer App):Beachten Sie, wenn Sie neu in Unix sind:
/var/www/myapp/app.js
sollte#!/usr/bin/env node
in der ersten Zeile stehen.Kopieren Sie Ihre Servicedatei in den
/etc/systemd/system
Ordner.Informieren Sie systemd über den neuen Dienst mit
systemctl daemon-reload
.Beginnen Sie mit
systemctl start myapp
.Aktivieren Sie es, um beim Booten mit ausgeführt zu werden
systemctl enable myapp
.Siehe Protokolle mit
journalctl -u myapp
Dies stammt aus der Bereitstellung von Knoten-Apps unter Linux, Ausgabe 2018 , die auch Befehle zum Generieren einer AWS / DigitalOcean / Azure-CloudConfig zum Erstellen von Linux- / Knotenservern (einschließlich der
.service
Datei) enthält.quelle
Failed to issue method call: Unit name ... is not valid.
?/etc/systemd/system
Sie sie möglicherweise ausführensystemctl daemon-reload
(systemd teilt Ihnen normalerweise mit, ob dies erforderlich ist). TBH Dies wird am besten als separate Frage gestellt./etc/systemd/system
, können Sie einfach verwendensystemctl enable /full/path/to/myapp.service
, wodurch ein Symlink/etc/systemd/system
für Sie erstellt wird.node
wird von/var/www/myapp/app.js
selbst aufgerufen . Wenn Sie unter Unix eine Datei ausführbar machen und die erste Zeile mit#!/some/file
der Datei beginnt, wird sie mit dieser Binärdatei interpretiert. Google 'Interpreter Unix', um mehr zu erfahren.Verwenden Sie für immer . Es führt Node.js-Programme in separaten Prozessen aus und startet sie neu, wenn eines stirbt.
Verwendung:
forever start example.js
einen Prozess starten.forever list
um eine Liste aller Prozesse zu sehen, die für immer gestartet wurdenforever stop example.js
um den Prozessforever stop 0
zu stoppen oder um den Prozess mit dem Index 0 zu stoppen (wie durch gezeigtforever list
).quelle
forever stop 0
hatte einen Fehler und die Dinge fielen einfach irgendwie auseinander. Ich habe versucht, dies ohne root auf seinem eigenen Benutzer zu tun, damit ich leicht aufräumen kann, sobald ich die richtige Lösung gefunden habe. Das kann mein Problem sein. Ich werde mich noch etwas damit befassen.Ich habe hier über meine Bereitstellungsmethode geschrieben: Bereitstellen von node.js-Apps
Zusamenfassend:
quelle
pm2 macht die Tricks.
Zu den Funktionen gehören: Überwachung, erneutes Laden von Hotcode, integrierter Load Balancer, automatisches Startskript und Wiederbelebungs- / Speicherauszugsprozesse.
quelle
Sie können verwendet werden
monit
,forever
,upstart
oder densystemd
Server zu starten.Sie können Lack oder HAProxy anstelle von Nginx verwenden (Nginx funktioniert bekanntermaßen nicht mit Websockets).
Als schnelle und schmutzige Lösung können Sie mit
nohup node your_app.js &
Ihrer App mit dem Server, sondern verhindern , beendetforever
,monit
und andere vorgeschlagenen Lösungen sind besser.quelle
Ich habe ein Upstart-Skript erstellt, das derzeit für meine Apps verwendet wird:
Passen Sie alle vor ######### an, erstellen Sie eine Datei in /etc/init/your-service.conf und fügen Sie sie dort ein.
Dann kannst du:
quelle
Ich habe eine ziemlich umfassende Anleitung zum Bereitstellen von Node.js mit Beispieldateien geschrieben:
Tutorial: Bereitstellen von Node.js-Anwendungen anhand von Beispielen
Es behandelt Dinge wie http-Proxy, SSL und Socket.IO .
quelle
Hier ist ein längerer Artikel zur Lösung dieses Problems mit systemd: http://savanne.be/articles/deploying-node-js-with-systemd/
Einige Dinge zu beachten:
All diese Dinge sind mit systemd einfach zu erledigen.
quelle
Wenn Sie Root-Zugriff haben, sollten Sie einen Daemon so einrichten, dass er sicher und solide im Hintergrund ausgeführt wird. Wie das für Debian und Ubuntu geht, lesen Sie im Blog-Beitrag Run Node.js as a Service unter Ubuntu .
quelle
Für immer wird der Trick tun.
@ Kevin: Sie sollten in der Lage sein, Prozesse gut zu beenden. Ich würde die Dokumentation ein wenig überprüfen. Wenn Sie den Fehler reproduzieren können, wäre es großartig, ihn als Problem auf GitHub zu veröffentlichen.
quelle
Versuchen Sie Folgendes: http://www.technology-ebay.de/the-teams/mobile-de/blog/deploying-node-applications-with-capistrano-github-nginx-and-upstart.html
Eine großartige und detaillierte Anleitung zum Bereitstellen von Node.js-Apps mit Capistrano, Upstart und Nginx
quelle
Wie Box9 sagte, ist Forever eine gute Wahl für Produktionscode. Es ist aber auch möglich, einen Prozess am Laufen zu halten, selbst wenn die SSH Verbindung vom Client geschlossen wird.
Dies ist zwar nicht unbedingt eine gute Idee für die Produktion, aber sehr praktisch, wenn Sie sich mitten in langen Debug-Sitzungen befinden oder die Konsolenausgabe langwieriger Prozesse verfolgen oder wenn es nützlich ist, Ihre SSH-Verbindung zu trennen, aber das Terminal auf dem Server am Leben zu halten um später wieder eine Verbindung herzustellen (wie das Starten der Node.js-Anwendung zu Hause und das erneute Verbinden mit der Konsole später bei der Arbeit, um zu überprüfen, wie die Dinge laufen).
Angenommen, Ihr Server ist eine * nix-Box, können Sie den Befehl screen aus der Shell verwenden, um den Prozess auch dann fortzusetzen, wenn der Client-SSH geschlossen ist. Sie können den Bildschirm aus dem Internet herunterladen / installieren, falls er noch nicht installiert ist (suchen Sie nach einem Paket für Ihre Distribution unter Linux oder verwenden Sie MacPorts unter OS X).
Es funktioniert wie folgt:
Bei Bedarf können mehrere Bildschirmsitzungen gleichzeitig ausgeführt werden, und Sie können von jedem Client aus eine Verbindung zu einer beliebigen Sitzung herstellen. Lesen Sie die Dokumentation online für alle Optionen.
quelle
nohup
undforever
Forever ist eine gute Option, um Apps am Laufen zu halten (und es ist npm als ein Modul installierbar, das nett ist).
Aber für eine ernsthaftere 'Bereitstellung' - Dinge wie die Fernverwaltung der Bereitstellung, des Neustarts, des Ausführens von Befehlen usw. - würde ich capistrano mit der Knotenerweiterung verwenden.
https://github.com/loopj/capistrano-node-deploy
quelle
https://paastor.com ist ein relativ neuer Dienst, der die Bereitstellung für Sie auf einem VPS oder einem anderen Server übernimmt. Es gibt eine CLI zum Übertragen von Code. Paastor hat eine kostenlose Stufe, zumindest zum Zeitpunkt der Veröffentlichung.
quelle
In Ihrem Fall können Sie den Upstart- Daemon verwenden. Für eine vollständige Bereitstellungslösung kann ich capistrano vorschlagen . Zwei nützliche Anleitungen sind das Einrichten von Node.js env und das Bereitstellen über capistrano + upstart .
quelle
Versuchen Sie es mit Node-Deploy-Server . Es ist ein komplexes Toolset zum Bereitstellen einer Anwendung auf Ihren privaten Servern. Es ist in Node.js geschrieben und verwendet npm für die Installation.
quelle