Wie richte ich eine Node.js App ein?

Bei mittwald ist die Nutzung von Node.js möglich. In der folgenden Anleitung erklären wir dir, wie du eine Node.js App bei uns einrichten kannst. 

Die Befehle node, npm, npx und yarn sind dabei im Projekt kostenlos nutzbar. Der dauerhafte Betrieb einer Node.js-App ist kostenpflichtig. Für die Nutzung muss das Add-on „Node.js App“ über den Softwaremanager im Kundencenter gebucht werden. Das Add-on kostet 9 Euro netto pro Monat und ist in jedem Tarif hinzubuchbar.

Node.js ist eine plattformübergreifende Open-Source-JavaScript-Laufzeitumgebung, die JavaScript-Code außerhalb eines Webbrowsers ausführen kann. Damit kann zum Beispiel ein Webserver betrieben werden.

Node.js wird in der JavaScript-Laufzeitumgebung V8 ausgeführt, die ursprünglich für Google Chrome entwickelt wurde und bietet eine ressourcensparende Architektur, die eine besonders große Anzahl gleichzeitig bestehender Netzwerkverbindungen ermöglicht.

Anleitung

In der folgenden Anleitung beschreiben wir kurz, wie du eine App installierst und diese dann in deinem Projekt verwalten kannst. Dabei ist eine spezielle Anpassung notwendig, weshalb wir dich bitten, diese Anleitung Schritt für Schritt zu befolgen.

Bei Schritt 1 gibt es zwei Möglichkeiten. Wir raten standardmäßig zu Variante A, für Fortgeschrittene kann aber auch Variante B interessant sein. 

Bitte installiere die gewünschte App in einem Verzeichnis deiner Wahl unterhalb des html-Verzeichnisses

1. Schritt (Variante A)

Damit deine App startet und dauerhaft aktiv bleibt, müssen wir ein paar Vorbereitungen treffen. Du benötigst eine Service-Datei, die den dauerhaften Betrieb gewährleistet. 

Die Service-Datei erstellst du mit dem folgenden Befehl. Bitte führe diesen in dem Verzeichnis aus, in welchem du deine App installiert hast. 

pXXXXXX:/html > mwservicectl create

Das mwservicectl fragt dich nun, mit welchem Befehl deine Node.js-App gestartet werden kann z. B. npm run build

mwservicectl create

Please specify a command for service file '/html/.mwservice.yaml'
Command: npm run build

Waiting for associated service...
[xxxx-xx-xx xx:xx:xx] mwservice INFO: Service starting now
[xxxx-xx-xx xx:xx:xx] npm: xx:xx:xx :warning:  PUBLIC_URL should be a full URL
[xxxx-xx-xx xx:xx:xx] npm: xx:xx:xx :sparkles: Server started at http://localhost:/tmp/.mwservice/html.sock
Service was successfully enabled.

1. Schritt (Variante B)

Alternativ kannst du die Datei namens .mwservice.yaml in dem Verzeichnis, in der du deine App installiert hast, auch selbst anlegen. 

Fülle die Datei mit dem folgenden Inhalt. Dabei ist es enorm wichtig, dass die Formatierung exakt übernommen wird. 

 

Zudem musst du die .mwservice.yaml noch den Anforderungen deiner Node.js-Anwendung entsprechend anpassen:

command: <ANPASSUNG%ERFORDERLICH>
args: [ "<ANPASSUNG%ERFORDERLICH>", "<ANPASSUNG%ERFORDERLICH>" ]
working_dir: /html/DEIN-VERZEICHNIS
env:
  ENV1: <ANPASSUNG%ERFORDERLICH>
enabled: <true/false>

Damit du die Datei an deine Anforderungen anpassen kannst, möchten wir dir kurz erklären, wofür jede Zeile steht:
 

  • command − Hier musst du den Befehl eingetragen, mit dem deine App gestartet werden kann. Das kann z. B. node, npx, npm oder auch ein Befehl sein, den du selbst über den Package Manager von Node.js nachinstalliert hast. 
  • args – Das sind die Argumente, die deine App benötigt, um den Betrieb aufzunehmen, das kann nur ein Wort sein, wie start, build oder eine .js Datei wie index.js oder server.js.

    Wichtig sind die Anführungsstriche und das Komma bei mehreren Argumenten. Nach dem letzten Argument darf kein Komma folgen. 
  • working_dir – Hier trägst du den Pfad zu deinem Verzeichnis ein, in dem du deine App installiert hast.
  • NODE_ENV – hier trägst du den Status deiner App an. In den meisten Fällen ist das production. Ist deine App noch nicht stabil, kannst du hier auch development nutzen.
  • enabled – Hier ist true oder false möglich. Mit der Option teilst du unserem Service mit, ob wir deine App direkt starten sollen oder nicht. 
     

