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?

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?

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-dataunter Ubuntu standardmäßig aktiviert ist.

Ich möchte in der Lage sein, nvmNode-Versionen für die zu wechselnwww-dataBenutzer.

(Hinweis: Ich kann möglicherweise die Node-Version wechselnohneVerwendung nvmdurch 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 nvmganz 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 nvmfür jeden Benutzer separat durchführen muss. Dies bedeutet, dass nvmdie Installation für den www-dataBenutzer nicht erfolgt, wenn ich den obigen Befehl als angemeldeter Benutzer ausführe ( ubuntu); und umgekehrt ubuntuhat das Ändern meiner Node-Version für den angemeldeten Benutzer () keine Auswirkungen auf den www-dataBenutzer.

Noch ein wichtiges Detail: Der www-dataBenutzer ist speziell. Dieser Benutzer hat stark eingeschränkte Funktionalität. Um www-datain 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-dataBenutzer eine Shell-Eingabeaufforderung zu ermöglichen.)

Wenn ich als Benutzer angemeldet bin www-data, kann ich zwarInstallieren nvmmit 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 folgenHierrootum 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 nvmals 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 nodeVersion 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 nvmin einem Unterprozess Ihres Webservers erfolgen und verworfen würde, sobald der Befehl beendet wird.

verwandte Informationen