Beanstalk:Node.js部署 – 由于权限被拒绝,node-gyp失败

Node.js应用程序(节点6,npm 5)到Beanstalk的部署失败:

gyp ERR! 堆栈错误:EACCES:权限被拒绝,mkdir'/ tmp / deployment / application / node_modules / heapdump / build'

尽pipe错误不是包特定的,但任何node-gyp调用都会失败。

AWS控制台中的ERROR事件显示如下:

[Instance:i-12345]命令在实例上失败。 返回代码:1输出:(截断)… / opt / elasticbeanstalk / containerfiles / ebnode.py“,第180行,在npm_install中引发subprocess.CalledProcessError:命令'['/ opt / elasticbeanstalk / node-install / v6.10.0-linux-x64 / bin / npm','–production','install']'返回非零退出状态1.钩子/opt/elasticbeanstalk/hooks/appdeploy/pre/50npm.sh失败。更详细的信息,请使用控制台或EB CLI检查/var/log/eb-activity.log。

eb-activity.log包含前面提到的npm错误。

该应用程序是通过上传不包含node_modules的.zip文件手动部署的。 即它不是通过eb命令行工具部署的。

解决scheme是将文件.npmrc添加到具有以下内容的应用程序:

 # Force npm to run node-gyp also as root, preventing permission denied errors in AWS with npm@5 unsafe-perm=true 

(或以任何其他方式configurationnpm(尽pipe在/opt/elasticbeanstalk/env.vars设置npm_config_unsafe_perm=true对我不起作用)。

说明

npm install由root用户运行,但是它为某些软件包触发的node-gyp进程由缺省用户ec2-user 。 此用户无法访问由npm安装运行创build的/tmp/deployment/application/node_modules/目录,并由root拥有。 (而且它也可能缺less对/tmp/.npm/tmp/.config访问权限。)通过启用unsafe-perm我们强制npm以root身份运行node-gyp,避免了这个问题。

(就我个人而言,我宁愿运行所有的ec2-user而不是root但我想这将是更多的参与:-))

积分

unreal0已经指出了我的解决scheme

相关问题

  • 由于目录权限,Node.js部署在Amazon Elastic Beanstalk上失败