Wie man eine NestJS-Anwendung mit Nginx auf einem Ubuntu-VPS bereitstellt

0 Aktien
0
0
0
0

Einführung

Moderne Webanwendungen benötigen eine solide und sichere Infrastruktur. Daher ist es unerlässlich, skalierbare, sichere und architektonisch komplexe Anwendungen zu entwickeln, die von kleinen und/oder großen Entwicklerteams verwaltet werden können.

Moderne Entwickler bevorzugen JavaScript sowohl im Frontend als auch im Backend. Express.js ist ein weit verbreitetes und beliebtes JavaScript-Framework. Aufgrund seiner minimalistischen Architektur ist es jedoch für große Teams hinsichtlich Skalierbarkeit und Wartung weniger geeignet. Hier setzt Nest.js an. Nest.js verfügt über eine integrierte Architektur, die es ideal für Skalierbarkeit und Deployment macht. Die native Unterstützung für TypeScript macht es zudem für Entwickler attraktiver als reines JavaScript.

In diesem Tutorial lernen Sie, wie Sie eine NestJS-Anwendung mithilfe des Nginx-Webservers auf einem VPS bereitstellen. Sie erfahren, wie Sie Ihre Anwendung sicher im Web veröffentlichen.

Voraussetzungen
  • Ein Ubuntu 20.04+ VPS oder eine physische Ubuntu-Maschine
  • Node.js und der npm- (oder yarn-) Paketmanager.
  • Nginx-Webserver

Schritt 1 – Vorbereiten und Bereitstellen einer NestJS-Anwendung

In diesem Abschnitt installieren Sie die NestJS CLI und erstellen eine einfache NestJS-Anwendung, deren Bereitstellung mit Nginx Sie in den folgenden Abschnitten erlernen werden.

Installieren Sie die NestJS CLI global.

Um die NestJS CLI auf Ihrem Ubuntu-Rechner zu installieren, öffnen Sie ein Terminal und geben Sie den folgenden Befehl ein.

npm i -g @nestjs/cli

Dadurch wird die NestJS-Befehlszeilenschnittstelle auf Ihrem Rechner installiert. Anschließend erfahren Sie, wie Sie ein neues NestJS-Projekt erstellen.

Erstellen Sie ein neues NestJS-Projekt

NestJS bietet nun zwei Möglichkeiten, ein neues Projekt zu starten. Sie können die für Sie beste Methode auswählen.

Um ein NestJS-Projekt mit der CLI zu erstellen, geben Sie folgenden Befehl ein.

nest new <project-name>
Output? Which package manager would you ❤️ to use? (Use arrow keys)
❯ npm 
yarn 
pnpm

Nach Abschluss des Vorgangs erhalten Sie eine Ausgabe wie die folgende.

OutputCREATE node_app/.eslintrc.js (663 bytes)
CREATE node_app/.prettierrc (51 bytes)
CREATE node_app/README.md (3340 bytes)
CREATE node_app/nest-cli.json (171 bytes)
CREATE node_app/package.json (1947 bytes)
CREATE node_app/tsconfig.build.json (97 bytes)
CREATE node_app/tsconfig.json (546 bytes)
CREATE node_app/src/app.controller.ts (274 bytes)
CREATE node_app/src/app.module.ts (249 bytes)
CREATE node_app/src/app.service.ts (142 bytes)
CREATE node_app/src/main.ts (208 bytes)
CREATE node_app/src/app.controller.spec.ts (617 bytes)
CREATE node_app/test/jest-e2e.json (183 bytes)
CREATE node_app/test/app.e2e-spec.ts (630 bytes)

Dadurch wird ein neues Projekt im aktuellen Arbeitsverzeichnis erstellt. Alternativ können Sie Folgendes verwenden: ; Geben Sie bitte auch den absoluten Pfad zu einem anderen Verzeichnis an.

Starter-Vorlagensimulation

NestJS bietet eine alternative Möglichkeit, ein neues Projekt zu starten. Es handelt sich um ein Git-Repository, das als Vorlage dient. Sie können dieses Repository klonen und das Projekt mit den folgenden Befehlen starten.

git clone https://github.com/nestjs/typescript-starter.git <project-directory >

Nach Abschluss des Klonvorgangs müssen Sie in das Projektverzeichnis wechseln und anschließend npm install ausführen, um die Abhängigkeiten aus package.json zu installieren.

cd <project-directory>
npm install

