Eu chamo um script de 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);
Como mencionado, o código PHP é executado no contexto do usuário do Apache, que é www-data
no Ubuntu.
Gostaria de poder usar nvm
para alternar as versões do Node para o usuário www-data
.
(Nota: Eu posso trocar as versões do Node sem usando 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ções aqui , eu instalo e uso nvm
com bastante facilidade para outros usuá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 é instalado para o usuário www-data
quando eu executo o comando acima como o usuário de login (%código%); e, inversamente, mudar minha versão do Node para o usuário de login ( ubuntu
) não tem efeito sobre o usuário ubuntu
.
Mais um detalhe importante: o usuário www-data
é especial. Este usuário restringiu severamente a funcionalidade. Para alternar para o usuário www-data
no shell, esse 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 do shell para o usuário www-data
).
Quando logado como usuário www-data
, no entanto, embora pareça ser capaz de instalar www-data
usando o comando mencionado anteriormente, não consigo executar nvm
. (O erro é nvm
.)
Tentando superar isso, cometi o erro brutal de seguir a sugestão aqui para tentar mudar a versão do nó globalmente (isto é, para todos os usuários) enquanto logado como (eu acho, mas esqueça agora) o nvm not found
user (oops!):
// 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 fez com que meu root
access fosse interrompido e agora, aparentemente, eu devo reconstruir o servidor a partir do zero.
Minha pergunta é: Como posso instalar e usar sudo
como o usuário do Apache ( nvm
) para permitir que um servidor da Web execute um processo Node de uma determinada versão e, assim, controlar qual versão do Node o servidor da web acessos - com a conveniência de usar www-data
?