Freitag, April 10, 2020

Einrichten Node.js auf Webfaction

Was sind die notwendigen Schritte für die Einrichtung eines Node.js Anwendung auf Webfaction shared-hosting-account?

  • Nur eine Anmerkung für jeden Leser. Die zweite Antwort hat eine neue (aktuellere) Lösung, die über einen one-Klick installer. So beginnen Sie nicht auf der top-Antwort werden die Schritte nur noch. Blättern Sie nach unten einige!

3 Kommentare

  1. 56

    Einführung

    Das Ergebnis der folgenden Anweisungen ein Node.js Anwendung, die läuft ständig, erzeugt logfiles und startet sich selbst neu, selbst nach dem Neustart der server-Maschine. Die Anweisungen sind speziell für das shared-host-Konten auf Webfaction aber kann sein verwendet für Allgemeine Zwecke, auch.

    Installieren Node.js

    Obwohl Node.js download-Seite bietet Linux-binaries, es wäre robuster zu installieren Node.js von der Quelle. Download des aktuellsten source-codes, und extrahieren Sie Sie, um ~/src/.

    (log in to your webfaction console)
    > mkdir -p ~/src/
    > cd src/
    > wget http://nodejs.org/dist/v0.10.18/node-v0.10.18.tar.gz
    > tar -xzf node-v0.10.18.tar.gz

    Der nächste Schritt ist das kompilieren und installieren der code. Für diese Python verwendet wird. Weil die Standard – python version 2.4 ist (zumindest auf meinem Webfaction server web223) und weil die Node.js die installation erfordert eine der Versionen 2.6+, müssen Sie vorübergehend neuere version, die standardmäßig verwendet werden. Finden Sie unter den folgenden snippet (siehe auch dieser Artikel für details). Hinweis: --prefix=$HOME die erforderlich ist, aufgrund Webfaction Umwelt Einschränkungen (Sie haben nur Zugriff auf Ihr home-Verzeichnis).

    > cd node-v0.10.18/
    > alias python=python2.7
    > python configure --prefix=$HOME
    > make
    > make install

    Node.js installiert. Überprüfen Sie den Erfolg von

    > node -v
    v0.10.18

    Dass auch die installierten Knoten-Paket-manager npm.

    > npm -v
    1.3.8

    Installieren Immer

    Laufen zu halten Node.js Anwendung so lange wie möglich und Protokollierung der Ausgabe für die Wartung, die Sie benötigen,Für immer. Für die Bequemlichkeit, installieren Sie Global (für Sie) mit dem flag -g.

    > cd ~
    > npm install -g forever
    > forever --version
    v0.10.8

    Können Sie später aktualisieren, für immer von

    > npm update -g forever

    Starten Sie die Anwendung

    Ersten, erstellen Sie eine benutzerdefinierte Anwendung über Webfaction Control Panel (Custom app (port)). Nennen Sie es zum Beispiel foonode. Sie können auch eine Domäne erstellen und die Webseite für die app.

    Sekunde, machen Sie eine Notiz über die socket-port-Nummer, gab es für die app von Webfaction. Lassen Sie uns das Beispiel 48888.

    Dritte, kopieren Sie die Anwendung code, um das Verzeichnis der app, d.h. ~/webapps/foonode/. Nach, dass der Verzeichnis-Inhalt könnte zum Beispiel die folgenden.

    > cd ~/webapps/foonode/
    > ls
    node_modules/
    index.js

    Index.js wäre so etwas wie das snippet unten. Der entscheidende Punkt ist die Verwendung der angegebenen port-Nummer für die app.

    var http = require('http');
    http.createServer(function (req, res) {
        res.writeHead(200, {'Content-Type': 'text/plain'});
        res.end('Hello Universe.\n');
    }).listen(48888, '127.0.0.1');
    console.log('Listening at http://127.0.0.1:48888/');

    Nun können Sie die app ausführen von node index.js. Allerdings gibt es ein problem: beim beenden der shell, auch die app beendet. Daher sollten Sie laufen Node.js als ein daemon. Das ist etwas, wo sich Immer eine Menge für Sie. Starten Sie Knoten mit forever:

    > cd ~/webapps/foonode/
    > forever start index.js

    Nun die app wird weiterhin ausgeführt, nachdem Sie sich Abmelden und als eine sehr nette Sache zu haben, ist schnell neu gestartet, wenn es kommt zu Abstürzen. Dies ist eine Menge, aber noch nicht genug. Was, wenn der server neu startet? Wo ist der Ausgang aus der app gehen? Was ist, wenn das Skript stürzt ständig? Was ist, wenn Sie mehrere Skripts mit dem Namen index.js? Halten Sie zu Lesen.

    Verwenden Sie Absolute Pfade mit “ für Immer

    Immer identifiziert der Prozess, durch den Dateinamen des Skripts zugeführt forever start <filename_of_script>. Ein problem entsteht, wenn Sie mehrere Anwendungen mit dem gleichen Dateinamen für das Skript an.

    Zum Beispiel an, Sie haben zwei Anwendungen /home/foouser/webapps/foonode/index.js und /home/foouser/webapps/barnode/index.js. Wenn Sie jetzt starten beide mit forever start index.js in den Verzeichnissen der Anwendungen und führen Sie dann forever stop index.js nur einmal, das Ergebnis ist, dass beide Anwendungen gestoppt werden. Dies geschieht, weil Sie beide hatten die gleiche Identität index.js

    Die Lösung ist die Verwendung der absoluten filepaths bei der Angabe der script.

    > forever start /home/foouser/webapps/foonode/index.js

    Und beenden Sie die Ausführung:

    > forever stop /home/foouser/webapps/foonode/index.js

    Dadurch wird sichergestellt, dass nur die beabsichtigte Anwendung wird beendet. Diese Gewohnheit, mit absoluten Pfaden hat auch positive Auswirkungen auf forever list. Sehen dieses Problem für details.

    Protokollierung

    Speichern Sie die Anwendung output zu irgendwo, die folgenden Argumente angeben.

    -l <logfile>  = stream all output to this file. Relative to ~/.forever/
    -o <logfile>  = stream script's stdout to this file. Relative to current dir.
    -e <logfile>  = stream script's stderr to this file. Relative to current dir.
    -a  = append to the files instead of overwriting them.

    Scheint es bequem zu haben, ein Unterverzeichnis für die logs, z.B. logs/. Mit den Argumenten, absoluten Pfad und das Unterverzeichnis logs/der Befehl zu dem folgenden:

    > cd ~/webapps/foonode/
    > mkdir -p logs/
    > forever start -a -l forever.log -o logs/out.log -e logs/err.log /home/foouser/webapps/foonode/index.js

    Erkennen und durch einen Neustart des Spinning-Prozesses

    Immer hat die Parameter --minUptime und --spinSleepTime die sind nicht so gut dokumentiert derzeit. Die Bedeutung der Parameter ist zu kontrollieren, die situation, in der das Skript stürzt ab und fast sofort stürzt wieder nach dem Neustart. Wie immer versucht zu starten, das Skript so bald wie möglich nach dem Unfall, kann dies zu einer busy-loop die können Essen viel von Ressourcen des Servers.

    --minUptime gibt die Anzahl der Millisekunden, die das script laufen ohne Abstürze werden sofort neu gestartet. Wenn die Betriebszeit der abgestürzten Skript ist weniger als minUptime, dann wird das Skript als Spinnen also problematisch. Wenn die Betriebszeit größer ist, dann wird das Skript als non-spinning.

    Wenn ein spinning-Skript stürzt ab, d.h. die Laufzeit des Skript ist weniger als --minUptime dann ewig wartet --spinSleepTime Anzahl von Millisekunden, bevor ein Neustart des Skripts. Anderenfalls wird das Skript neu gestartet wird, so bald wie möglich. Dies verhindert, dass die Ressource-fressende Schleife. Sehen diese Antwort für die weitere Diskussion.

    Ich persönlich benutze 5000 für --minUptime um sicherzustellen, dass Knoten vollständig gestartet ist, bevor Sie deklarieren es nicht Spinnen. 2000 wäre ein guter für --spinSleepTime zu vermeiden, wird die Schleife aber immer noch versuchen, um das Skript zu starten schnell, nachdem die problematische situation löst.

    > forever start -a -l forever.log -o logs/out.log -e logs/err.log --minUptime=5000 --spinSleepTime=2000 /home/foouser/webapps/foonode/index.js

    Verwalten die Anwendung

    Als die Befehle wachsen, merken und schreiben, Sie wird mehr und mehr mühsam. Daher ist es zweckmäßig, kopieren Sie Sie in ein Makefile. Das makefile wird auch nützlich später, wenn Sie müssen angeben, dass ein Befehl ausgeführt wird, nachdem der server neu gestartet.

    > cd ~/webapps/foonode/
    > cat Makefile
    
    foreverstart:
        # Run server forever (until reboot)
        mkdir -p logs
        forever start -a -l forever.log -o logs/out.log -e logs/err.log --minUptime 5000 --spinSleepTime 2000 /home/foouser/webapps/foonode/index.js
    
    foreverstop:
        forever stop /home/foouser/webapps/foonode/index.js

    Halten Sie die Anwendung

    Ewig gilt nicht für den Fall wo der server wird neu gestartet. Für die, die Sie angeben müssen, ein cronjob mit @reboot Regel beginnen immer nach einem Neustart.

    > export EDITOR=nano   # Editor to use to edit crontab. A matter of taste.
    > crontab -e

    Fügen Sie die folgende Zeile ein und speichern Sie.

    @reboot make -C ~/webapps/foonode/ -f ~/webapps/foonode/Makefile foreverstart

    Die Zeile sorgt dafür, dass foonode wird sofort gestartet, nachdem der server neu gestartet. Die Flagge -C gibt das Verzeichnis zum ausführen des makefile aus und -f den tatsächlichen Speicherort der Datei makefile. Sehen diese Antwort für details über die Verwendung von @reboot.

    Abschluss

    Jetzt haben Sie einen Knoten Laufenden Prozess, die wirklich für immer oder zumindest so lange, wie es die Wartung Jungs, die Fütterung der server mit Strom. Viele Dinge getan, aber vielleicht noch mehr kommen wird. Dinge, die Sie gerne in der Zukunft tun, die nicht waren, die hier behandelt werden, gehören die folgenden.

    • Gerade für die änderungen einer Datei und wird automatisch neu gestartet, wenn erkannt (Siehe --watch im forever --help)
    • Mit Grunt.js anstelle von Make (Siehe bustardcelly/grunt-für immer)
    • Backupping der Anwendung einmal in eine Weile.

    Siehe auch

    Irgendwelche Ideen, Anregungen oder Korrekturen?

    • Webfaction (web510) läuft jetzt auch Python-2.7.5. Aliasing ist nicht mehr notwendig.
  2. 6

    Gut, haben Sie wahrscheinlich bereits gefolgt alle Schritte in der anderen Antwort (wow!!! solche Details! toll), aber es ist jetzt viel einfacher: Sie jetzt haben eine one-click-installer für node.js.

    • Ja, Sie tun, aber es sieht aus wie Ihre ein-Klick-Installationsprogramme nicht neu starten der Anwendung, wenn es abstürzt. Nicht gut für ein Produktions-Szenario, aber ich denke, Akseli nie wirklich festgelegt.
    • Naja, eigentlich lautet die Antwort: „Sie haben jetzt einen one-Klick installer“, das heißt, Sie können einfach installieren Sie einen node-js-Anwendung von Ihrem dashboard, der link ist nur da, um zu beweisen 🙂
    • Mithilfe der one-click-installar, bekam ich Probleme durch läuft ewig (Probleme mit der path-Variablen, die ich denke)… cd /home/myusername/webapps/myapp ./bin/forever server.js /usr/bin/env: node: No such file or directory
    • Ich habe versucht zu tun, mit mir die Segel-app, aber die core-directory-Struktur ist sehr unterschiedlich. Die Module sind in einen lib-Ordner, und es gibt keine app.js. Ich werde versuchen, diese mit der Befehlszeile in eine eigene app, als erste Antwort vorgeschlagen. Ich bin immer verwirrt darüber, wie die Arbeit an meiner app lokal und thn push-to-webfaction (via bitbucket oder was auch immer).
  3. 1

    Andere Möglichkeit ist die Installation nvm (Node Version Manager) und Typ:

    nvm install node

    Es ist nicht nur gültig für Webfaction.

Kostenlose Online-Tests