![機能が著しく制限されているユーザーである Apache ユーザー (「www-data」) の Node バージョンを NVM を使用して切り替えるにはどうすればよいでしょうか?](https://rvso.com/image/697397/%E6%A9%9F%E8%83%BD%E3%81%8C%E8%91%97%E3%81%97%E3%81%8F%E5%88%B6%E9%99%90%E3%81%95%E3%82%8C%E3%81%A6%E3%81%84%E3%82%8B%E3%83%A6%E3%83%BC%E3%82%B6%E3%83%BC%E3%81%A7%E3%81%82%E3%82%8B%20Apache%20%E3%83%A6%E3%83%BC%E3%82%B6%E3%83%BC%20(%E3%80%8Cwww-data%E3%80%8D)%20%E3%81%AE%20Node%20%E3%83%90%E3%83%BC%E3%82%B8%E3%83%A7%E3%83%B3%E3%82%92%20NVM%20%E3%82%92%E4%BD%BF%E7%94%A8%E3%81%97%E3%81%A6%E5%88%87%E3%82%8A%E6%9B%BF%E3%81%88%E3%82%8B%E3%81%AB%E3%81%AF%E3%81%A9%E3%81%86%E3%81%99%E3%82%8C%E3%81%B0%E3%82%88%E3%81%84%E3%81%A7%E3%81%97%E3%82%87%E3%81%86%E3%81%8B%3F.png)
私はUbuntuウェブサーバー上のPHPからNodeスクリプトを呼び出します。
// The following PHP executes in the context of the Apache user - 'www-data'
//
$execstring = "node " . $args;
exec($execstring, $output, $return_value);
www-data
前述のように、PHP コードはUbuntu ではデフォルトでApache ユーザーのコンテキストで実行されます。
nvm
Nodeのバージョンを切り替えるために使用したいのですがwww-data
ユーザー。
(注:Nodeのバージョンを切り替えることができるかもしれないそれなしnvm
別の Node インストールへのフルパスを指定して使用します(まだ試していませんが、これは私の質問ではありません)。
指示に従うここ、インストールして使用する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
もう 1 つ重要な詳細:www-data
ユーザーは特別です。このユーザーには、厳しく制限された機能があります。www-data
シェルでユーザーに切り替えるには、次の特別なコマンドが必要です。
sudo su www-data -s /bin/sh
(...そして、上記のコマンドも、ユーザーにシェルプロンプトを表示させるために、ここでは説明されていない他の特別な手順を実行しないと機能しませんwww-data
。)
www-data
ただし、ユーザーとしてログインすると、インストール nvm
前述のコマンドを使用すると、走る nvm
。 (エラーは です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
アクセスが切断され、サーバーを最初から再構築する必要があるようです。
nvm
私の質問は、 をインストールしてApache ユーザー ( ) として使用し、www-data
Web サーバーが特定のバージョンの Node プロセスを実行できるようにし、それによって Web サーバーがアクセスする Node のバージョンを を使用する便利さとともに制御するにはどうすればよいかということnvm
です。
答え1
簡単に答えると、それはできません。
NVM は、アクティブなバージョンを変更するために環境変数を設定する (主に PATH を変更する) だけのシェル スクリプトですnode
。そのため、呼び出し元のシェルの有効期間またはプロセス ツリーを超えて永続的になることはありません。
特定の環境変数を使用して Web サーバーを実行できるはずですが、 への呼び出しはnvm
Web サーバーのサブプロセスで呼び出され、コマンドが終了するとすぐに破棄されるため、NVM を使用してそれらを管理することはできません。