web-dev-qa-db-ja.com

NVMを使用してApacheユーザー( 'www-data')のNodeバージョン)を切り替える方法-機能が大幅に制限されているユーザー?

Ubuntu WebサーバーのNodeからPHPスクリプトを呼び出します。

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

前述のように、PHPコードはApacheユーザーのコンテキストで実行されます。これは、Ubuntuではデフォルトでwww-dataです。

nvmを使用して、www-dataユーザーのNodeバージョンを切り替えられるようにしたいと思います。

(注:別のNodeインストールへのフルパスを指定することで、nvmを使用してNodeバージョンを切り替えることができる場合がありますなしこれはまだ試していませんが、試していません私の質問。)

指示に従って ここ 、私はnvmotherユーザーのために非常に簡単にインストールして使用します:

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

そして

nvm install 4.1.2

ユーザーごとにnvmを個別にインストールする必要があることがわかりました。これは、www-dataユーザーを実行したときにnvmがインストールされないことを意味します。ログインユーザーとしての上記のコマンド(ubuntu);逆に、ログインユーザー(ubuntu)のNodeバージョンを切り替えても、www-dataユーザーには影響しません。

もう1つの重要な詳細:www-dataユーザーは特別です。このユーザーの機能は厳しく制限されています。シェルでwww-dataユーザーに切り替えるには、次の特別なコマンドが必要です。

Sudo su www-data -s /bin/sh 

(...そして、上記のコマンドでさえ、www-dataユーザーにシェルプロンプトを許可するために、ここに記載されていない他の以前の特別な手順なしでは機能しません。)

www-dataユーザーとしてログインした場合、前述のコマンドを使用してinstallnvmはできるようですが、できませんrunnvm(エラーはnvm not foundです。)

これを克服しようとして、私は提案に従うという残忍な間違いを犯しました ここ としてログインしている間にNodeバージョンをグローバルに(つまり、すべてのユーザーに対して)切り替えようとしました(私は思いますが、今忘れてください)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アクセスが中断されたため、サーバーを最初から再構築する必要があるようです。

私の質問は次のとおりです。Apacheユーザー(www-data)としてnvmをインストールして使用し、Webサーバーが特定のバージョンのNodeプロセスを実行できるようにして、Node Webサーバーがアクセスします-nvmを使用すると便利ですか?

2
Dan Nissenbaum

簡単な答え:できません。

NVMは、アクティブなnodeバージョンを変更するために環境変数を設定する(主にPATHを変更する)だけのシェルスクリプトです。そのため、呼び出し元のシェルの存続期間またはプロセスツリーを超えて永続化することはありません。

特定の環境変数を使用してWebサーバーを実行できるはずですが、nvmの呼び出しはWebサーバーのサブプロセスで呼び出され、すぐに破棄されるため、NVMを使用してそれらを管理することはできません。コマンドは終了します。

2
Ginnungagap