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

Inhaltsverzeichnis

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.