Como usar o NVM para alternar versões do Node para o usuário Apache ('www-data') - um usuário com funcionalidade severamente limitada?

Como usar o NVM para alternar versões do Node para o usuário Apache ('www-data') - um usuário com funcionalidade severamente limitada?

Eu chamo um script Node do PHP no meu servidor web Ubuntu, como em

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

Conforme observado, o código PHP é executado no contexto do usuário Apache, que é www-datao padrão no Ubuntu.

Eu gostaria de poder usar nvmpara alternar versões do Node para owww-datado utilizador.

(Observação: talvez eu consiga mudar as versões do Nodesemusando nvmespecificando o caminho completo para uma instalação diferente do Node - ainda não tentei isso, mas não é minha pergunta.)

Seguindo as instruçõesaqui, eu instalo e uso nvmcom bastante facilidade paraoutroUsuários:

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

e

nvm install 4.1.2

Descobri que devo instalar nvmseparadamente para cada usuário. Isso significa que nvmnão instala para o www-datausuário quando executo o comando acima como usuário de login ( ubuntu); e, inversamente, mudar a versão do meu Node para o usuário de login ( ubuntu) não tem efeito no www-datausuário.

Mais um detalhe importante: O www-datausuário é especial. Este usuário restringiu severamente a funcionalidade. Para mudar para o www-datausuário no shell, este comando especial é necessário:

sudo su www-data -s /bin/sh 

(...E mesmo o comando acima não funcionará sem outras etapas especiais anteriores, não mencionadas aqui, para permitir um prompt de shell para o www-datausuário.)

Quando logado como www-datausuário, no entanto, embora eu pareça ser capaz deinstalar nvmusando o comando observado anteriormente, não consigocorrer nvm. (O erro é nvm not found.)

Tentando superar isso, cometi o erro brutal de seguir a sugestãoaquipara tentar mudar a versão do Node globalmente (ou seja, para todos os usuários) enquanto estiver logado como (acho, mas esqueça agora) o rootusuário (ops!):

// 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

Infelizmente, a execução do comando acima causou sudoa interrupção do meu acesso e agora aparentemente devo reconstruir o servidor do zero.

Minha dúvida é: Como posso instalar e usar nvmcomo usuário Apache( www-data) para permitir que um servidor web execute um processo do Node de uma determinada versão, e assim controlar qual versão do Node o servidor web acessa - com a comodidade de usar nvm?

Responder1

Resposta curta: você não pode.

NVM é um script de shell que apenas define variáveis ​​de ambiente (modificando principalmente seu PATH) para alterar a nodeversão ativa. Como tal, eles não são persistentes além do tempo de vida ou da árvore de processos do shell de chamada.

Embora você deva ser capaz de executar seu servidor web com variáveis ​​de ambiente específicas, você não pode usar NVM para gerenciá-las, pois qualquer chamada nvmseria chamada em um subprocesso de seu servidor web e descartada assim que o comando terminasse.

informação relacionada