Zum Hauptinhalt springen
Zurück zur Kategorie

Node.js App deployen: PM2 und Nginx Anleitung

Vollständige Anleitung zum Deployen von Node.js-Anwendungen auf einem VPS. Node.js-Installation mit nvm, PM2 Process Manager, Nginx Reverse Proxy, SSL-Zertifikat und Umgebungsvariablen.

Lesezeit: 15 min Web Hosting / Anwendungen
nodejspm2nginxdeployvpsjavascriptreverse proxyssl
Autor
REXE Teknoloji Network & Security Team
Redaktion
REXE Teknoloji Technical Editorial
Erstveröffentlichung
Letzte Aktualisierung

Node.js-Anwendung deployen: PM2 und Nginx Anleitung

Das Deployen von Node.js-Anwendungen in einer Produktionsumgebung ist mit den richtigen Tools und der richtigen Konfiguration ein systematischer Prozess. Diese Anleitung behandelt alles von der Node.js-Installation mit nvm über den PM2 Process Manager bis hin zur Nginx Reverse Proxy-Konfiguration und SSL-Zertifikat-Einrichtung.

Node.js Installation (mit nvm)

nvm (Node Version Manager) ermöglicht die Verwaltung mehrerer Node.js-Versionen und wird für Produktionsumgebungen empfohlen.

hljs bash
# nvm-Installationsskript herunterladen und ausführen
curl -o- https://raw.githubusercontent.com/nvm-sh/nvm/v0.39.7/install.sh | bash

# Shell neu laden
source ~/.bashrc

# nvm-Version prüfen
nvm --version

# Neueste LTS-Version installieren
nvm install --lts

# Bestimmte Version installieren
nvm install 20.11.0

# Standardversion festlegen
nvm use --lts
nvm alias default node

# Node.js und npm Versionen prüfen
node --version
npm --version

Verwenden Sie in der Produktion immer die LTS-Version (Long Term Support). LTS-Versionen erhalten länger Sicherheitsupdates.

Anwendung auf den Server übertragen

Mit Git klonen

hljs bash
# Anwendungsverzeichnis erstellen
sudo mkdir -p /var/www/myapp
sudo chown $USER:$USER /var/www/myapp

# Repository klonen
cd /var/www
git clone https://github.com/benutzer/myapp.git
cd myapp

# Abhängigkeiten installieren (Produktion)
npm install --production

Umgebungsvariablen (.env)

hljs bash
# .env-Datei erstellen
nano /var/www/myapp/.env
hljs env
NODE_ENV=production
PORT=3000
DATABASE_URL=postgresql://user:password@localhost:5432/mydb
JWT_SECRET=ihr-geheimer-schluessel
REDIS_URL=redis://localhost:6379
hljs bash
# .env-Datei absichern
chmod 600 /var/www/myapp/.env

Fügen Sie die .env-Datei niemals zu Ihrem Git-Repository hinzu. Fügen Sie .env zu Ihrer .gitignore-Datei hinzu.

PM2 Process Manager

PM2 ist das beliebteste Tool zur Verwaltung von Node.js-Anwendungen in der Produktion. Es bietet automatische Neustarts, Log-Verwaltung und Cluster-Modus.

PM2 installieren

hljs bash
# PM2 global installieren
npm install -g pm2

# PM2-Version prüfen
pm2 --version

Anwendung mit PM2 starten

hljs bash
# Einfacher Start
pm2 start app.js --name myapp

# Mit npm start
pm2 start npm --name myapp -- start

# Cluster-Modus (Instanzen gleich CPU-Kerne)
pm2 start app.js --name myapp -i max

PM2 Ecosystem-Datei

hljs javascript
module.exports = {
  apps: [
    {
      name: 'myapp',
      script: './app.js',
      instances: 'max',
      exec_mode: 'cluster',
      env_production: {
        NODE_ENV: 'production',
        PORT: 3000
      },
      error_file: '/var/log/pm2/myapp-error.log',
      out_file: '/var/log/pm2/myapp-out.log',
      max_memory_restart: '500M',
      autorestart: true
    }
  ]
};
hljs bash
# Mit Ecosystem-Datei starten
pm2 start ecosystem.config.js --env production

# PM2 Grundbefehle
pm2 list              # Laufende Apps auflisten
pm2 logs myapp        # Logs anzeigen
pm2 restart myapp     # Neu starten
pm2 reload myapp      # Zero-Downtime-Reload
pm2 stop myapp        # Stoppen
pm2 monit             # Echtzeit-Überwachung

PM2 Autostart beim Systemstart

hljs bash
# Startup-Skript generieren
pm2 startup

# Ausgegebenen Befehl ausführen
# Aktuelle PM2-Liste speichern
pm2 save

Nginx Reverse Proxy Konfiguration