Nach den Anpassungen der .mwservice.yaml auf die Bedürfnisse deiner App, führe bitte den folgenden Befehl aus. Dafür solltest du immer im Verzeichnis sein, in dem sich die .mwservice.yaml befindet.  

pXXXXXX:/html > mwservicectl create

Hier einige Beispiele, wie eine Anpassung aussehen könnte:

command: npx
args: [ "directus", "start" ]
working_dir: /html/d1
env:
  NODE_ENV: production
enabled: true
command: node
args: [ "server.js" ]
working_dir: /html/api
env:
  NODE_ENV: production
enabled: true
command: npm
args: [ "start" ]
working_dir: /html/umami
env:
  NODE_ENV: production
enabled: false

2. Schritt

Damit deine Anwendung über dein Projekt erreichbar ist, muss eine Domain oder Subdomain auf den Zielordner der node.js-App zeigen.

Erstelle nun die Domain oder Subdomain über das Kundencenter und lasse diese auf das Verzeichnis zeigen, in welchem du deine App installiert und die Datei .mwservice.yaml angelegt wurde.

3. Schritt (optional)

Deine App soll von außen erreichbar sein und benötigt dafür die Angabe eines Ports?

In der Umgebungsvariable PORT, die du mit process.env.PORT in deiner node.js App auslesen kannst, stellen wir dir den korrekten Port (bzw. streng genommen einen sogenannten Socket) zur Verfügung, über welchen deine App dann erreichbar ist.

Sollte deine App einen eindeutigen Pfad zum Socket bevorzugen, findest du den Pfad in der mwservicectl; dazu aber mehr im nächsten Schritt. 

4. Schritt

Ab diesem Zeitpunkt kannst du deine App über den Befehl mwservicectl steuern. 
Den Befehl solltest du immer im Verzeichnis ausführen, in dem sich die .mwservice.yaml befindet.  

pXXXXXX:/html > mwservicectl COMMAND
 
Controls the associated service for the current folder.
 
Commands:
 
  create        Create service
  status        Show status of service defined by .mwservice.yaml
  enable        Enable service defined by .mwservice.yaml
  disable       Disable service defined by .mwservice.yaml
  restart       Restart service defined by .mwservice.yaml

  remove        Remove service defined by .mwservice.yaml
  cleanup       Clean up all orphaned services

  log-watch     Watch log files of service defined by .mwservice.yaml
  log-clear     Clear log files of service defined by .mwservice.yaml

 
Service Files:
 
  Service File  /html/.mwservice.yaml
  Socket File   /tmp/.mwservice/html.sock
  PID File      /tmp/.mwservice/run/html.mwservice.pid
  Sysout File   /logs/html.mwservice.log
  Syserr File   /logs/html.mwservice.err

Gerne möchten wir dir auch noch die Befehle der mwservicectl erläutern:

  • create – Erstellt für dich eine .mwservice.yaml und startet deine Node.js-App danach für dich. Der Befehl fragt dich, danach, wie deine Node.js-App gestartet werden kann. z.B. per npm run build
  • status – Zeigt dir den aktuellen Status deiner App an und versorgt dich mit allen wichtigen Informationen.
  • enable – Solltest du nicht bereits in der .mwservice.yaml enabled auf true gesetzt haben, kannst du es mit diesem Befehl tun.
  • disable – Mit dem Befehl kannst du deine App erst mal pausieren, aber später jederzeit wieder starten.
  • restart – Hast du Veränderungen an deiner App vorgenommen, die einen Neustart erfordern, ist das genau dein Befehl.
  • remove – Hiermit kannst du den Prozess, der durch deine .mwservice.yaml erstellt wurde, löschen. Wichtig: Der Befehl funktioniert nur in Verzeichnissen, in denen eine .mwservice.yaml enthalten ist. Der Befehl erstellt an gleicher Stelle ein Backup der Datei und löscht diese nicht.
  • cleanup – Der Befehl räumt für dich im kompletten Projekt auf. Du kannst ihn von jedem Verzeichnis aus starten. Du hast deine .mwservice.yaml gelöscht, dann räumt der Befehl für dich auf. Es schlägt dir auch Verzeichnisse vor, in denen noch Prozesse gestartet werden konnten.
  • log-watch – Lass dir das Logfile von deinem Prozess (.pid) direkt anzeigen.
  • log-clear – Leere das Logfile von deinem Prozess, um einen besseren Überblick zu erhalten. 

    Unter den Service Files findest du die Pfade zu allen genannten Dateien, die für deine App interessant sein könnten.