Sobald das Projekt fertig ist, können Sie den Anwendungsserver mit folgendem Befehl starten:

npm run start

Dadurch wird die Anwendung unter http://localhost:3000 ausgeführt. Jetzt haben Sie eine einfache NestJS-Anwendung, die Sie auf localhost ausführen können.

Anwendungstests

Sobald Ihre Anwendung entwickelt ist, können Sie Tests ausführen, um zu überprüfen, ob sie wie erwartet funktioniert. NestJS bietet standardmäßig Jest-Tests, die Ihre Anwendung testen. Sie können die Tests mit folgendem Befehl starten:

npm run test

Dieses Programm wird Sie testen und Ergebnisse ähnlich den folgenden anzeigen:

Output> [email protected] test
> jest
PASS src/app.controller.spec.ts
AppController
root
✓ should return "Hello World!" (24 ms)
Test Suites: 1 passed, 1 total
Tests: 1 passed, 1 total
Snapshots: 0 total
Time: 2.895 s
Ran all test suites.

Im folgenden Abschnitt erfahren Sie, wie Sie diese NestJS-Anwendung mithilfe von Nginx als Reverse-Proxy auf Ihrem Webserver bereitstellen.

Schritt 2 – Konfigurieren Sie Nginx für die Bereitstellung der NestJS-Anwendung

Nun können wir einen Webserver für diese NestJS-Anwendung einrichten. Wir verwenden hierfür einen Reverse-Proxy. Dabei läuft unsere Anwendung lokal auf einem bestimmten Port. Der Nginx-Server leitet alle Anfragen an die öffentliche IP-Adresse oder Domain des VPS an die Anwendung auf dem lokalen Rechner weiter. Der Einsatz von Reverse-Proxys ist branchenüblich, da er die Sicherheit des Webservers erhöht, indem er eine Barriere zwischen eingehenden Anfragen und der Backend-Anwendung schafft. Außerdem ermöglicht er ein besseres Lastmanagement auf dem Server, insbesondere wenn dieser mehrere Webanwendungen hostet.

Wir installieren den Paketmanager. pm2 Wir beginnen mit demjenigen, der das Programm zur Laufzeit verwaltet.

Installieren Sie pm2 Process Manager

Sie können den folgenden Befehl verwenden, um den Prozessmanager zu öffnen. pm2 Installieren.

npm install -g pm2

Mit dieser Arbeit pm2 Es ist global auf Ihrem Gerät installiert.

Erstellung einer Nginx-Konfiguration für eine NestJS-Anwendung

Konfigurieren Sie nun Nginx für die Ausführung der Anwendung. Wie im Tutorial zu den Voraussetzungen erwähnt, stellen Sie sicher, dass Sie die Nginx-Anwendung in Ihrer Firewall für HTTP und HTTPS zugelassen haben. Wenn Sie die ufw-Firewall verwenden, folgen Sie dazu den Anweisungen.

ufw enable
ufw allow ‘Nginx Full‘

Nun erstellen Sie einen Konfigurationsblock für Ihre NestJS-Anwendung. Es empfiehlt sich, für neue Anwendungen jeweils einen neuen Konfigurationsblock zu erstellen, anstatt die Standardeinstellungen zu bearbeiten. Geben Sie dazu den folgenden Code in Ihr Terminal ein.

sudo nano /etc/nginx/sites-available/your_domain

Hier haben wir „your_domain“ für die Anwendung verwendet, Sie müssen dies jedoch in den Namen Ihrer Anwendung ändern. Geben Sie anschließend im Editor folgenden Code ein:

server {
server_name your_domain www.your_domain;
location / {
proxy_pass http://localhost:3000;
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;
}
}

Nun erstellen Sie einen symbolischen Link, der Nginx anweist, im Ordner sites-available nach verfügbaren Webanwendungen zu suchen:

sudo ln -s /etc/nginx/sites-available/your_domain /etc/nginx/sites-enabled/

Außerdem müssen Sie den Standardlink deaktivieren, da nginx sonst alle Anfragen an die Standardseite weiterleitet. Verwenden Sie dazu folgenden Befehl.

sudo unlink /etc/nginx/sites-enabled/default

Starten Sie nun den Nginx-Dienst mit folgendem Befehl neu.

sudo systemctl restart nginx
Bereitstellung einer NestJS-Anwendung mit Nginx

