![기능이 심각하게 제한된 사용자인 Apache 사용자('www-data')의 노드 버전을 전환하기 위해 NVM을 사용하는 방법은 무엇입니까?](https://rvso.com/image/697397/%EA%B8%B0%EB%8A%A5%EC%9D%B4%20%EC%8B%AC%EA%B0%81%ED%95%98%EA%B2%8C%20%EC%A0%9C%ED%95%9C%EB%90%9C%20%EC%82%AC%EC%9A%A9%EC%9E%90%EC%9D%B8%20Apache%20%EC%82%AC%EC%9A%A9%EC%9E%90('www-data')%EC%9D%98%20%EB%85%B8%EB%93%9C%20%EB%B2%84%EC%A0%84%EC%9D%84%20%EC%A0%84%ED%99%98%ED%95%98%EA%B8%B0%20%EC%9C%84%ED%95%B4%20NVM%EC%9D%84%20%EC%82%AC%EC%9A%A9%ED%95%98%EB%8A%94%20%EB%B0%A9%EB%B2%95%EC%9D%80%20%EB%AC%B4%EC%97%87%EC%9E%85%EB%8B%88%EA%B9%8C%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
- 아직 시도하지 않았지만 내 질문은 아닙니다.)
지침 따르기여기, 설치하고 사용합니다nvm
, 저는 매우 쉽게다른사용자:
curl -o- https://raw.githubusercontent.com/creationix/nvm/v0.33.0/install.sh | bash
그리고
nvm install 4.1.2
설치해야 한다는 것을 알았습니다nvm
모든 사용자에 대해 별도로 이는 로그인 사용자( ) 로 위 명령을 실행할 때 nvm
해당 사용자에 대해 설치되지 않음 을 의미합니다. 반대로 로그인 사용자( )에 대한 내 노드 버전을 전환해도 사용자에게는 아무런 영향이 없습니다 .www-data
ubuntu
ubuntu
www-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
액세스가 중단되어 이제 서버를 처음부터 다시 구축해야 합니다.
내 질문은: 웹 서버가 주어진 버전의 노드 프로세스를 실행하도록 허용하고 이를 통해 웹 서버가 액세스하는 노드의 버전을 제어할 수 있도록 nvm
Apache 사용자( )로 어떻게 설치하고 사용할 수 있습니까 ?www-data
nvm
답변1
짧은 대답: 할 수 없습니다.
NVM은 활성 버전을 변경하기 위해 환경 변수만 설정(주로 PATH 수정)하는 쉘 스크립트입니다 node
. 따라서 호출 셸의 수명이나 프로세스 트리를 넘어서는 지속되지 않습니다.
nvm
특정 환경 변수를 사용하여 웹 서버를 실행할 수 있어야 하지만 호출이 웹 서버의 하위 프로세스에서 호출되고 명령이 종료되자마자 삭제되므로 NVM을 사용하여 이를 관리할 수 없습니다 .