Node.js ist eine Ja­va­Script-Lauf­zeit­um­ge­bung, mit der Sie pro­blem­los ser­ver­sei­ti­ge An­wen­dun­gen erstellen. Mit dem Pro­zess­ma­na­ger PM2 können Sie eine Node.js-App ein­rich­ten, die als Service unter Ubuntu 24.04 aus­ge­führt wird.

Die Aus­füh­rung von Node.js-Skripten als Service

Obwohl Skripte der Open-Source-Ja­va­Script-Lauf­zeit­um­ge­bung Node.js von der Be­fehls­zei­le aus über den Bild­schirm aus­ge­führt werden können, bietet die Aus­füh­rung der Skripte als Service über den Pro­zess­ma­na­ger PM2 den Skripten ein ro­bus­te­res Verhalten. Wenn die Skripte auf diese Weise als Dienst aus­ge­führt werden, werden sie au­to­ma­tisch neu gestartet, wenn der Server neu gestartet wird oder das Skript abstürzt.

PM2 ist ein Pro­zess­ma­na­ger für Node.js mit einer Vielzahl von Funk­tio­nen, mit denen Sie Ihre Node.js-Skripte steuern und verwalten können. Besuchen Sie die of­fi­zi­el­le PM2-Website für weitere In­for­ma­tio­nen zur Ver­wen­dung von PM2.

An­for­de­run­gen

Bevor Sie mit den weiteren Schritten zur In­stal­la­ti­on von Node.js mit Apache und PM2 beginnen, stellen Sie sicher, dass die folgenden An­for­de­run­gen erfüllt sind:

  • Ein Server unter Linux (Ubuntu 24.04).
  • Ein funk­tio­nie­ren­der Do­main­na­me, der auf den Server zeigt.
  • Ein funktions- und lauf­fä­hi­ger Apache Webserver
Cloud Server
Leis­tungs­star­ke Kon­fi­gu­ra­tio­nen
  • On-Demand ska­lier­bar & Root-Zugriff inklusive
  • Hoch­ver­füg­ba­re Server-Plattform
  • ISO-zer­ti­fi­zier­te Re­chen­zen­tren am Standort Deutsch­land

Node.js in­stal­lie­ren

Um Node.js zu in­stal­lie­ren, benötigen Sie das Kom­man­do­zei­len-Tool curl. Ak­tua­li­sie­ren Sie die Pakete Ihres Servers und in­stal­lie­ren Sie curl mit den folgenden Befehlen:

sudo apt update
sudo apt install curl -y
bash

Laden Sie das per­sön­li­che Pa­ket­ar­chiv (PPA) von Node.js herunter und fügen Sie das PPA zum Paket-Cache Ihres Servers hinzu. Das Archiv enthält eine ak­tu­el­le­re Node.js-Version als die Ubuntu-Re­po­si­to­ries:

curl -fsSL https://deb.nodesource.com/setup_20.x | sudo -E bash -
bash

In­stal­lie­ren Sie an­schlie­ßend Node.js:

sudo apt install -y nodejs
bash

Dadurch wird auch npm au­to­ma­tisch in­stal­liert.

Schließ­lich in­stal­lie­ren Sie das build-essential-Paket für npm. build-essential in­stal­liert wichtige Ent­wick­ler­werk­zeu­ge wie Compiler und Make, die benötigt werden, damit Node.js npm-Module mit nativen Er­wei­te­run­gen korrekt kom­pi­lie­ren und ausführen kann.

sudo apt install -y build-essential
bash

Erstellen einer ex­em­pla­ri­schen Node.js-Anwendung

Für dieses Beispiel werden wir zunächst ein separates Ver­zeich­nis im Do­ku­men­ten­stamm Ihrer Website erstellen, um Node.js-An­wen­dun­gen un­ter­zu­brin­gen:

sudo mkdir /var/www/html/nodejs
bash

Erstellen Sie die Datei hello.js in diesem Ver­zeich­nis:

sudo nano /var/www/html/nodejs/hello.js
bash

Fügen Sie dann folgenden Bei­spiel­in­halt in die Datei ein:

#!/usr/bin/env node
var http = require('http');
http.createServer(function (request, response) {
response.writeHead(200, {'Content-Type': 'text/plain'});
response.end('Hello World! Node.js is working correctly.\n');
}).listen(8080, '0.0.0.0');
console.log('Server running at http://127.0.0.1:8080/');
ja­va­script