hljs bash
# Nginx installieren
sudo apt update
sudo apt install nginx -y

# Konfigurationsdatei erstellen
sudo nano /etc/nginx/sites-available/myapp
hljs nginx
server {
    listen 80;
    server_name example.com www.example.com;

    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_set_header X-Real-IP $remote_addr;
        proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
        proxy_set_header X-Forwarded-Proto $scheme;
        proxy_cache_bypass $http_upgrade;
    }
}
hljs bash
# Site aktivieren
sudo ln -s /etc/nginx/sites-available/myapp /etc/nginx/sites-enabled/
sudo nginx -t
sudo systemctl reload nginx

SSL-Zertifikat (Let's Encrypt)

hljs bash
# Certbot installieren
sudo apt install certbot python3-certbot-nginx -y

# SSL-Zertifikat erhalten
sudo certbot --nginx -d example.com -d www.example.com

# Automatische Erneuerung testen
sudo certbot renew --dry-run

Deployment-Workflow

hljs bash
# Neuen Code holen
cd /var/www/myapp
git pull origin main

# Abhängigkeiten aktualisieren
npm install --production

# Zero-Downtime-Neustart mit PM2
pm2 reload myapp

# Logs prüfen
pm2 logs myapp --lines 50

Auf REXE-Servern können Sie Port 3000 über das Path Panel schließen. Da Nginx den Traffic von Port 80/443 weiterleitet, ist kein externer Zugriff auf den Node.js-Port erforderlich.

Fazit

Ihre Node.js-Anwendung läuft jetzt in einer Produktionsumgebung, die von PM2 verwaltet wird, hinter einem Nginx Reverse Proxy und mit SSL gesichert. Mit dem Cluster-Modus von PM2 können Sie CPU-Kerne voll ausnutzen und mit pm2 reload Zero-Downtime-Updates durchführen.

Häufig gestellte Fragen

Warum stürzt meine Node.js-App mit PM2 ab?

Überprüfen Sie die PM2-Logs mit 'pm2 logs myapp'. Häufige Ursachen: fehlende Umgebungsvariablen, Port-Konflikt oder Syntaxfehler. Überwachen Sie CPU/RAM-Nutzung in Echtzeit mit 'pm2 monit'. Bei einem Speicherleck fügen Sie den Parameter 'max_memory_restart' zur ecosystem.config.js hinzu.

Ich erhalte einen 502 Bad Gateway-Fehler von Nginx, was soll ich tun?

Dieser Fehler bedeutet normalerweise, dass die Node.js-Anwendung nicht läuft. Prüfen Sie mit 'pm2 status', ob die App im Status 'running' ist. Überprüfen Sie Fehlermeldungen mit 'pm2 logs'. Verifizieren Sie mit 'sudo nginx -t', dass Nginx zum richtigen Port proxyt.

Wie betreibe ich mehrere Node.js-Apps auf demselben Server?

Jede Anwendung muss einen anderen Port verwenden (3000, 3001, 3002 usw.). Geben Sie jedem in PM2 einen eindeutigen Namen. Erstellen Sie in Nginx für jede Domain einen separaten Server-Block und proxyen Sie zum entsprechenden Port. Alle Apps sind über Port 80/443 durch Nginx erreichbar.

Beeinflusst das Aktualisieren der Node.js-Version meine Anwendung?

Seien Sie beim Wechseln von Versionen mit nvm vorsichtig. Installieren Sie die neue Version, testen Sie Ihre Anwendung, dann aktualisieren Sie den Standard mit 'nvm alias default'. Möglicherweise müssen Sie auch das PM2-Startup-Skript mit dem neuen Node.js-Pfad neu generieren.

Verwandte Artikel

PHP-App deployen: LAMP und LEMP Stack Anleitung

Vollständige Anleitung zum Deployen von PHP-Anwendungen auf einem VPS. LAMP vs LEMP Vergleich, Apache/Nginx + PHP-FPM + MySQL Setup, Virtual Host Konfiguration und PHP-Versionsverwaltung.

18 min
phplamplemp

WordPress Installation und Optimierung: VPS Anleitung

Anleitung zur Installation und Optimierung von WordPress auf einem VPS. LEMP Stack Setup, wp-config.php Einstellungen, Dateiberechtigungen, SSL, OPcache Performance-Optimierung und Sicherheitshärtung.

20 min
wordpressvpslemp

Python/Django Deploy: Produktion mit Gunicorn und Nginx

Anleitung zum Deployen von Python/Django-Anwendungen auf einem VPS. Virtualenv-Setup, Django-Produktionseinstellungen, Gunicorn WSGI-Server, Nginx Reverse Proxy, systemd-Dienst und statische Dateiverwaltung.

18 min
pythondjangogunicorn
NetzwerkverkehrEingehend GbpsAusgehend Gbps