Starten Sie nun den Paketmanager pm2, um die Ausführung Ihrer NestJS-Anwendung zu verwalten. Wechseln Sie in das Verzeichnis Ihrer NestJS-Anwendung und geben Sie den folgenden Befehl ein.

pm2 start npm --name "your_domain" – start

Sie können den folgenden Befehl ausführen, um pm2 so zu konfigurieren, dass es beim Neustart des Servers ausgeführt wird.

pm2 startup

Sobald Sie die Einrichtung des Programms in pm2 abgeschlossen haben, speichern Sie die pm2-Prozessliste wie folgt:

pm2 save

Wir haben nun die Webanwendung so eingestellt, dass sie beim Systemstart ausgeführt wird, und Nginx so konfiguriert, dass es als Reverse-Proxy für unsere auf localhost laufende Anwendung dient.

Webanwendungstests

Sie können die Webanwendung über Ihre Konsole testen, indem Sie den folgenden Befehl eingeben.

curl http://localhost

Da wir den Reverse-Proxy auf die IP-Adresse des Servers selbst eingestellt haben, werden alle Anfragen an die öffentliche IP-Adresse des Servers, die Domain oder localhost vom Server an die Anwendung weitergeleitet. NestJS Ihre_Domäne Es wird geführt.

OutputHello World!

Im nächsten Abschnitt erfahren Sie, wie Sie SSL zu Ihrer Anwendung hinzufügen, wodurch Sie das HTTPS-Protokoll für Ihre Anfragen verwenden können.

Schritt 3 – SSL mit Let's Encrypt hinzufügen (optional)

Bisher haben Sie gelernt, wie Sie eine voll funktionsfähige NestJS-Anwendung mit dem Nginx-Server bereitstellen. Diese Bereitstellung verwendet jedoch das HTTP-Protokoll, das aufgrund von Sicherheitslücken für den Produktiveinsatz nicht empfohlen wird. Daher möchten Sie auf das HTTPS-Protokoll umsteigen, eine verschlüsselte Version von HTTP. HTTPS verwendet SSL/TLS-Zertifikate, die von einer Zertifizierungsstelle ausgestellt werden. Diese Zertifikate sind webseitenspezifisch und verschlüsseln die Kommunikation zwischen Client und Server.

Installieren Sie die Let's Encrypt Certbot CLI.

Let's Encrypt bietet eine Befehlszeilenschnittstelle (CLI) zur Verwaltung und Automatisierung von SSL-Zertifikaten für Endnutzer. Sie können das Tool mit folgendem Befehl installieren:

sudo apt install certbot python3-certbot-nginx

Dadurch wird der certbot-Client auf Ihrem Ubuntu VPS installiert.

SSL/TLS-Zertifikate für Ihre Domain abrufen

Sie können nun SSL-Zertifikate für Ihre Domain mit folgendem Befehl erhalten:

sudo certbot --nginx -d <your_domain> -d <www.your_domain>

Du musst Ihre_Domäne Ersetzen Sie „certbot“ durch Ihre tatsächliche Domain. Wenn Sie certbot zum ersten Mal auf Ihrem VPS ausführen, werden Sie aufgefordert, Ihre E-Mail-Adresse einzugeben und den Nutzungsbedingungen zuzustimmen. Geben Sie die erforderlichen Informationen ein und fahren Sie fort.

Sobald die Zertifikate installiert sind, können Sie alle Anfragen auf HTTPS umleiten. Es wird empfohlen, alle Anfragen umzuleiten, um die Integrität Ihrer Website zu gewährleisten.

Ergebnis

In diesem Tutorial haben Sie gelernt, wie Sie eine NestJS-Anwendung mit dem Nginx-Webserver auf einem Ubuntu-VPS im Produktivbetrieb bereitstellen. Außerdem haben Sie gelernt, wie Sie ein NestJS-Projekt und einen Reverse-Proxy für Ihre Anwendung mit Nginx einrichten. Abschließend haben Sie gelernt, wie Sie SSL/TLS-Zertifikate für Ihre Serverdomain hinzufügen und die Integrität der Kommunikation zwischen Ihren Clients und Ihrem Server sicherstellen.

Schreibe einen Kommentar

Deine E-Mail-Adresse wird nicht veröffentlicht. Erforderliche Felder sind mit * markiert

Das könnte Ihnen auch gefallen

VPN-Auto-Disconnect-Software

Was ist eine VPN-Auto-Disconnect-Software? Eine VPN-Auto-Disconnect-Software ist eine fortschrittliche Sicherheitsmaßnahme, die…