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.
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.
# 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
# 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)
# .env-Datei erstellen
nano /var/www/myapp/.env
NODE_ENV=production
PORT=3000
DATABASE_URL=postgresql://user:password@localhost:5432/mydb
JWT_SECRET=ihr-geheimer-schluessel
REDIS_URL=redis://localhost:6379
# .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
# PM2 global installieren
npm install -g pm2
# PM2-Version prüfen
pm2 --version
Anwendung mit PM2 starten
# 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
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
}
]
};
# 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
# Startup-Skript generieren
pm2 startup
# Ausgegebenen Befehl ausführen
# Aktuelle PM2-Liste speichern
pm2 save
Nginx Reverse Proxy Konfiguration
# Nginx installieren
sudo apt update
sudo apt install nginx -y
# Konfigurationsdatei erstellen
sudo nano /etc/nginx/sites-available/myapp
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;
}
}
# 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)
# 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
# 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.
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.
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.
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.