Wie man Node.js und PM2 auf Ubuntu installiert: Ein vollständiger Produktionsleitfaden
Node.js ist eine asynchrone, ereignisgesteuerte JavaScript-Laufzeitumgebung, die auf Chromes V8-Engine aufbaut und dafür entwickelt wurde, JavaScript-Code serverseitig mit hohem Durchsatz auszuführen. PM2 ist ein produktionsreifer Prozessmanager für Node.js-Anwendungen, der Daemonisierung, automatische Absturzwiederherstellung, Log-Aggregation, Cluster-Modus-Lastverteilung und Startskript-Generierung bietet – alles über eine einzige CLI-Schnittstelle.
Dieser Leitfaden behandelt jede Installationsmethode, Konfigurationsoption und jedes Betriebsmuster, das Sie benötigen, um Node.js-Anwendungen zuverlässig auf Ubuntu 20.04, 22.04 oder 24.04 LTS in einer Produktionsumgebung zu betreiben.
Voraussetzungen
Bestätigen Sie vor dem Fortfahren Folgendes:
- Betriebssystem: Ubuntu 20.04, 22.04 oder 24.04 LTS (Server oder Desktop)
- Benutzerrechte: `sudo` oder Root-Zugriff
- Netzwerkzugang: Ausgehende HTTPS-Verbindung zum Herunterladen von Paketen und Skripten
- curl installiert: Führen Sie `sudo apt install curl -y` aus, falls noch nicht vorhanden
Wenn Sie dies auf einem Cloud-Server ausführen, ist eine VPS Hosting-Umgebung das häufigste Deployment-Ziel für Node.js-Workloads, und alles in diesem Leitfaden gilt direkt dafür.
Schritt 1: Systempakete aktualisieren
Synchronisieren Sie stets Ihren Paketindex und wenden Sie ausstehende Upgrades an, bevor Sie neue Software installieren. Veraltete Paketmetadaten sind eine häufige Quelle von Abhängigkeitskonflikten.
“`bash
sudo apt update
sudo apt upgrade -y
“`
Starten Sie nach Abschluss des Upgrades neu, wenn der Kernel aktualisiert wurde:
“`bash
sudo reboot
“`
Schritt 2: Node.js installieren – Die richtige Methode wählen
Es gibt drei primäre Installationsmethoden für Node.js unter Ubuntu. Jede hat unterschiedliche Kompromisse hinsichtlich Versionskontrolle, Isolation und systemweiter Verfügbarkeit.
Methodenvergleich
| Funktion | NodeSource (apt) | NVM | System apt (universe) |
|---|
| — | — | — | — |
|---|
| Versionskontrolle | Einzelne fixierte Hauptversion | Mehrere Versionen pro Benutzer | Typischerweise veraltetes LTS |
|---|
| Systemweite Installation | Ja | Nein (standardmäßig pro Benutzer) | Ja |
|---|
| Versionswechsel | Erfordert erneutes Ausführen des Setup-Skripts | `nvm use <version>` | Nicht unterstützt |
|---|
| Am besten geeignet für | CI/CD, Single-Version-Server | Entwicklung, Multi-Projekt | Nur zum schnellen Testen |
|---|
| sudo für npm-Globals erforderlich | Ja | Nein | Ja |
|---|
| Produktionseignung | Hoch | Mittel | Niedrig |
|---|
Methode 1: Node.js über NodeSource installieren (Empfohlen für Server)
NodeSource pflegt aktuelle Debian/Ubuntu-Repositories für jede aktive Node.js-Release-Linie. Dies ist der bevorzugte Ansatz für Produktionsserver, auf denen eine einzelne, stabile Version systemweit erforderlich ist.
Das NodeSource-Repository für das aktuelle LTS-Release hinzufügen:
“`bash
curl -fsSL https://deb.nodesource.com/setup_lts.x | sudo -E bash –
“`
Dieses Skript führt mehrere Aktionen aus: Es erkennt Ihre Ubuntu-Version, fügt das entsprechende NodeSource-apt-Repository hinzu, importiert den GPG-Signaturschlüssel und führt `apt-get update` aus. Das Flag `-E` bewahrt Ihre Umgebungsvariablen beim Eskalieren zu sudo, was wichtig ist, wenn Sie Proxy-Einstellungen konfiguriert haben.
Node.js und npm installieren:
“`bash
sudo apt install nodejs -y
“`
Das NodeSource-Paket bündelt sowohl `node` als auch `npm` in einem einzigen `nodejs`-Paket. Im Gegensatz zum Ubuntu-Universe-Paket werden sie nicht getrennt.
Die Installation überprüfen:
“`bash
node -v
npm -v
“`
Beispiel einer erwarteten Ausgabe:
“`
v20.14.0
10.7.0
“`
Auf eine bestimmte Hauptversion fixieren: Wenn Sie Node.js 18 anstelle des aktuellen LTS benötigen, ersetzen Sie `setup_lts.x` durch `setup_18.x` im curl-Befehl. Verfügbare Streams umfassen `setup_18.x`, `setup_20.x` und `setup_22.x`.
Methode 2: Node.js über NVM installieren (Empfohlen für Entwicklung und Multi-Version-Umgebungen)
NVM (Node Version Manager) installiert Node.js in Ihr Home-Verzeichnis und erfordert keine Root-Rechte weder für Node.js selbst noch für global installierte npm-Pakete. Dies beseitigt die Berechtigungsprobleme, die häufig auftreten, wenn `npm install -g` auf systemseitig installiertem Node.js ausgeführt wird.
NVM installieren:
“`bash
curl -o- https://raw.githubusercontent.com/nvm-sh/nvm/v0.39.7/install.sh | bash
“`
Überprüfen Sie das offizielle NVM-Repository auf das neueste Release-Tag, bevor Sie diesen Befehl ausführen – die Versionsnummer in der URL ändert sich mit jedem Release.
Ihre Shell-Umgebung neu laden:
“`bash
source ~/.bashrc
“`
Wenn Sie Zsh verwenden, sourcen Sie stattdessen `~/.zshrc`. Das NVM-Installationsprogramm fügt seinen Initialisierungsblock an die Shell-Konfigurationsdatei an, die es erkennt.
Die neueste LTS-Version von Node.js installieren:
“`bash
nvm install –lts
“`
Eine bestimmte Version neben dem LTS installieren:
“`bash
nvm install 18
nvm install 20
“`
Zwischen installierten Versionen wechseln:
“`bash
nvm use 20
nvm alias default 20
“`
Der Befehl `alias default` legt die Version fest, die in neuen Shell-Sitzungen aktiviert wird, was für Skripte und Cron-Jobs entscheidend ist, die Ihr interaktives Shell-Profil nicht sourcen.
Überprüfen:
“`bash
node -v
npm -v
“`
Kritische NVM-Fallstricke für die Produktion: Da NVM benutzerbezogen ist, haben PM2-Startskripte und systemd-Units keinen Zugriff auf das NVM-verwaltete Node.js-Binary, es sei denn, Sie konfigurieren den Pfad explizit. Wie Sie damit korrekt umgehen, erfahren Sie in Schritt 5.
Schritt 3: PM2 installieren
PM2 wird als npm-Paket vertrieben und sollte global installiert werden, damit seine CLI systemweit verfügbar ist.
PM2 installieren:
“`bash
sudo npm install -g pm2
“`
Wenn Sie Node.js über NVM installiert haben, lassen Sie `sudo` weg:
“`bash
npm install -g pm2
“`
Die Installation überprüfen:
“`bash
pm2 -v
“`
Eine bestimmte PM2-Version installieren (nützlich beim Fixieren der Infrastruktur):
“`bash
sudo npm install -g pm2@5.3.1
“`
PM2 Version 5.x ist die aktuelle stabile Linie. Sie brachte im Vergleich zu v4 erhebliche Verbesserungen am Web-Dashboard (pm2 plus), der Log-Rotation und dem Modulsystem.
Schritt 4: Node.js-Anwendungen mit PM2 verwalten
Eine Anwendung starten
Navigieren Sie zu Ihrem Anwendungsverzeichnis und starten Sie es:
“`bash
cd /var/www/my-app
pm2 start app.js –name "my-app"
“`
Weisen Sie immer ein `–name`-Flag zu. Ohne es verwendet PM2 den Dateinamen als Prozessname, was mehrdeutig wird, wenn Sie mehrere Dienste haben.
Mit zusätzlichen Optionen starten:
“`bash
pm2 start app.js –name "my-app" –watch –max-memory-restart 300M
“`
- `–watch`: Startet den Prozess neu, wenn sich Quelldateien ändern (nützlich in Staging, nicht empfohlen in der Produktion)
- `–max-memory-restart 300M`: Startet den Prozess automatisch neu, wenn er 300 MB RSS-Speicher überschreitet – eine kritische Schutzmaßnahme gegen Speicherlecks
Laufende Prozesse anzeigen
“`bash
pm2 list
“`
Dies gibt eine Tabelle aus, die Prozess-ID, Name, Modus (Fork/Cluster), PID, Status, CPU-Auslastung, Speicherverbrauch und Neustart-Anzahl zeigt.
Für ein Echtzeit-Dashboard:
“`bash
pm2 monit
“`
Prozesse steuern
“`bash
pm2 restart my-app # Graceful restart
pm2 reload my-app # Zero-downtime reload (cluster mode only)
pm2 stop my-app # Stop without removing from process list
pm2 delete my-app # Stop and remove from process list
“`
Der Unterschied zwischen `restart` und `reload`: `restart` beendet den Prozess und startet einen neuen, was zu einer kurzen Ausfallzeit führt. `reload` (nur im Cluster-Modus verfügbar) wechselt Worker nacheinander aus und erhält dabei die Verfügbarkeit aufrecht. Verwenden Sie in Produktions-Cluster-Deployments immer `reload`.
Log-Verwaltung
“`bash
pm2 logs # Stream logs from all processes
pm2 logs my-app # Stream logs for a specific process
pm2 logs my-app –lines 200 # Show last 200 lines
pm2 flush # Clear all log files
“`
PM2 speichert Logs standardmäßig unter `~/.pm2/logs/`. Für Produktionsserver installieren Sie das Log-Rotationsmodul, um Festplattenerschöpfung zu verhindern:
“`bash
pm2 install pm2-logrotate
pm2 set pm2-logrotate:max_size 50M
pm2 set pm2-logrotate:retain 10
pm2 set pm2-logrotate:compress true
“`
Dies rotiert Logs, wenn sie 50 MB erreichen, behält 10 komprimierte Archive und verhindert unkontrolliertes Log-Wachstum – ein häufiges Problem auf lang laufenden Servern, das oft erst bemerkt wird, wenn der Festplattenspeicher erschöpft ist.
Schritt 5: PM2 für den Systemstart konfigurieren
PM2 muss so konfiguriert werden, dass es Server-Neustarts übersteht. Dies wird über eine von PM2 selbst generierte systemd-Service-Unit gehandhabt.
Den Startbefehl generieren:
“`bash
pm2 startup
“`
PM2 gibt einen auf Ihr Init-System und den aktuellen Benutzer zugeschnittenen Befehl aus. Er sieht so aus:
“`
[PM2] Init System found: systemd
[PM2] To setup the Startup Script, copy/paste the following command:
sudo env PATH=$PATH:/usr/bin /usr/lib/node_modules/pm2/bin/pm2 startup systemd -u ubuntu –hp /home/ubuntu
“`
Kopieren und führen Sie genau diesen Befehl aus. Ändern Sie ihn nicht – der Pfad zum PM2-Binary und das Home-Verzeichnis müssen mit der Konfiguration Ihres Systems übereinstimmen.
NVM-spezifische Startkonfiguration: Wenn Sie Node.js über NVM installiert haben, zeigt der Pfad im generierten Befehl auf Ihr NVM-verwaltetes Binary. Dies ist korrekt, aber Sie müssen sicherstellen, dass die NVM-Version als Standard gesetzt ist, bevor Sie `pm2 startup` ausführen:
“`bash
nvm alias default 20
pm2 startup
“`
Die aktuelle Prozessliste speichern:
“`bash
pm2 save
“`
Dies schreibt die Prozessliste in `~/.pm2/dump.pm2`. Beim Neustart liest die systemd-Unit diese Datei und stellt alle gespeicherten Prozesse wieder her. Wenn Sie später Anwendungen hinzufügen oder entfernen, führen Sie `pm2 save` erneut aus, um den Snapshot zu aktualisieren.
Überprüfen, ob die systemd-Unit aktiv ist:
“`bash
systemctl status pm2-ubuntu
“`
Ersetzen Sie `ubuntu` durch Ihren tatsächlichen Benutzernamen.
Schritt 6: Produktions-Deployment mit PM2-Ecosystem-Dateien
Für alles, was über eine einzelne Skriptanwendung hinausgeht, verwenden Sie PM2s Ecosystem-Konfigurationsdatei. Sie bietet reproduzierbare, versionskontrollierte Prozessdefinitionen und macht es überflüssig, sich lange CLI-Flags zu merken.
Die Ecosystem-Datei generieren
“`bash
pm2 ecosystem
“`
Dies erstellt `ecosystem.config.js` im aktuellen Verzeichnis.
Eine produktionsreife Ecosystem-Konfiguration
“`javascript
module.exports = {
apps: [
{
name: 'api-server',
script: './src/server.js',
instances: 'max',
exec_mode: 'cluster',
watch: false,
max_memory_restart: '500M',
log_date_format: 'YYYY-MM-DD HH:mm:ss Z',
error_file: '/var/log/pm2/api-server-error.log',
out_file: '/var/log/pm2/api-server-out.log',
merge_logs: true,
env: {
NODE_ENV: 'development',
PORT: 3000
},
env_production: {
NODE_ENV: 'production',
PORT: 8080
}
},
{
name: 'worker',
script: './src/worker.js',
instances: 2,
exec_mode: 'fork',
cron_restart: '0 2 * * *',
env_production: {
NODE_ENV: 'production'
}
}
]
};
“`
Wichtige Konfigurationsentscheidungen erklärt:
- `instances: 'max'`: PM2 erzeugt automatisch einen Worker pro logischem CPU-Kern. Auf einem 4-Kern-Server werden dadurch 4 Node.js-Prozesse erstellt, die die Hardware vollständig ausnutzen.
- `exec_mode: 'cluster'`: Verwendet das in Node.js integrierte Cluster-Modul. Alle Instanzen teilen sich denselben Port durch den Socket-Lastausgleich des Betriebssystems.
- `exec_mode: 'fork'`: Führt den Prozess als eigenständigen Kindprozess aus. Erforderlich für Anwendungen, die keine HTTP-Server sind (Queue-Worker, geplante Jobs, WebSocket-Server mit Sticky Sessions).
- `merge_logs: true`: Kombiniert stdout aller Cluster-Instanzen in einer einzigen Log-Datei, was die Log-Analyse erheblich erleichtert.
- `cron_restart`: Plant automatische Neustarts mit Cron-Syntax. Nützlich für Worker, die Zustand ansammeln, oder für die Anwendung nächtlicher Konfigurationsänderungen.
Mit der Ecosystem-Datei starten
“`bash
pm2 start ecosystem.config.js –env production
pm2 save
“`
Zero-Downtime-Deployment-Workflow
Beim Deployment einer neuen Version Ihrer Anwendung:
“`bash
git pull origin main
npm install –production
pm2 reload ecosystem.config.js –env production
“`
`pm2 reload` sendet ein `SIGINT` an jeden Worker nacheinander, wartet darauf, dass der neue Worker bereit ist, und beendet dann den alten. Ihre Anwendung muss `SIGINT` ordnungsgemäß behandeln und die Bereitschaft mit `process.send('ready')` signalisieren, damit dies korrekt funktioniert.
Graceful-Shutdown-Handler in Ihrer Anwendung:
“`javascript
process.on('SIGINT', () => {
server.close(() => {
console.log('HTTP server closed');
process.exit(0);
});
});
“`
Schritt 7: PM2-Monitoring und Observability
Integriertes Monitoring
“`bash
pm2 monit
“`
Zeigt Echtzeit-CPU- und Speichergraphen für jeden Prozess im Terminal an.
Prozessinformationen
“`bash
pm2 show my-app
“`
Gibt detaillierte Metadaten aus: Laufzeit, Neustart-Anzahl, Versionierung, Interpreter-Pfad, Umgebungsvariablen und Log-Dateispeicherorte.
PM2-Web-Dashboard (PM2 Plus)
PM2 bietet ein gehostetes Monitoring-Dashboard unter pm2.io. Verbinden Sie Ihren Server:
“`bash
pm2 link <secret_key> <public_key>
“`
Dies bietet historische Metriken, Alarmierung und Remote-Prozessverwaltung – besonders wertvoll bei der Verwaltung mehrerer Server oder wenn Sie Sichtbarkeit ohne SSH-Zugriff benötigen.
Schritt 8: Node.js und PM2 aktualisieren
PM2 aktualisieren
“`bash
sudo npm install -g pm2@latest
pm2 update
“`
`pm2 update` ist nach dem Upgrade des PM2-Binaries unerlässlich – es aktualisiert den PM2-Daemon im Speicher, ohne laufende Prozesse zu unterbrechen.
Node.js über NodeSource aktualisieren
Führen Sie das Setup-Skript für die neue Hauptversion erneut aus:
“`bash
curl -fsSL https://deb.nodesource.com/setup_22.x | sudo -E bash –
sudo apt install nodejs -y
“`
Starten Sie nach der Aktualisierung von Node.js PM2 neu, um sicherzustellen, dass es das neue Binary verwendet:
“`bash
pm2 restart all
“`
Node.js über NVM aktualisieren
“`bash
nvm install 22
nvm alias default 22
nvm use 22
pm2 restart all
“`
Wenn Sie die Standard-NVM-Version geändert haben, generieren Sie das PM2-Startskript neu, um den Binary-Pfad in der systemd-Unit zu aktualisieren:
“`bash
pm2 unstartup
pm2 startup
pm2 save
“`
Überlegungen zur Sicherheitshärtung
Der Betrieb von Node.js-Anwendungen in der Produktion erfordert Aufmerksamkeit über das Prozessmanagement hinaus:
- Als Nicht-Root-Benutzer ausführen: Führen Sie PM2 oder Node.js niemals als Root aus. Erstellen Sie einen dedizierten Systembenutzer (`adduser –system –group nodeapp`) und führen Sie PM2 unter diesem Konto aus.
- Verwaltung von Umgebungsvariablen: Kodieren Sie Geheimnisse nicht fest in `ecosystem.config.js`. Verwenden Sie eine `.env`-Datei, die über `dotenv` geladen wird, oder injizieren Sie Geheimnisse über Ihre Deployment-Pipeline. Die Ecosystem-Datei wird typischerweise in die Versionskontrolle eingecheckt.
- Reverse Proxy: Stellen Sie Nginx oder Caddy vor Ihre Node.js-Anwendung. Dies übernimmt TLS-Terminierung, Bereitstellung statischer Dateien, Rate-Limiting und Request-Buffering. Kombinieren Sie dies mit einer SSL Certificates-Lösung zur Durchsetzung von HTTPS.
- Firewall-Regeln: Blockieren Sie den direkten Zugriff auf Ihren Node.js-Port (z. B. 3000, 8080) aus dem öffentlichen Internet. Nur der Reverse Proxy sollte mit Node.js kommunizieren.
- Ressourcenlimits: Setzen Sie `max_memory_restart` in PM2 und konfigurieren Sie `ulimit`-Werte auf Systemebene, um zu verhindern, dass ein einzelner unkontrollierter Prozess den Server destabilisiert.
Für hochfrequentierte Produktions-Deployments, bei denen Ressourcenisolierung kritisch ist, bietet eine Dedicated Servers-Umgebung vollständige Hardware-Kontrolle und eliminiert das Noisy-Neighbor-Problem, das gemeinsam genutzter Infrastruktur inhärent ist.
Die richtige Hosting-Umgebung für Node.js wählen
| Workload | Empfohlene Umgebung | Begründung |
|---|
| — | — | — |
|---|
| Persönliche Projekte, Staging | [VPS Hosting](https://alexhost.com/de/vps/) | Kostengünstig, vollständiger Root-Zugriff, skalierbar |
|---|
| Hochfrequentierte APIs | [Dedicated Servers](https://alexhost.com/de/dedicated-servers/) | Vorhersehbare Leistung, keine Ressourcenkonflikte |
|---|
| ML-Inferenz + Node.js | [GPU Hosting](https://alexhost.com/de/gpu-hosting/) | Rechenintensive Aufgaben auf GPU-Worker auslagern |
|---|
| Verwaltetes Control Panel | [VPS with cPanel](https://alexhost.com/de/vps/control-panels/cpanel-vps/) | GUI-basierte Prozess- und Dateiverwaltung |
|---|
Technische Entscheidungs-Checkliste
Verwenden Sie diese Checkliste vor dem Deployment von Node.js und PM2 in der Produktion:
- [ ] Node.js über NodeSource (Server) oder NVM (Entwicklung) installiert – nicht das Ubuntu-Universe-Paket
- [ ] PM2 global mit den korrekten Berechtigungen für Ihre Installationsmethode installiert
- [ ] Anwendung mit `–name`-Flag und einem definierten `–max-memory-restart`-Schwellenwert gestartet
- [ ] Cluster-Modus für HTTP-Server aktiviert; Fork-Modus für Hintergrund-Worker verwendet
- [ ] `pm2 startup` ausgeführt und der generierte Befehl mit sudo ausgeführt
- [ ] `pm2 save` ausgeführt, nachdem alle Prozesse konfiguriert sind
- [ ] Log-Rotationsmodul installiert und konfiguriert
- [ ] Nginx oder Caddy als Reverse Proxy mit TLS konfiguriert
- [ ] Anwendung behandelt `SIGINT` ordnungsgemäß für Zero-Downtime-Reloads
- [ ] Geheimnisse außerhalb von `ecosystem.config.js` verwaltet
- [ ] PM2-systemd-Unit mit `systemctl status pm2-<username>` überprüft
- [ ] Firewall blockiert direkten Zugriff auf Node.js-Ports aus dem öffentlichen Internet
FAQ
Was ist der Unterschied zwischen PM2-Fork-Modus und Cluster-Modus?
Der Fork-Modus erzeugt die Anwendung als einzelnen Kindprozess – eine Instanz, ein genutzter CPU-Kern. Der Cluster-Modus verwendet das native Cluster-Modul von Node.js, um mehrere Worker-Prozesse zu erzeugen, die alle denselben TCP-Port teilen, was echte Multi-Core-Nutzung und Zero-Downtime-Reloads ermöglicht. Verwenden Sie den Cluster-Modus für HTTP/HTTPS-Server und den Fork-Modus für Worker, Cron-Jobs oder Anwendungen, die internen Zustand pflegen, der mit Multi-Prozess-Sharing inkompatibel ist.
Warum startet PM2 nach einem Server-Neustart nicht, obwohl ich `pm2 startup` ausgeführt habe?
Die häufigste Ursache ist, dass `pm2 save` nach der Konfiguration der Prozesse nicht ausgeführt wurde, sodass die Dump-Datei leer oder nicht vorhanden ist. Die zweithäufigste Ursache ist ein NVM-Pfadkonflikt: Wenn die NVM-Standardversion nach der Generierung des Startskripts geändert wurde, zeigt die systemd-Unit auf ein nicht vorhandenes Binary. Lösen Sie dies, indem Sie `pm2 unstartup` ausführen, den korrekten NVM-Standard setzen und dann `pm2 startup` und `pm2 save` erneut ausführen.
Kann PM2 Nicht-Node.js-Prozesse verwalten?
Ja. PM2 kann jede ausführbare Datei verwalten, indem der Interpreter angegeben wird. Zum Beispiel: `pm2 start script.py –interpreter python3`. Dies macht PM2 zu einem nützlichen Allzweck-Prozesssupervisor für mehrsprachige Microservice-Architekturen.
Wie betreibe ich mehrere Node.js-Anwendungen auf verschiedenen Ports hinter einem einzelnen Server?
Definieren Sie jede Anwendung als separaten Eintrag in `ecosystem.config.js` mit unterschiedlichen `PORT`-Umgebungsvariablen. Konfigurieren Sie Nginx als Reverse Proxy mit separaten `server`-Blöcken oder `location`-Direktiven, die zu jedem Port weiterleiten. Alle Anwendungen teilen sich denselben PM2-Daemon und werden über eine einzige `pm2 list`-Ansicht verwaltet.
Sollte ich NVM oder NodeSource für einen Produktions-VPS verwenden?
NodeSource ist für Produktionsserver generell vorzuziehen. Es installiert Node.js als Systempaket und macht es für alle Benutzer und Systemdienste ohne Shell-Initialisierungsabhängigkeiten verfügbar. NVMs benutzerbezogenes, shell-spezifisches Aktivierungsmodell führt zu subtilen Fehlerquellen in systemd-Units, Cron-Jobs und CI/CD-Pipelines, die außerhalb einer interaktiven Shell-Sitzung ausgeführt werden. Reservieren Sie NVM für lokale Entwicklungsmaschinen, auf denen die gleichzeitige Verwaltung mehrerer Node.js-Versionen eine echte Anforderung ist.