Speichern und beenden Sie die Datei und machen Sie sie mit folgendem Befehl aus­führ­bar:

sudo chmod 755 hello.js
bash

Firewall prüfen

Ubuntu 24.04 aktiviert unter Umständen die ufw-Firewall stan­dard­mä­ßig. Damit Sie Ihre Node.js-Anwendung direkt testen können, müssen Sie si­cher­stel­len, dass der Port 8080 offen ist:

sudo ufw allow 8080/tcp
bash

Dieser Schritt ist ins­be­son­de­re dann wichtig, wenn Sie Ihren Server direkt über die IP-Adresse oder einen Browser außerhalb des Servers aufrufen möchten. Wird Node.js aus­schließ­lich über Apache und den Proxy be­reit­ge­stellt, ist dieser Schritt optional, da der Proxy den Verkehr wei­ter­lei­tet.

PM2 in­stal­lie­ren

Verwenden Sie npm, um PM2 mit dem folgenden Befehl zu in­stal­lie­ren:

sudo npm install -g pm2
bash

Starten Sie das eben erstellte Bei­spiel­skript hello.js mit dem Befehl:

sudo pm2 start hello.js
bash

Als root fügen Sie PM2 zu den Startup-Skripten hinzu, sodass es beim Neustart des Servers au­to­ma­tisch neu gestartet wird, und speichern Sie die aktuell laufenden Prozesse:

sudo pm2 startup systemd
sudo pm2 save
bash

Apache kon­fi­gu­rie­ren

Um vom Web aus auf das Node.js-Skript zu­zu­grei­fen, in­stal­lie­ren Sie die Apache-Module proxy und proxy_http mit den Befehlen:

sudo a2enmod proxy
sudo a2enmod proxy_http
bash

Nach Abschluss der In­stal­la­ti­on starten Sie Apache neu, damit die Än­de­run­gen wirksam werden:

sudo systemctl restart apache2
bash

Als Nächstes müssen Sie die Apache-Proxy-Kon­fi­gu­ra­tio­nen anpassen. Folgende An­wei­sun­gen fügen Sie in den Vir­tu­al­Host-Be­fehls­block in der Haupt­kon­fi­gu­ra­ti­ons­da­tei des Apache-Servers ein.

Diese Apache-Kon­fi­gu­ra­ti­ons­da­tei finden Sie nor­ma­ler­wei­se im Dateipfad /etc/apache2/sites-available/example.com.conf auf Ubuntu.

Hinweis

Der Spei­cher­ort und Dateiname der Apache-Kon­fi­gu­ra­ti­ons­da­tei einer Website kann variieren.

Be­ar­bei­ten Sie diese Datei mit einem Editor Ihrer Wahl, z. B. mit dem Befehl:

sudo nano /etc/apache2/sites-available/example.com.conf
bash

Scrollen Sie durch die Datei, bis Sie den Vir­tu­al­Host-Be­fehls­block finden, der so aussehen wird:

<VirtualHost *:80>
ServerName example.com
<Directory "/var/www/example.com/html">
AllowOverride All
</Directory>
</VirtualHost>

Fügen Sie Folgendes zum Vir­tu­al­Host-Be­fehls­block hinzu:

ProxyRequests Off
ProxyPreserveHost On
ProxyVia Full
<Proxy *>
Require all granted
</Proxy>
<Location /nodejs>
ProxyPass http://127.0.0.1:8080
ProxyPassReverse http://127.0.0.1:8080
</Location>

Stellen Sie sicher, dass diese Zeilen außerhalb von Ver­zeich­nis­be­fehls­blö­cken platziert werden. Zum Beispiel:

<VirtualHost *:80>
ServerName example.com
ProxyRequests Off
ProxyPreserveHost On
ProxyVia Full
<Proxy *>
Require all granted
</Proxy>
<Location /nodejs>
ProxyPass http://127.0.0.1:8080
ProxyPassReverse http://127.0.0.1:8080
</Location>
<Directory "/var/www/example.com/html">
AllowOverride All
</Directory>
</VirtualHost>

Speichern und beenden Sie die Datei und starten Sie dann Apache neu, damit die Än­de­run­gen wirksam werden:

sudo systemctl restart apache2
bash

Nach dem Neustart von Apache können Sie die Anwendung testen, indem Sie sie in einem Browser anzeigen. Sie sollten dort die folgende Nachricht aus der zuvor er­stell­ten Testdatei sehen:

Hello World! Node.js is working correctly.
Zum Hauptmenü