![¿Cómo utilizar NVM para cambiar las versiones de Nodo para el usuario de Apache ("www-data"), un usuario con una funcionalidad muy limitada?](https://rvso.com/image/697397/%C2%BFC%C3%B3mo%20utilizar%20NVM%20para%20cambiar%20las%20versiones%20de%20Nodo%20para%20el%20usuario%20de%20Apache%20(%22www-data%22)%2C%20un%20usuario%20con%20una%20funcionalidad%20muy%20limitada%3F.png)
Llamo a un script de Nodo desde PHP en mi servidor web Ubuntu, como en
// The following PHP executes in the context of the Apache user - 'www-data'
//
$execstring = "node " . $args;
exec($execstring, $output, $return_value);
Como se señaló, el código PHP se ejecuta en el contexto del usuario de Apache, que es www-data
el predeterminado en Ubuntu.
Me gustaría poder utilizar nvm
para cambiar las versiones de Nodo para elwww-data
usuario.
(Nota: es posible que pueda cambiar las versiones de Nodesinusando nvm
especificando la ruta completa a una instalación de Nodo diferente; no lo he probado todavía, pero no es mi pregunta).
Siguiendo instruccionesaquí, lo instalo y uso nvm
con bastante facilidad paraotrousuarios:
curl -o- https://raw.githubusercontent.com/creationix/nvm/v0.33.0/install.sh | bash
y
nvm install 4.1.2
Descubrí que debo instalarlo nvm
por separado para cada usuario. Esto significa que nvm
no se instala para el www-data
usuario cuando ejecuto el comando anterior como usuario de inicio de sesión ( ubuntu
); y, a la inversa, cambiar mi versión de Nodo para el usuario que inicia sesión ( ubuntu
) no tiene ningún efecto en el www-data
usuario.
Un detalle más importante: el www-data
usuario es especial. Este usuario tiene una funcionalidad muy restringida. Para cambiar al www-data
usuario en el shell, se requiere este comando especial:
sudo su www-data -s /bin/sh
(...E incluso el comando anterior no funcionará sin otros pasos especiales previos, que no se mencionan aquí, para permitir un indicador de shell para el www-data
usuario).
Sin embargo, cuando inicio sesión como www-data
usuario, aunque parece que puedoinstalar nvm
usando el comando mencionado anteriormente, no puedocorrer nvm
. (El error es nvm not found
.)
Al intentar superar esto, cometí el brutal error de seguir la sugerenciaaquípara intentar cambiar la versión del Nodo globalmente (es decir, para todos los usuarios) mientras está conectado como (creo, pero lo olvido ahora) el root
usuario (¡ups!):
// 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
Desafortunadamente, ejecutar el comando anterior provocó que mi sudo
acceso se interrumpiera y ahora aparentemente debo reconstruir el servidor desde cero.
Mi pregunta es: ¿Cómo puedo instalar y utilizar nvm
como usuario de Apache ( www-data
) para permitir que un servidor web ejecute un proceso de Nodo de una versión determinada y, por lo tanto, controlar a qué versión de Nodo accede el servidor web, con la comodidad de usar nvm
?
Respuesta1
Respuesta corta: no puedes.
NVM es un script de shell que solo establece variables de entorno (principalmente modificando su RUTA) para cambiar la node
versión activa. Como tales, no son persistentes más allá de la vida útil o del árbol de procesos del shell que realiza la llamada.
Si bien debería poder ejecutar su servidor web con variables de entorno particulares, no puede usar NVM para administrarlas, ya que cualquier llamada a nvm
se llamaría en un subproceso de su servidor web y se descartaría tan pronto como finalice el comando.