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:
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.