Zum Hauptinhalt springen

Node.js Applikationen betreiben

Dieser Artikel erklärt, wie man Node.js-Anwendungen auf Nines Managed Servern betreibt.

Container-Deployment

Wenn Sie Ihre Anwendung in einem Container ausführen möchten, finden Sie in unserem Artikel zu Podman die wichtigsten Informationen.

Container ermöglichen Ihnen, Ihre Anwendung in unterschiedlichen Umgebungen betreiben zu können, ohne dabei wesentliche Anpassungen an der Applikation selbst vornehmen zu müssen. Container erleichtern zudem die Verwaltung von Abhängigkeiten und helfen Ihnen, Ihre Anwendung zu skalieren, indem sie sie von anderen Prozessen im System isolieren.

1. Node.js Version Manager einrichten

Um verschiedene Node.js-Versionen unabhängig des eingesetzten Betriebssystems zu verwenden, empfehlen wir die Nutzung eines Versionsmanagers wie nvm. Das ermöglicht es Ihnen auch, "globale" Node.js-Pakete installieren.

curl -o- https://raw.githubusercontent.com/nvm-sh/nvm/master/install.sh | bash

Neben der Installation von nvm wird der Pfad der Installation sowie eine Umgebungsvariable zu Ihrer .bashrc hinzugefügt. Um nvm über das CLI zu verwenden, muss die .bashrc erneut eingelesen werden.

source $SHELL

2. Node-Version installieren

Nun kann die gewünschte Node-Version installiert werden:

nvm ls-remote # verfügbare Versionen anzeigen
nvm install 'lts/*' # die neueste LTS-Version installieren
nvm install 22 # die neueste 22.x-Version installieren
nvm alias default 'lts/*' # LTS als Standardversion festlegen

Verschiedene Versionen verwalten

Um pro Projekt die verwendete Node-Version zu bestimmen, kann eine .nvmrc Konfigurationsdatei erstellt werden:

$ cat .nvmrc
lts/*

3. Prozessmanager installieren

Wir empfehlen die Nutzung von systemd für das Prozessmanagement. Im Fall von Node.js sollte es zusammen mit pm2 verwendet werden.

Während systemd hervorragend für die Verwaltung und Wiederherstellung von Diensten geeignet ist, vereinfacht pm2 das Node-Prozessmanagement mit integrierter Lastverteilung (Node.js läuft ohne pm2 nur als einzelner Prozess), überwacht Prozesse und ermöglicht und Neustarts ohne Ausfallzeiten.

Um sicherzustellen, dass pm2 nach einem Neustart immer gestartet wird, verwenden wir daher systemd, und pm2, um alle Node.js-Anwendungen eines Benutzers zu verwalten.

Installieren Sie pm2 mit folgendem Befehl:

npm install -g pm2

Sie können pm2 nun verwenden, um Ihre Node.js-Anwendungen zu verwalten. Weitere Details dazu finden Sie in der offiziellen Dokumentation.

4. pm2 nach dem Neustart mit systemd starten

Um pm2 als Benutzerdienst zu starten, wenn das System neu gestartet wird, erstellen Sie einen systemd-Benutzerdienst (~/.config/systemd/user/pm2.service):

[Unit]
Description=PM2 Prozessmanager
Documentation=https://pm2.keymetrics.io/

[Service]
Type=forking
LimitNOFILE=infinity
LimitNPROC=infinity
LimitCORE=infinity

Environment=NODE_ENV=production
Environment=NODE_VERSION=14
Environment=PM2_HOME=%h/.pm2

PIDFile=%h/.pm2/%p.pid

ExecStart=%h/.nvm/nvm-exec pm2 resurrect
ExecReload=%h/.nvm/nvm-exec pm2 reload all
ExecStop=%h/.nvm/nvm-exec pm2 kill

[Install]
WantedBy=default.target

Aktivieren und starten Sie den pm2-Dienst:

systemctl --user enable pm2
systemctl --user start pm2

Fehlersuche

  1. Stellen Sie sicher, dass die .bashrc korrekt geladen wird
  2. Überprüfen Sie, ob der Dienst korrekt gestartet wurde: systemctl --user status app.service
  3. Überprüfen Sie die Log-Ausgabe: journalctl --user -f

Weitere Informationen zur Verwendung von Systemd finden Sie im folgendem Support-Artikel.

5. Webserver konfigurieren

https

Dadurch sollte Ihre Anwendung über http zugänglich sein. Um https-Unterstützung hinzuzufügen, verwenden Sie bitte proxy_letsencrypt_https, wie in nine-manage-vhosts mit Let's Encrypt dokumentiert.

Die Anwendung läuft jetzt auf einem lokalen Port. Um die Anwendung über http und https zu erreichen, muss der Webserver diese Anfragen an den lokalen Port weiterleiten.

Auf Ihrem Managed Server sind bereits zwei nine-manage-vhost Vorlagen für diesen Anwendungsfall vorinstalliert: proxy und proxy_letsencrypt.

Erstellen Sie einen neuen vHost und geben den lokalen Port der Anwendung über die Variable PROXYPORT an:

$ sudo nine-manage-vhosts virtual-host create example.com --template proxy --template-variable PROXYPORT=3000 --webroot ~/exampleapp/static

Virtual Host created: example.com
example.com
===========
DOMAIN: example.com
USER: www-data
WEBROOT: /home/www-data/exampleapp/static
TEMPLATE: proxy
TEMPLATE VARIABLES: PROXYPORT
3000
ALIASES: www.example.com
example.com.server.nine.ch

Bei Aufruf der URL http://example.com.server.nine.ch wird nun Ihre Applikation angesprochen.