![如何使用 NVM 為 Apache 使用者(“www-data”)(功能嚴重受限的使用者)切換節點版本?](https://rvso.com/image/697397/%E5%A6%82%E4%BD%95%E4%BD%BF%E7%94%A8%20NVM%20%E7%82%BA%20Apache%20%E4%BD%BF%E7%94%A8%E8%80%85%EF%BC%88%E2%80%9Cwww-data%E2%80%9D%EF%BC%89%EF%BC%88%E5%8A%9F%E8%83%BD%E5%9A%B4%E9%87%8D%E5%8F%97%E9%99%90%E7%9A%84%E4%BD%BF%E7%94%A8%E8%80%85%EF%BC%89%E5%88%87%E6%8F%9B%E7%AF%80%E9%BB%9E%E7%89%88%E6%9C%AC%EF%BC%9F.png)
我在 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-data
ubuntu
ubuntu
www-data
另一個重要的細節是:www-data
使用者是特殊的。該用戶的功能受到嚴重限制。要切換到www-data
shell 中的用戶,需要使用以下特殊命令:
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 伺服器的子進程中調用,並在命令終止後立即被丟棄。