如何使用 NVM 為 Apache 使用者(“www-data”)(功能嚴重受限的使用者)切換節點版本?

如何使用 NVM 為 Apache 使用者(“www-data”)(功能嚴重受限的使用者)切換節點版本?

我在 Ubuntu Web 伺服器上從 PHP 呼叫 Node 腳本,如下所示

// The following PHP executes in the context of the Apache user - 'www-data'
//
$execstring = "node " . $args;
exec($execstring, $output, $return_value);

如前所述,PHP 程式碼在 Apache 使用者的上下文中執行,預設www-data在 Ubuntu 上是如此。

我希望能夠用於nvm切換節點版本www-data用戶。

(注意:我也許可以切換 Node 版本沒有透過指定不同節點安裝的完整路徑來使用nvm- 我還沒有嘗試過,但這不是我的問題。

遵循說明這裡,我安裝和使用nvm非常容易其他用戶:

curl -o- https://raw.githubusercontent.com/creationix/nvm/v0.33.0/install.sh | bash

nvm install 4.1.2

我發現我必須nvm為每個用戶單獨安裝。 這表示當我以登入使用者 ( )身份執行上述命令時,nvm不會為該使用者安裝;相反,切換登入使用者 ( ) 的 Node 版本對使用者沒有影響。www-dataubuntuubuntuwww-data

另一個重要的細節是:www-data使用者是特殊的。該用戶的功能受到嚴重限制。要切換到www-datashell 中的用戶,需要使用以下特殊命令:

sudo su www-data -s /bin/sh 

(...如果沒有其他先前的特殊步驟(此處未註明)以允許使用者出現 shell 提示,即使上述命令也無法運作www-data。)

然而,當以使用者身分登入時www-data,儘管我似乎能夠安裝 nvm使用前面提到的命令,我不能跑步 nvm (錯誤是nvm not found。)

為了克服這個問題,我犯了遵循建議的殘酷錯誤這裡嘗試在以(我想,但現在忘記了)用戶身份登入時全域(即對於所有用戶)切換節點版本root(哎呀!):

// 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

不幸的是,運行上述命令導致我的sudo訪問中斷,現在我顯然必須從頭開始重建伺服器。

我的問題是:如何nvm以 Apache 使用者 ( www-data) 的身份安裝和使用,以允許 Web 伺服器運行給定版本的 Node 進程,從而控制 Web 伺服器存取哪個版本的 Node - 並方便使用nvm

答案1

簡短的回答:你不能。

NVM 是一個 shell 腳本,僅設定環境變數(主要是修改您的 PATH)來變更活動node版本。因此,它們不會在呼叫 shell 的生命週期或進程樹之外持續存在。

雖然您應該能夠使用特定的環境變數來執行 Web 伺服器,但您不能使用 NVM 來管理它們,因為任何調用都nvm將在 Web 伺服器的子進程中調用,並在命令終止後立即被丟棄。

相關內容