Wie man Node.js unter Debian 10 installiert und Nginx als Frontend-Proxy-Server konfiguriert

Node.js ist eine freie und quelloffene JavaScript-Plattform, die zur Bereitstellung dynamischer und reaktionsschneller serverseitiger Inhalte verwendet werden kann. Sie basiert auf der V8-JavaScript-Engine von Chrome und ist in der Lage, JavaScript-Code außerhalb eines Webbrowsers auszuführen. Es kann auf verschiedenen Betriebssystemen ausgeführt werden, darunter Linux, FreeBSD, Windows und MacOS. Node.js funktioniert auch auf anderen Webservern wie Apache und Nginx.

In diesem Tutorial werden wir lernen, wie man Node.js installiert und konfiguriert, um Backend-Anfragen zu bearbeiten, und wie man Nginx konfiguriert, um Front-End-Anfragen unter Debian 10 zu bearbeiten.

Voraussetzungen

  • Ein Server, auf dem Debian 10 läuft.
  • Auf Ihrem Server ist ein Root-Passwort konfiguriert.

Erste Schritte

Zunächst wird empfohlen, Ihr System auf die neueste Version zu aktualisieren. Sie können dies mit dem folgenden Befehl tun:

apt-get update -y
 apt-get upgrade -y

Sobald Ihr Server aktualisiert ist, starten Sie ihn neu, um die Änderungen zu übernehmen.

Installieren Sie Node.js

Standardmäßig ist die neueste Version von Node.js nicht im Standard-Repository von Debian 10 verfügbar. Daher müssen Sie sie über das Skript installieren.

Installieren Sie zunächst curl mit folgendem Befehl:

apt-get install curl -y

Als nächstes laden Sie das Installationsskript Node.js mit folgendem Befehl herunter und installieren es:

curl -sL https://deb.nodesource.com/setup_12.x | bash -

Sobald die Installation abgeschlossen ist, können Sie die Node.js mit dem folgenden Befehl installieren:

apt-get install nodejs -y

Sobald die Installation erfolgreich abgeschlossen ist, können Sie die Version von Node.js mit dem folgenden Befehl überprüfen:

nodejs --version

In der folgenden Ausgabe sollten Sie die Version von Node.js sehen:

v12.16.1

Sie können die NPM-Version auch überprüfen, indem Sie den folgenden Befehl ausführen:

npm --version

Sie sollten die NPM-Version in der folgenden Ausgabe sehen:

6.13.4

Node.js-Anwendung erstellen

Zuerst müssen Sie ein Verzeichnis für Ihre Anwendung erstellen. Sie können es erstellen, indem Sie den folgenden Befehl ausführen:

mkdir nodeapp

Ändern Sie als nächstes das Verzeichnis in nodeapp und installieren Sie express mit dem folgenden Befehl:

cd nodeapp
 npm install express

Erstellen Sie als Nächstes eine Beispielanwendung von Node.js mit Express unter Verwendung des Nano-Editors:

nano app.js

Fügen Sie den folgenden Inhalt hinzu:

var express = require('express');
var app = express();
app.get('/', function(req, res){
   res.send("Nginx as Frontend Server for Node.js!");
});
app.listen(8000, '127.0.0.1');

Speichern und schließen Sie die Datei, wenn Sie fertig sind.

Starten Sie anschließend Ihre Anwendung mit dem folgenden Befehl:

node app.js

Öffnen Sie dann ein anderes Terminal und überprüfen Sie die Anwendung mit dem folgenden Befehl:

netstat -antup | grep 8000

Sie sollten sehen, dass Ihre Node.js-Anwendung auf Port 8000 lauscht:

tcp        0      0 127.0.0.1:8000          0.0.0.0:*               LISTEN      26193/node

Sie können die Anwendung auch mit dem Curl-Befehl überprüfen, wie unten dargestellt:

curl http://127.0.0.1:8000

Wenn alles in Ordnung ist, sollten Sie die folgende Ausgabe erhalten:

Nginx as Frontend Server for Node.js!

Installieren und Konfigurieren von PM2

PM2 ist ein Prozessmanager zur Verwaltung der Node.js-Anwendung. Sie können die Node.js-Anwendung mit dem PM2 einfach starten, stoppen und aktivieren, um sie beim Booten zu starten.

Installieren Sie zunächst die neueste Version von PM2 mit dem NPM wie unten gezeigt:

npm install pm2 -g

Ändern Sie nach der Installation das Verzeichnis auf nodeapp und Ihre Anwendung mit dem folgenden Befehl:

cd nodeapp
 pm2 start app.js

Nachdem die Anwendung gestartet wurde, sollten Sie folgende Ausgabe erhalten:

                        -------------

