![Wie verwende ich NVM, um die Node-Versionen für den Apache-Benutzer („www-data“) zu wechseln – einen Benutzer mit stark eingeschränkter Funktionalität?](https://rvso.com/image/697397/Wie%20verwende%20ich%20NVM%2C%20um%20die%20Node-Versionen%20f%C3%BCr%20den%20Apache-Benutzer%20(%E2%80%9Ewww-data%E2%80%9C)%20zu%20wechseln%20%E2%80%93%20einen%20Benutzer%20mit%20stark%20eingeschr%C3%A4nkter%20Funktionalit%C3%A4t%3F.png)
Ich rufe ein Node-Skript aus PHP auf meinem Ubuntu-Webserver auf, wie in
// The following PHP executes in the context of the Apache user - 'www-data'
//
$execstring = "node " . $args;
exec($execstring, $output, $return_value);
Wie erwähnt wird der PHP-Code im Kontext des Apache-Benutzers ausgeführt, der www-data
unter Ubuntu standardmäßig aktiviert ist.
Ich möchte in der Lage sein, nvm
Node-Versionen für die zu wechselnwww-data
Benutzer.
(Hinweis: Ich kann möglicherweise die Node-Version wechselnohneVerwendung nvm
durch Angabe des vollständigen Pfads zu einer anderen Node-Installation – das habe ich noch nicht ausprobiert, aber das ist nicht meine Frage.)
Folgende AnweisungenHier, ich installiere und benutze nvm
ganz einfach fürandereBenutzer:
curl -o- https://raw.githubusercontent.com/creationix/nvm/v0.33.0/install.sh | bash
Und
nvm install 4.1.2
Ich habe festgestellt, dass ich die Installation nvm
für jeden Benutzer separat durchführen muss. Dies bedeutet, dass nvm
die Installation für den www-data
Benutzer nicht erfolgt, wenn ich den obigen Befehl als angemeldeter Benutzer ausführe ( ubuntu
); und umgekehrt ubuntu
hat das Ändern meiner Node-Version für den angemeldeten Benutzer () keine Auswirkungen auf den www-data
Benutzer.
Noch ein wichtiges Detail: Der www-data
Benutzer ist speziell. Dieser Benutzer hat stark eingeschränkte Funktionalität. Um www-data
in der Shell zu dem Benutzer zu wechseln, ist dieser spezielle Befehl erforderlich:
sudo su www-data -s /bin/sh
(... Und selbst der obige Befehl funktioniert nicht ohne andere, vorherige, hier nicht aufgeführte spezielle Schritte, um dem www-data
Benutzer eine Shell-Eingabeaufforderung zu ermöglichen.)
Wenn ich als Benutzer angemeldet bin www-data
, kann ich zwarInstallieren nvm
mit dem oben genannten Befehl kann ich nichtlaufen nvm
. (Der Fehler ist nvm not found
.)
Beim Versuch, dies zu überwinden, machte ich den brutalen Fehler, dem Vorschlag zu folgenHierroot
um zu versuchen, die Node-Version global (d. h. für alle Benutzer) zu ändern, während Sie (glaube ich, habe es aber vergessen) als der Benutzer (ups!) angemeldet sind :
// Danger! Do not do this!
n=$(which node);n=${n%/bin/node}; chmod -R 755 $n/bin/*; sudo cp -r $n/{bin,lib,share} /usr/local
Leider hat die Ausführung des obigen Befehls dazu geführt sudo
, dass mein Zugriff unterbrochen wurde und ich den Server nun anscheinend von Grund auf neu aufbauen muss.
Meine Frage ist: Wie kann ich nvm
als Apache-Benutzer ( www-data
) installieren und verwenden, um einem Webserver zu ermöglichen, einen Node-Prozess einer bestimmten Version auszuführen und dadurch zu steuern, auf welche Version von Node der Webserver zugreift – und das mit dem Komfort der Verwendung von nvm
?
Antwort1
Kurze Antwort: Das können Sie nicht.
NVM ist ein Shell-Skript, das lediglich Umgebungsvariablen setzt (hauptsächlich Ihren PATH ändert), um die aktive node
Version zu ändern. Daher bleiben sie nicht über die Lebensdauer oder den Prozessbaum der aufrufenden Shell hinaus bestehen.
Obwohl Sie Ihren Webserver mit bestimmten Umgebungsvariablen ausführen können sollten, können Sie NVM nicht zu deren Verwaltung verwenden, da jeder Aufruf nvm
in einem Unterprozess Ihres Webservers erfolgen und verworfen würde, sobald der Befehl beendet wird.