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上失败
- 在node.js中将http转发到https使用EBS和ELB环境表示应用程序
- 带有node.js的Elastic Beanstalk启动错误
- 在AWS弹性beanstalk上产生casperjs ENOENT错误
- AWS – 通过npm install来安装bower组件
- AWS beanstalk nodejs多核
- Amazon Elastic Beanstalk .config for node 64bit&env
- 存储在AWS EB环境variables中的JSON将不带引号地进行检索
- Elastic Beanstalk Node.Js需要PM2或Forever
- AWS Elastic Beanstalk自定义静态文件夹403错误页面