it-swarm.com.de

Wie führe ich eine Node.js-Anwendung als eigenen Prozess aus?

Wie kann ich Node.js am besten bereitstellen?

Ich besitze ein Dreamhost-VPS (so wird es VM genannt), 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.

192
respectTheCode

Antwort 2016 : Fast jede Linux-Distribution wird mit systemd ausgeliefert, was bedeutet, dass für immer, monit, PM2 usw. Nein sind länger notwendig - Ihr Betriebssystem erledigt diese Aufgaben bereits .

Erstellen Sie eine myapp.service - Datei (wobei Sie "myapp" natürlich durch den Namen Ihrer App ersetzen):

[Unit]
Description=My app

[Service]
ExecStart=/var/www/myapp/app.js
Restart=always
User=nobody
# Note Debian/Ubuntu uses 'nogroup', RHEL/Fedora uses 'nobody'
Group=nobody
Environment=PATH=/usr/bin:/usr/local/bin
Environment=NODE_ENV=production
WorkingDirectory=/var/www/myapp

[Install]
WantedBy=multi-user.target

Beachten Sie, wenn Sie Unix noch nicht kennen: /var/www/myapp/app.js Sollte #!/usr/bin/env node In der ersten Zeile haben.

Kopieren Sie Ihre Servicedatei in den Ordner /etc/systemd/system.

Informieren Sie systemd mit systemctl daemon-reload Über den neuen Dienst.

Starten Sie es mit systemctl start myapp.

Aktivieren Sie es, um beim Booten mit systemctl enable myapp Ausgeführt zu werden.

Siehe Protokolle mit journalctl -u myapp

Dies ist Bereitstellung von Node-Apps unter Linux, Ausgabe 2018 entnommen, das auch Befehle zum Generieren eines AWS/DigitalOcean enthält/Azure CloudConfig zum Erstellen von Linux-/Knotenservern (einschließlich der Datei .service).

100
mikemaccana

Verwenden Sie Forever . Es führt die Programme von Node.js in separaten Prozessen aus und startet sie neu, falls dies der Fall ist.

Verwendung:

  • forever start example.js Um einen Prozess zu starten.
  • forever list, Um eine Liste aller Prozesse anzuzeigen, die für immer gestartet wurden
  • forever stop example.js, Um den Prozess zu stoppen, oder forever stop 0, Um den Prozess mit Index 0 zu stoppen (wie durch forever list Gezeigt).
100
David Tang

Ich habe hier über meine Bereitstellungsmethode geschrieben: Bereitstellen von node.js-Apps

Zusamenfassend:

  • Verwenden Sie den Git-Post-Receive-Hook
  • Jake für das Build-Tool
  • Starten Sie als Service-Wrapper für Knoten hoch
  • Überwachen Sie, um Anwendungen zu überwachen und neu zu starten, wenn sie ausfallen
  • nginx zum Weiterleiten von Anforderungen an verschiedene Anwendungen auf demselben Server
41
Ben

pm2 macht die Tricks.

Folgende Funktionen stehen zur Verfügung: Überwachung, Neuladen von Hotcode, integrierter Lastenausgleich, automatisches Startskript und Wiederbelebungs-/Speicherauszugsprozesse.

16
nickleefly

Sie können monit, forever, upstart oder systemd verwenden, um Ihren Server zu starten.

Sie können Varnish oder HAProxy anstelle von Nginx verwenden (Nginx funktioniert bekanntermaßen nicht mit Websockets).

Als schnelle und schmutzige Lösung können Sie Nohup node your_app.js &, um zu verhindern, dass Ihre App mit Ihrem Server beendet wird, aber forever, monit und andere vorgeschlagene Lösungen sind besser.

9
nponeccop

Ich habe ein Upstart-Skript erstellt, das derzeit für meine Apps verwendet wird:

description "YOUR APP NAME"
author "Capy - http://ecapy.com"

env LOG_FILE=/var/log/node/miapp.log
env APP_DIR=/var/node/miapp
env APP=app.js
env PID_NAME=miapp.pid
env USER=www-data
env GROUP=www-data
env POST_START_MESSAGE_TO_LOG="miapp HAS BEEN STARTED."
env NODE_BIN=/usr/local/bin/node
env PID_PATH=/var/opt/node/run
env SERVER_ENV="production"

######################################################

start on runlevel [2345]
stop on runlevel [016]

respawn
respawn limit 99 5

pre-start script
    mkdir -p $PID_PATH
    mkdir -p /var/log/node
end script

script
    export NODE_ENV=$SERVER_ENV
    exec start-stop-daemon --start --chuid $USER:$GROUP --make-pidfile --pidfile $PID_PATH/$PID_NAME --chdir $APP_DIR --exec $NODE_BIN -- $APP >> $LOG_FILE 2>&1
end script

post-start script
    echo $POST_START_MESSAGE_TO_LOG >> $LOG_FILE
end script

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:

start your-service
stop your-service
restart your-service
status your-service
7
Capy

