# Node.js App für eine Website mit Apache auf Ubuntu 24.04 einrichten

Node.js ist eine JavaScript-Laufzeitumgebung, mit der Sie problemlos serverseitige Anwendungen erstellen. Mit dem **Prozessmanager PM2** können Sie eine Node.js-App einrichten, die als Service unter Ubuntu 24.04 ausgeführt wird.

## Die Ausführung von Node.js-Skripten als Service

Obwohl Skripte der [Open-Source](https://www.ionos.at/digitalguide/server/knowhow/was-ist-open-source/)-JavaScript-Laufzeitumgebung [Node.js](https://www.ionos.at/digitalguide/websites/web-entwicklung/einfuehrung-in-nodejs/) von der Befehlszeile aus über den Bildschirm ausgeführt werden können, bietet die Ausführung der Skripte als Service über den Prozessmanager PM2 den Skripten ein **robusteres** Verhalten. Wenn die Skripte auf diese Weise als Dienst ausgeführt werden, werden sie automatisch neu gestartet, wenn der Server neu gestartet wird oder das Skript abstürzt.

PM2 ist ein **Prozessmanager** für Node.js mit einer Vielzahl von Funktionen, mit denen Sie Ihre Node.js-Skripte steuern und verwalten können. Besuchen Sie die offizielle [PM2-Website](https://pm2.keymetrics.io/ "PM2 Website") für weitere Informationen zur Verwendung von PM2.

## Anforderungen

Bevor Sie mit den weiteren Schritten zur Installation von Node.js mit Apache und PM2 beginnen, stellen Sie sicher, dass die folgenden Anforderungen erfüllt sind:

- Ein **Server** unter Linux ([Ubuntu](https://www.ionos.at/digitalguide/server/knowhow/ubuntu-das-linux-system-fuer-jedermann/) 24.04).
- Ein funktionierender **Domainname**, der auf den Server zeigt.
- Ein funktions- und lauffähiger [Apache Webserver](https://www.ionos.at/digitalguide/server/konfiguration/apache-webserver-einrichten-so-wirds-gemacht/)

## Node.js installieren

Um Node.js zu installieren, benötigen Sie das Kommandozeilen-Tool `curl`. Aktualisieren Sie die Pakete Ihres Servers und installieren Sie `curl` mit den folgenden Befehlen:

```bash
sudo apt update
sudo apt install curl -y
```

Laden Sie das **persönliche Paketarchiv (PPA)** von Node.js herunter und fügen Sie das PPA zum Paket-Cache Ihres Servers hinzu. Das Archiv enthält eine aktuellere Node.js-Version als die Ubuntu-Repositories:

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

Installieren Sie anschließend Node.js:

```bash
sudo apt install -y nodejs
```

Dadurch wird auch `npm` automatisch installiert.

Schließlich installieren Sie das `build-essential`-Paket für npm. `build-essential` installiert wichtige Entwicklerwerkzeuge wie Compiler und Make, die benötigt werden, damit Node.js npm-Module mit nativen Erweiterungen **korrekt kompilieren und ausführen** kann.

```bash
sudo apt install -y build-essential
```

## Erstellen einer exemplarischen Node.js-Anwendung

Für dieses Beispiel werden wir zunächst ein **separates Verzeichnis** im Dokumentenstamm Ihrer Website erstellen, um Node.js-Anwendungen unterzubringen:

```bash
sudo mkdir /var/www/html/nodejs
```

Erstellen Sie die Datei *hello.js* in diesem Verzeichnis:

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

Fügen Sie dann folgenden Beispielinhalt in die Datei ein:

```javascript
#!/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/');
```

Speichern und beenden Sie die Datei und machen Sie sie mit folgendem Befehl **ausführbar**:

```bash
sudo chmod 755 hello.js
```

## Firewall prüfen

Ubuntu 24.04 aktiviert unter Umständen die **ufw-Firewall standardmäßig**. Damit Sie Ihre Node.js-Anwendung direkt testen können, müssen Sie sicherstellen, dass der Port 8080 offen ist:

```bash
sudo ufw allow 8080/tcp
```

Dieser Schritt ist insbesondere dann wichtig, wenn Sie Ihren Server direkt über die [IP-Adresse](https://www.ionos.at/digitalguide/server/knowhow/was-ist-eine-ip-adresse/) oder einen Browser außerhalb des Servers aufrufen möchten. Wird Node.js ausschließlich über Apache und den Proxy bereitgestellt, ist dieser Schritt optional, da der [Proxy](https://www.ionos.at/digitalguide/server/knowhow/was-ist-ein-proxy-server/) den Verkehr weiterleitet.

## PM2 installieren

Verwenden Sie `npm`, um PM2 mit dem folgenden Befehl zu installieren:

```bash
sudo npm install -g pm2
```

Starten Sie das eben erstellte Beispielskript `hello.js` mit dem Befehl:

```bash
sudo pm2 start hello.js
```

Als `root` **fügen Sie PM2 zu den Startup-Skripten hinzu**, sodass es beim Neustart des Servers automatisch neu gestartet wird, und speichern Sie die aktuell laufenden Prozesse:

```bash
sudo pm2 startup systemd
sudo pm2 save
```

## Apache konfigurieren

Um vom Web aus auf das Node.js-Skript zuzugreifen, installieren Sie die Apache-Module `proxy` und `proxy_http` mit den Befehlen:

```bash
sudo a2enmod proxy
sudo a2enmod proxy_http
```

Nach Abschluss der Installation starten Sie Apache neu, damit die Änderungen wirksam werden:

```bash
sudo systemctl restart apache2
```

Als Nächstes müssen Sie die **Apache-Proxy-Konfigurationen anpassen**. Folgende Anweisungen fügen Sie in den VirtualHost-Befehlsblock in der Hauptkonfigurationsdatei des Apache-Servers ein.

Diese Apache-Konfigurationsdatei finden Sie normalerweise im Dateipfad `/etc/apache2/sites-available/example.com.conf` auf Ubuntu.

Hinweis Der Speicherort und Dateiname der Apache-Konfigurationsdatei einer Website kann variieren.

Bearbeiten Sie diese Datei mit einem Editor Ihrer Wahl, z. B. mit dem Befehl:

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

Scrollen Sie durch die Datei, bis Sie den VirtualHost-Befehlsblock finden, der so aussehen wird:

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

Fügen Sie Folgendes zum VirtualHost-Befehlsblock hinzu:

```none
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 Verzeichnisbefehlsblöcken** platziert werden. Zum Beispiel:

```none
<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](https://www.ionos.at/digitalguide/server/konfiguration/apache-neustart/), damit die Änderungen wirksam werden:

```bash
sudo systemctl restart apache2
```

Nach dem Neustart von Apache können Sie die Anwendung testen, indem Sie sie in einem [Browser](https://www.ionos.at/digitalguide/websites/web-entwicklung/was-ist-ein-browser/) anzeigen. Sie sollten dort die folgende Nachricht aus der zuvor erstellten Testdatei sehen:

```none
Hello World! Node.js is working correctly.
```


This is a markdown version of: [https://www.ionos.at/digitalguide/websites/web-entwicklung/nodejs-fuer-eine-website-mit-apache-auf-ubuntu/](https://www.ionos.at/digitalguide/websites/web-entwicklung/nodejs-fuer-eine-website-mit-apache-auf-ubuntu/) for AI/LLM consumption.