__/\\\\\\\\\\\\\____/\\\\____________/\\\\____/\\\\\\\\\_____
 _\/\\\/////////\\\_\/\\\\\\________/\\\\\\__/\\\///////\\\___
  _\/\\\_______\/\\\_\/\\\//\\\____/\\\//\\\_\///______\//\\\__
   _\/\\\\\\\\\\\\\/__\/\\\\///\\\/\\\/_\/\\\___________/\\\/___
    _\/\\\/////////____\/\\\__\///\\\/___\/\\\________/\\\//_____
     _\/\\\_____________\/\\\____\///_____\/\\\_____/\\\//________
      _\/\\\_____________\/\\\_____________\/\\\___/\\\/___________
       _\/\\\_____________\/\\\_____________\/\\\__/\\\\\\\\\\\\\\\_
        _\///______________\///______________\///__\///////////////__


                          Runtime Edition

        PM2 is a Production Process Manager for Node.js applications
                     with a built-in Load Balancer.

                Start and Daemonize any application:
                $ pm2 start app.js

                Load Balance 4 instances of api.js:
                $ pm2 start api.js -i 4

                Monitor in production:
                $ pm2 monitor

                Make pm2 auto-boot at server restart:
                $ pm2 startup

                To go further checkout:
                http://pm2.io/


                        -------------

[PM2] Spawning PM2 daemon with pm2_home=/root/.pm2
[PM2] PM2 Successfully daemonized
[PM2] Starting /root/nodeapp/app.js in fork_mode (1 instance)
[PM2] Done.
?????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????
? id  ? name   ? namespace   ? version ? mode    ? pid      ? uptime ? ?    ? status    ? cpu      ? mem      ? user     ? watching ?
?????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????
? 0   ? app    ? default     ? N/A     ? fork    ? 13202    ? 0s     ? 0    ? online    ? 0%       ? 27.2mb   ? root     ? disabled ?
?????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????

In der obigen Ausgabe sehen Sie sehr nützliche Informationen wie Anwendungs-PID, Betriebszeit, Status, CPU- und Speichernutzung.

Führen Sie als nächstes den folgenden Befehl aus, um ein Startskript für die Anwendung Node.js zu erstellen und zu konfigurieren, so dass Ihre Anwendung Node.js beim Booten automatisch gestartet wird.

pm2 startup

Sie sollten die folgende Ausgabe erhalten:

[PM2] Init System found: systemd
Platform systemd
Template
[Unit]
Description=PM2 process manager
Documentation=https://pm2.keymetrics.io/
After=network.target

[Service]
Type=forking
User=root
LimitNOFILE=infinity
LimitNPROC=infinity
LimitCORE=infinity
Environment=PATH=/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin:/bin:/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin
Environment=PM2_HOME=/root/.pm2
PIDFile=/root/.pm2/pm2.pid
Restart=on-failure

ExecStart=/usr/lib/node_modules/pm2/bin/pm2 resurrect
ExecReload=/usr/lib/node_modules/pm2/bin/pm2 reload all
ExecStop=/usr/lib/node_modules/pm2/bin/pm2 kill

[Install]
WantedBy=multi-user.target

Target path
/etc/systemd/system/pm2-root.service
Command list
[ 'systemctl enable pm2-root' ]
[PM2] Writing init configuration in /etc/systemd/system/pm2-root.service
[PM2] Making script booting at startup...
[PM2] [-] Executing: systemctl enable pm2-root...
Created symlink /etc/systemd/system/multi-user.target.wants/pm2-root.service ? /etc/systemd/system/pm2-root.service.
[PM2] [v] Command successfully executed.
+---------------------------------------+
[PM2] Freeze a process list on reboot via:
$ pm2 save

[PM2] Remove init script via:
$ pm2 unstartup systemd

Anschließend starten Sie den PM2-Dienst mit folgendem Befehl:

systemctl start pm2-root

Überprüfen Sie dann den Status des PM2-Dienstes mit dem folgenden Befehl:

systemctl status pm2-root

Sie sollten die folgende Ausgabe erhalten:

? pm2-root.service - PM2 process manager
   Loaded: loaded (/etc/systemd/system/pm2-root.service; enabled; vendor preset: enabled)
   Active: active (running) since Thu 2020-03-26 06:04:28 UTC; 2s ago
     Docs: https://pm2.keymetrics.io/
  Process: 13387 ExecStart=/usr/lib/node_modules/pm2/bin/pm2 resurrect (code=exited, status=0/SUCCESS)
 Main PID: 13191 (PM2 v4.2.3: God)
    Tasks: 0 (limit: 4915)
   CGroup: /system.slice/pm2-root.service
           ? 13191 PM2 v4.2.3: God Daemon (/root/.pm2)