Ich habe eine ziemlich umfassende Anleitung zur Bereitstellung von Node.js mit Beispieldateien geschrieben:

Tutorial: Bereitstellen von Node.js-Anwendungen mit Beispielen

Es behandelt Dinge wie http-proxy, SSL und Socket.IO .

6
Rich Jones

Wenn Sie Root-Zugriff haben, sollten Sie einen Daemon so einrichten, dass er im Hintergrund sicher und zuverlässig ausgeführt wird. Wie Sie genau das für Debian und bunt tun, lesen Sie im Blog-Beitrag Führen Sie Node.js als Dienst auf aus Ubunt.

5
Seldaek

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:

  • Wer startet Ihre Prozessüberwachung? Forever ist ein großartiges Tool, aber es benötigt ein Überwachungstool, um sich selbst am Laufen zu halten. Das ist ein bisschen albern, warum nicht einfach dein Init-System benutzen?
  • Können Sie Ihre Prozesse angemessen überwachen?
  • Laufen Sie mehrere Backends? Wenn ja, haben Sie Vorkehrungen getroffen, um zu verhindern, dass einer von ihnen die anderen in Bezug auf die Ressourcennutzung beeinträchtigt?
  • Wird der Service die ganze Zeit gebraucht? Wenn nicht, ziehen Sie eine Socket-Aktivierung in Betracht (siehe Artikel).

All diese Dinge sind mit systemd einfach zu erledigen.

5

Forever erledigt den Trick.

@ 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.

3
Marak

Wie Box9 sagte, ist Forever eine gute Wahl für Seriencode. Es ist aber auch möglich, einen Prozess am Laufen zu halten, selbst wenn die Verbindung SSH vom Client getrennt wird.

Dies ist zwar nicht unbedingt eine gute Idee für die Produktion, ist jedoch sehr praktisch, wenn Sie sich mitten in langen Debugsitzungen befinden, die Konsolenausgabe langwieriger Prozesse verfolgen oder wenn Sie Ihre SSH-Verbindung trennen möchten, aber das Terminal auf dem Server am Leben erhalten möchten um später erneut eine Verbindung herzustellen (wie das Starten der Anwendung Node.js zu Hause und das erneute Herstellen einer Verbindung 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 in der Shell verwenden, um den Prozess auch dann weiter auszuführen, wenn das Client-SSH geschlossen ist. Sie können den Bildschirm aus dem Internet herunterladen/installieren, wenn er noch nicht installiert ist (suchen Sie unter Linux nach einem Paket für Ihre Distribution oder verwenden Sie MacPorts , wenn OS X).

Es funktioniert wie folgt:

  1. Wenn Sie die SSH-Verbindung zum ersten Mal öffnen, geben Sie 'screen' ein - dies startet Ihre Bildschirmsitzung.
  2. Fangen Sie an, wie gewohnt zu arbeiten (d. H. Starten Sie Ihre Node.js-Anwendung).
  3. Wenn Sie fertig sind, schließen Sie Ihr Terminal. Ihre Serverprozesse werden weiterhin ausgeführt.
  4. Um die Verbindung zu Ihrer Konsole wiederherzustellen, kehren Sie zum Server zurück, melden Sie sich an und geben Sie 'screen -r' ein, um die Verbindung wiederherzustellen. Ihr alter Konsolenkontext wird wieder angezeigt und Sie können ihn wieder verwenden.
  5. Wenn Sie den Bildschirm verlassen möchten, während Sie mit dem Server verbunden sind, geben Sie an der Eingabeaufforderung der Konsole "exit" ein. Dadurch gelangen Sie zur regulären Shell.

Auf diese Weise können Sie bei Bedarf mehrere Bildschirmsitzungen gleichzeitig ausführen und von jedem Client aus eine Verbindung herstellen. Lesen Sie die Dokumentation online für alle Optionen.

2
cjcela

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 für die Bereitstellung von Node.js-Apps mit Capistrano, Upstart und Nginx

2
Pono

https://paastor.com ist ein relativ neuer Dienst, der die Bereitstellung für Sie auf einem VPS oder einem anderen Server durchführt. Es gibt eine CLI für den Push-Code. Paastor hat eine kostenlose Stufe, zumindest zum Zeitpunkt der Veröffentlichung.

1
ruffrey

Versuchen Sie 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.

1
AndyGrom

Forever ist eine gute Option, um Apps am Laufen zu halten (und npm kann als nettes Modul installiert werden).

Aber für ernstere "Deployment" - Dinge wie Remote-Management des Deployments, Neustarts, Ausführen von Befehlen usw. - würde ich capistrano mit der Node-Erweiterung verwenden.

https://github.com/loopj/capistrano-node-deploy

1
martyman

In Ihrem Fall können Sie den Daemon pstart verwenden. Für eine vollständige Bereitstellungslösung kann ich capistrano vorschlagen. Zwei nützliche Anleitungen sind So richten Sie Node.js env ein und Bereitstellung über capistrano + upstart.

1
Anatoliy