run nodejs node elastic ec2 aws node.js elastic-beanstalk

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 .



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