Node.js Applikationen betreiben
Dieser Artikel erklärt, wie man Node.js-Anwendungen auf Nines Managed Servern betreibt.
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
- Stellen Sie sicher, dass die
.bashrc
korrekt geladen wird - Überprüfen Sie, ob der Dienst korrekt gestartet wurde:
systemctl --user status app.service
- Überprüfen Sie die Log-Ausgabe:
journalctl --user -f
Weitere Informationen zur Verwendung von Systemd finden Sie im folgendem Support-Artikel.
5. Webserver konfigurieren
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.