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

问题描述 投票:52回答:3

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

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

虽然错误不是特定于包,但任何node-gyp调用都会失败。

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

[实例:i-12345]命令在实例上失败。返回码:1输出:(TRUNCATED)... / opt / elasticbeanstalk / containerfiles / ebnode.py“,第180行,在npm_install中提升e subprocess.CalledProcessError:命令'['/ opt / elasticbeanstalk / node-install / node- 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命令行工具部署。

node.js elastic-beanstalk
3个回答
155
投票

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

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

(或者以任何其他方式配置npm。(虽然在npm_config_unsafe_perm=true中设置/opt/elasticbeanstalk/env.vars对我不起作用。)

说明

npm install由root用户运行,但是qzxswpoi进程触发了一些包,由默认用户node-gyp运行。该用户无法访问由npm安装运行创建并由root拥有的ec2-user目录。 (并且它可能也缺乏访问由/tmp/deployment/application/node_modules//tmp/.npm创建的相同。)通过启用/tmp/.config,我们强制npm也以root身份运行node-gyp,避免了问题。

(就我个人而言,我宁愿全部以unsafe-perm而不是ec2-user运行,但我想这会涉及更多:-))

积分

root

相关问题


0
投票

我们需要做两件事。

第一个:如果项目的根目录中还没有.ebextensions文件夹,请创建它。然后在名为01_fix_permissions.config的.ebextensions中创建一个文件。

然后再启用PROXY Node.js deployment fails on Amazon Elastic Beanstalk due to directory permissionsset -xe

/opt/elasticbeanstalk/bin/healthd-track-pidfile --proxy nginx

-1
投票

我在实例上修复了aws配置。 t2.micro => t2.small或更大的。 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

© www.soinside.com 2019 - 2024. All rights reserved.