![Como usar o NVM para alternar versões do Node para o usuário Apache ('www-data') - um usuário com funcionalidade severamente limitada?](https://rvso.com/image/697397/Como%20usar%20o%20NVM%20para%20alternar%20vers%C3%B5es%20do%20Node%20para%20o%20usu%C3%A1rio%20Apache%20('www-data')%20-%20um%20usu%C3%A1rio%20com%20funcionalidade%20severamente%20limitada%3F.png)
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-data
o padrão no Ubuntu.
Eu gostaria de poder usar nvm
para alternar versões do Node para owww-data
do utilizador.
(Observação: talvez eu consiga mudar as versões do Nodesemusando nvm
especificando 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 nvm
com 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 nvm
separadamente para cada usuário. Isso significa que nvm
não instala para o www-data
usuá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-data
usuário.
Mais um detalhe importante: O www-data
usuário é especial. Este usuário restringiu severamente a funcionalidade. Para mudar para o www-data
usuá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-data
usuário.)
Quando logado como www-data
usuário, no entanto, embora eu pareça ser capaz deinstalar nvm
usando 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 root
usuá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 sudo
a interrupção do meu acesso e agora aparentemente devo reconstruir o servidor do zero.
Minha dúvida é: Como posso instalar e usar nvm
como 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 node
versã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 nvm
seria chamada em um subprocesso de seu servidor web e descartada assim que o comando terminasse.