如何使用 NVM 为 Apache 用户(“www-data”)(功能严重受限的用户)切换 Node 版本?

如何使用 NVM 为 Apache 用户(“www-data”)(功能严重受限的用户)切换 Node 版本?

我在 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-dataUbuntu 上的默认设置。

我希望能够使用nvm切换 Node 版本www-data用户。

(注:我可能能够切换 Node 版本没有通过指定不同 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-data在 shell 中切换到该用户,需要执行此特殊命令:

sudo su www-data -s /bin/sh 

(...并且,如果没有其他未在此处提及的特殊步骤,上述命令也无法工作,以便为用户提供 shell 提示符www-data。)

然而,当以用户身份登录时www-data,虽然我似乎能够安装 nvm使用前面提到的命令,我无法跑步 nvm (错误为nvm not found。)

为了克服这个问题,我犯了一个严重的错误,听从了以下建议这里尝试以用户身份(我想是的,但现在忘记了)root(哎呀!)登录时全局切换 Node 版本(即针对所有用户):

// 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 服务器的子进程中被调用,并且在命令终止后立即被丢弃。

相关内容