Bereitstellung einer JavaScript-Anwendung auf einer VPS: Erweiterte Schritt-für-Schritt-Anleitung

Online Python-Trainer für Anfänger

Lernen Sie Python einfach ohne theoretische Überlastung. Lösen Sie praktische Aufgaben mit automatischer Überprüfung und schreiben Sie Code direkt im Browser.

Kurs starten

Einleitung: Vom lokalen Server zur produktionsreifen Lösung

Sie haben eine leistungsstarke JavaScript-Anwendung mit Node.js erstellt, lokal getestet, und jetzt ist es an der Zeit, sie der Welt zu zeigen. Einfach Dateien auf die VPS hochzuladen und node app.js auszuführen – das ist der Weg eines Anfängers. Auf fortgeschrittenem Niveau umfasst die Bereitstellung die Einrichtung eines Reverse-Proxys, eines Prozessmanagers, die automatische Verlängerung von SSL-Zertifikaten, ein System für kontinuierliche Integration und Bereitstellung (CI/CD) sowie ein ordentliches Monitoring und Logging.

In diesem Artikel werden wir den schrittweisen Prozess der Bereitstellung einer Node.js-Anwendung auf einer VPS (Ubuntu 22.04) auf fortgeschrittenem Niveau durchgehen. Wir richten Nginx als Reverse Proxy, PM2 zur Prozessverwaltung, Let's Encrypt für HTTPS, GitHub Actions für die automatische Bereitstellung bei einem Push ins Repository ein und fügen ein grundlegendes Monitoring hinzu.



Voraussetzungen

  • VPS-Server (Ubuntu 22.04) mit SSH-Zugang.
  • Eine Domain, die mit der IP Ihres Servers verbunden ist (z.B. myapp.example.com).
  • Installiertes Node.js (v18+) und npm auf dem Server.
  • Git, installiert auf dem Server.
  • Ein Repository Ihrer Anwendung auf GitHub.


1. Server- und PM2-Prozessmanager-Einrichtung

Beginnen wir mit der grundlegenden Vorbereitung der Umgebung. Nachdem Sie sich per SSH mit dem Server verbunden haben, aktualisieren wir die Pakete und installieren die notwendigen Werkzeuge:

sudo apt update && sudo apt upgrade -ysudo apt install nginx git curl -y

Stellen Sie sicher, dass Node.js installiert ist. Falls nicht – installieren Sie es über NodeSource:

curl -fsSL https://deb.nodesource.com/setup_18.x | sudo -E bash -sudo apt install -y nodejsnode -vnpm -v

Jetzt installieren wir global PM2 – einen fortschrittlichen Prozessmanager für Node.js, der die Anwendung bei einem Absturz automatisch neu startet, Logs verwaltet und Clustering ermöglicht:

sudo npm install -g pm2

Klonen Sie das Repository Ihrer Anwendung und installieren Sie die Abhängigkeiten:

git clone https://github.com/ihr-benutzername/ihr-repository.git /var/www/myappcd /var/www/myappnpm install --production

Erstellen Sie eine PM2-Ökosystemdatei (ecosystem.config.js) für die Feineinstellung:

// ecosystem.config.jsmodule.exports = {  apps: [{    name: 'myapp',    script: 'app.js', // oder server.js    instances: 'max', // alle CPU-Kerne nutzen    exec_mode: 'cluster',    env: {      NODE_ENV: 'production',      PORT: 3000    },    error_file: '/var/log/node-app/err.log',    out_file: '/var/log/node-app/out.log',    log_date_format: 'YYYY-MM-DD HH:mm Z'  }]};

Erstellen Sie ein Verzeichnis für die Logs und starten Sie die Anwendung über PM2:

sudo mkdir -p /var/log/node-appsudo chown -R $USER:$USER /var/log/node-apppm2 start ecosystem.config.jspm2 savepm2 startup systemd

Der Befehl pm2 startup erstellt einen systemd-Dienst, der PM2 beim Systemstart ausführt. Ihre Anwendung läuft nun auf Port 3000, aber der direkte Zugriff darauf ist unsicher. Fahren wir mit der Nginx-Einrichtung fort.



2. Einrichtung von Nginx als Reverse Proxy und SSL über Let's Encrypt

Nginx wird eingehende Anfragen auf den Ports 80 (HTTP) und 443 (HTTPS) entgegennehmen, sie an Ihren Node.js-Prozess auf Port 3000 weiterleiten und statische Dateien direkt ausliefern – das entlastet Node.js.

Erstellen Sie eine Konfigurationsdatei für Ihre Domain:

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

Fügen Sie die folgende Konfiguration ein (ersetzen Sie myapp.example.com durch Ihre Domain):

server {    listen 80;    server_name myapp.example.com;    return 301 https://$server_name$request_uri; # Weiterleitung auf HTTPS}

server { listen 443 ssl http2; server_name myapp.example.com;

# SSL ser

Blogs

Buchempfehlungen