Mar 26 06:04:28 kolab.linuxbuz.com pm2[13387]: [PM2] Restoring processes located in /root/.pm2/dump.pm2.bak
Mar 26 06:04:28 kolab.linuxbuz.com pm2[13387]: [PM2][ERROR] Failed to read dump file in /root/.pm2/dump.pm2.bak
Mar 26 06:04:28 kolab.linuxbuz.com pm2[13387]: [PM2][ERROR] No processes saved; DUMP file doesn't exist
Mar 26 06:04:28 kolab.linuxbuz.com pm2[13387]: ? PM2+ activated | Instance Name: node.myserver.tld-109e | Dash: https://app.pm2.io/#/r/7p66twg
Mar 26 06:04:28 kolab.linuxbuz.com pm2[13387]: ????????????????????????????????????????????????????????????????????????????????????????????????
Mar 26 06:04:28 kolab.linuxbuz.com pm2[13387]: ? id  ? name   ? namespace   ? version ? mode    ? pid      ? uptime ? ?    ? status    ? cpu   
Mar 26 06:04:28 kolab.linuxbuz.com pm2[13387]: ????????????????????????????????????????????????????????????????????????????????????????????????
Mar 26 06:04:28 kolab.linuxbuz.com pm2[13387]: ? 0   ? app    ? default     ? N/A     ? fork    ? 13202    ? 8m     ? 0    ? online    ? 0%    
Mar 26 06:04:28 kolab.linuxbuz.com pm2[13387]: ????????????????????????????????????????????????????????????????????????????????????????????????
Mar 26 06:04:28 kolab.linuxbuz.com systemd[1]: Started PM2 process manager.

Konfigurieren Sie Nginx als umgekehrten Proxy für Node.js

Zu diesem Zeitpunkt läuft und hört Ihre Node.js-Anwendung auf dem localhost. Als Nächstes müssen Sie Nginx als Front-End-Proxyserver für die Node.js-Anwendung konfigurieren, damit jeder Benutzer über das Internet auf Ihre Anwendung zugreifen kann.

Installieren Sie zunächst den Nginx-Webserver mit folgendem Befehl:

apt-get install nginx -y

Erstellen Sie nach der Installation eine Nginx-Konfigurationsdatei für den virtuellen Host für die Anwendung Node.js:

nano /etc/nginx/sites-enabled/myapp.conf

Fügen Sie den folgenden Inhalt hinzu:

server {
    listen 80;
    server_name node.myserver.tld;
    location / {
        proxy_pass http://127.0.0.1:8000;
        proxy_http_version 1.1;
        proxy_set_header Upgrade $http_upgrade;
        proxy_set_header Connection 'upgrade';
        proxy_set_header Host $host;
        proxy_cache_bypass $http_upgrade;
     }
}

Speichern und schließen Sie die Datei, wenn Sie fertig sind. Starten Sie dann den Nginx-Server neu, um die Änderungen zu übernehmen:

systemctl restart nginx

Sie können den Status des Nginx-Dienstes mit dem folgenden Befehl überprüfen:

systemctl status nginx

Sie sollten die folgende Ausgabe sehen:

? nginx.service - A high performance web server and a reverse proxy server
   Loaded: loaded (/lib/systemd/system/nginx.service; enabled; vendor preset: enabled)
   Active: active (running) since Tue 2020-03-25 12:42:49 UTC; 5min ago
     Docs: man:nginx(8)
  Process: 26180 ExecStartPre=/usr/sbin/nginx -t -q -g daemon on; master_process on; (code=exited, status=0/SUCCESS)
  Process: 26182 ExecStart=/usr/sbin/nginx -g daemon on; master_process on; (code=exited, status=0/SUCCESS)
 Main PID: 26183 (nginx)
    Tasks: 3 (limit: 2359)
   Memory: 5.5M
   CGroup: /system.slice/nginx.service
           ??26183 nginx: master process /usr/sbin/nginx -g daemon on; master_process on;
           ??26184 nginx: worker process
           ??26185 nginx: worker process

Mar 25 12:42:49 debian10 systemd[1]: Starting A high performance web server and a reverse proxy server...
Mar 25 12:42:49 debian10 systemd[1]: Started A high performance web server and a reverse proxy server.

Sobald Sie fertig sind, können Sie mit dem nächsten Schritt fortfahren.

Zugriff auf Ihre Node.js-Anwendung

Zu diesem Zeitpunkt ist Nginx so konfiguriert, dass es Ihre Node.js-Anwendung bedient.

Öffnen Sie nun Ihren Web-Browser und geben Sie die URL http://node.myserver.tld ein. Sie sollten Ihre Node.js-Anwendung auf dem folgenden Bildschirm sehen:

Node.js-Seite

Schlussfolgerung

In dem obigen Artikel haben Sie gelernt, wie Sie die Anwendung Node.js unter Debian 10 einrichten. Sie haben auch gelernt, wie man die Anwendung Node.js als Daemon ausführt und Nginx als Reverse-Proxy konfiguriert, um die Anwendung zu bedienen. Ich hoffe, dass Sie Ihre Node.js-Anwendung jetzt einfach in einer Produktionsumgebung hosten können.

Das könnte Dich auch interessieren …