기능이 심각하게 제한된 사용자인 Apache 사용자('www-data')의 노드 버전을 전환하기 위해 NVM을 사용하는 방법은 무엇입니까?

기능이 심각하게 제한된 사용자인 Apache 사용자('www-data')의 노드 버전을 전환하기 위해 NVM을 사용하는 방법은 무엇입니까?

다음과 같이 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 사용자의 컨텍스트에서 실행됩니다 .

nvmNode 버전을 전환하는 데 사용하고 싶습니다.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해당 사용자에 대해 설치되지 않음 을 의미합니다. 반대로 로그인 사용자( )에 대한 내 노드 버전을 전환해도 사용자에게는 아무런 영향이 없습니다 .www-dataubuntuubuntuwww-data

한 가지 더 중요한 세부 사항은 www-data사용자가 특별하다는 것입니다. 이 사용자는 기능이 심각하게 제한되어 있습니다. www-data셸에서 사용자 로 전환하려면 다음 특수 명령이 필요합니다.

sudo su www-data -s /bin/sh 

(...그리고 위의 명령조차도 사용자에게 쉘 프롬프트를 허용하기 위해 여기에 언급되지 않은 다른 이전 특수 단계 없이는 작동하지 않습니다 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액세스가 중단되어 이제 서버를 처음부터 다시 구축해야 합니다.

내 질문은: 웹 서버가 주어진 버전의 노드 프로세스를 실행하도록 허용하고 이를 통해 웹 서버가 액세스하는 노드의 버전을 제어할 수 있도록 nvmApache 사용자( )로 어떻게 설치하고 사용할 수 있습니까 ?www-datanvm

답변1

짧은 대답: 할 수 없습니다.

NVM은 활성 버전을 변경하기 위해 환경 변수만 설정(주로 PATH 수정)하는 쉘 스크립트입니다 node. 따라서 호출 셸의 수명이나 프로세스 트리를 넘어서는 지속되지 않습니다.

nvm특정 환경 변수를 사용하여 웹 서버를 실행할 수 있어야 하지만 호출이 웹 서버의 하위 프로세스에서 호출되고 명령이 종료되자마자 삭제되므로 NVM을 사용하여 이를 관리할 수 없습니다 .

관련 정보