Für die Verwaltung von Node.js-Anwendungen auf einem Produktionsserver ist häufig ein Prozessmanager erforderlich, der dafür sorgt, dass Ihre Anwendungen reibungslos laufen und nach Abstürzen automatisch wiederhergestellt werden. PM2 ist einer der beliebtesten Prozessmanager für Node.js und bietet leistungsstarke Funktionen wie Prozessüberwachung, Protokollverwaltung und Cluster-Modus.
Wenn Sie eine Anwendung auf einer Google Cloud Ubuntu-Instanz ausführen, kann es vorkommen, dass PM2-Prozesse nur für den Benutzer sichtbar sind, der sie gestartet hat. Dies kann problematisch sein, wenn Ihr Server mehrere Benutzer hat, z. B. Entwickler, Systemadministratoren oder automatisierte Bereitstellungsskripts. In diesem Blogbeitrag gehen wir die Schritte durch, um PM2 als systemweiten Dienst zu konfigurieren und ihn allen Benutzern auf dem Server zugänglich zu machen.
Standardmäßig wird PM2 als Prozess unter dem Benutzer ausgeführt, der es gestartet hat. Das heißt, wenn Sie als einzelner Benutzer eine SSH-Verbindung zu Ihrem Server herstellen und einen PM2-Prozess starten, ist dieser Prozess für einen anderen Benutzer, der sich über SSH anmeldet, nicht sichtbar. Um dieses Problem zu beheben, können wir PM2 so konfigurieren, dass es als Dienst auf Systemebene ausgeführt wird. Dieser Ansatz hat mehrere Vorteile:
Bevor wir beginnen, stellen Sie sicher, dass Sie Folgendes haben:
Um sicherzustellen, dass alle Benutzer auf PM2 zugreifen können, sollte es global installiert werden. Sie können PM2 global mit npm:
installieren.
sudo npm install -g pm2
Dieser Befehl installiert PM2 im globalen npm-Verzeichnis und macht es systemweit verfügbar.
Als nächstes müssen wir PM2 so einrichten, dass es als Dienst ausgeführt wird. Dadurch kann PM2 Prozesse auf Systemebene verwalten, anstatt an eine bestimmte Benutzersitzung gebunden zu sein.
Führen Sie den folgenden Befehl aus, um das erforderliche Startskript für PM2 zu generieren:
pm2 startup
Dieser Befehl erkennt das von Ihrer Ubuntu-Instanz verwendete Init-System (normalerweise systemd) und stellt einen Befehl bereit, der mit sudo ausgeführt werden muss, um PM2 als systemweiten Dienst zu konfigurieren. Die Ausgabe sieht etwa so aus:
[PM2] Init System found: systemd [PM2] To setup the Startup Script, copy/paste the following command: sudo env PATH=$PATH:/usr/bin pm2 startup systemd -u--hp /home/
Hier sollte
Kopieren Sie den in der Ausgabe des vorherigen Schritts bereitgestellten Befehl und führen Sie ihn aus. Zum Beispiel:
sudo env PATH=$PATH:/usr/bin pm2 startup systemd -u johndoe --hp /home/johndoe
Dieser Befehl erstellt einen Systemd-Dienst, der PM2 mit den richtigen Umgebungsvariablen und dem richtigen Benutzerkontext startet.
Wenn unter PM2 bereits Prozesse ausgeführt werden, die Sie über Neustarts hinweg beibehalten möchten, müssen Sie die aktuelle Prozessliste speichern. Dadurch wird eine Dump-Datei erstellt, die PM2 zum Wiederherstellen von Prozessen beim Systemstart verwendet:
pm2 save
Der Befehl „pm2 save“ speichert die aktuelle Liste der verwalteten Prozesse in einer JSON-Datei in ~/.pm2/dump.pm2. Diese Datei wird beim Start von PM2 automatisch geladen und stellt so sicher, dass Ihre Anwendungen nach einem Neustart wiederbelebt werden.
Um sicherzustellen, dass PM2 beim Systemstart automatisch startet, müssen Sie den Dienst aktivieren:
sudo systemctl enable pm2-johndoe
Ersetzen Sie johndoe durch den entsprechenden Benutzernamen. Dieser Befehl aktiviert den PM2-Dienst und stellt sicher, dass er bei jedem Systemstart gestartet wird.
Da PM2 nun als systemweiter Dienst konfiguriert ist, sollte es für jeden Benutzer auf dem Server zugänglich sein. Um den Status der Prozesse zu überprüfen oder aufzulisten, kann jeder Benutzer Folgendes ausführen:
pm2 list
Dieser Befehl zeigt die Liste der vom systemweiten PM2-Dienst verwalteten Prozesse an, unabhängig davon, welcher Benutzer angemeldet ist.
Wenn Sie möchten, dass mehrere Benutzer auf PM2-Protokolle zugreifen können, müssen Sie möglicherweise die Dateiberechtigungen anpassen oder PM2 so konfigurieren, dass Protokolle in einem freigegebenen Verzeichnis gespeichert werden. Dadurch wird sichergestellt, dass alle Benutzer Protokolle für die unter PM2 ausgeführten Prozesse anzeigen und verwalten können.
Um das Protokolldateiverzeichnis zu ändern, können Sie die folgende Umgebungsvariable verwenden:
export PM2_HOME=/path/to/shared/pm2/home
Legen Sie dies in einer globalen Konfigurationsdatei wie /etc/environment fest, um es über Sitzungen hinweg persistent zu machen.
Sobald PM2 als Dienst eingerichtet ist, können Benutzer Prozesse mit Standard-PM2-Befehlen verwalten. Abhängig von den Berechtigungen und Benutzerrollen erfordern einige Befehle jedoch möglicherweise Sudo-Zugriff. Zum Beispiel:
sudo pm2 list
Dieser Befehl listet die vom systemweiten PM2-Dienst verwalteten Prozesse auf und erleichtert so Administratoren und Entwicklern die Zusammenarbeit bei der Serververwaltung.
Das Einrichten von PM2 als systemweiter Dienst auf Ihrer Ubuntu-Instanz stellt sicher, dass Ihre Node.js-Anwendungen robust verwaltet werden und für alle Benutzer auf dem Server zugänglich sind. Dieses Setup ist besonders nützlich in Umgebungen mit mehreren Benutzern oder automatisierten Bereitstellungsprozessen und bietet eine zuverlässige und zentralisierte Möglichkeit, Anwendungen zu verwalten.
Indem Sie die in dieser Anleitung beschriebenen Schritte befolgen, können Sie sicherstellen, dass PM2 allen Benutzern zur Verfügung steht, Ihre Prozesse nach Systemneustarts automatisch neu gestartet werden und Protokolle leicht zugänglich sind. Dies vereinfacht nicht nur die Serververwaltung, sondern erhöht auch die Zuverlässigkeit Ihrer Anwendungen in der Produktion.
Viel Spaß beim Codieren!
Haftungsausschluss: Alle bereitgestellten Ressourcen stammen teilweise aus dem Internet. Wenn eine Verletzung Ihres Urheberrechts oder anderer Rechte und Interessen vorliegt, erläutern Sie bitte die detaillierten Gründe und legen Sie einen Nachweis des Urheberrechts oder Ihrer Rechte und Interessen vor und senden Sie ihn dann an die E-Mail-Adresse: [email protected] Wir werden die Angelegenheit so schnell wie möglich für Sie erledigen.
Copyright© 2022 湘ICP备2022001581号-3