node.js - nodejs - npm install elastic beanstalk
Beanstalk: implementación de Node.js-node-gyp falla debido a permiso denegado (3)
Solución
La solución es agregar el archivo
.npmrc
a la aplicación con el contenido:
# Force npm to run node-gyp also as root, preventing permission denied errors in AWS with npm@5
unsafe-perm=true
(O configurar npm de otra manera. (Aunque establecer
npm_config_unsafe_perm=true
en
/opt/elasticbeanstalk/env.vars
no funcionó para mí).
Explicación
npm install
usuario raíz ejecuta la
npm install
pero el proceso por defecto del
node-gyp
que activa para algunos paquetes lo ejecuta el usuario predeterminado
ec2-user
.
Este usuario carece de acceso al directorio
/tmp/deployment/application/node_modules/
creado por la instalación de npm run y propiedad de root.
(Y es probable que también carezca de acceso a
/tmp/.npm
y
/tmp/.config
creados por el mismo.) Al habilitar
unsafe-perm
, forzamos a npm a ejecutar node-gyp también como root, evitando el problema.
(Personalmente, preferiría ejecutar todo como
ec2-user
lugar de
root
pero supongo que estaría más involucrado :-))
Créditos
irreal0 me ha señalado la solución
Preguntas relacionadas
La implementación de una aplicación Node.js (Nodo 6, npm 5) en Beanstalk falla con:
gyp ERR! Error de pila: EACCES: permiso denegado, mkdir ''/ tmp / despliegue / application / node_modules / heapdump / build''
aunque el error no es específico del paquete, cualquier llamada de nodo-gyp falla.
El evento ERROR en la consola de AWS dice:
[Instancia: i-12345] Error en el comando en la instancia. Código de retorno: 1 Salida: (TRUNCATED) ... / opt / elasticbeanstalk / containerfiles / ebnode.py ", línea 180, en npm_install raise e subprocess.CalledProcessError: Comando ''['' / opt / elasticbeanstalk / node-install / node- v6.10.0-linux-x64 / bin / npm '','' --production '','' install '']'' devolvió un estado de salida distinto de cero 1. Error en el enlace /opt/elasticbeanstalk/hooks/appdeploy/pre/50npm.sh. Para obtener más detalles, consulte /var/log/eb-activity.log con la consola o EB CLI.
y
eb-activity.log
contenía el error npm mencionado anteriormente.
La aplicación se implementó manualmente cargando un archivo .zip que no incluía
node_modules
.
Es decir, no se implementó a través de la herramienta de línea de comandos
eb
.
Lo arreglé con la configuración aws, por ejemplo. t2.micro => t2.small o uno más grande. ingrese la descripción del enlace aquí
Necesitamos hacer 2 cosas aquí.
Primero: Si aún no tiene una carpeta .ebextensions en la raíz de su proyecto, créela. Luego cree un archivo en .ebextensions llamado 01_fix_permissions.config.
Luego, en segundo lugar,
set -xe
PROXY
set -xe
y
/opt/elasticbeanstalk/bin/healthd-track-pidfile --proxy nginx
files:
"/opt/elasticbeanstalk/hooks/appdeploy/pre/49_change_permissions.sh":
mode: "000755"
owner: root
group: root
content: |
#!/usr/bin/env bash
sudo chown -R ec2-user:ec2-user tmp/
set -xe
/opt/elasticbeanstalk/bin/healthd-track-pidfile --proxy nginx