2016-12-27 277 views
8

我通过Elastic Beanstalk配置了一个默认的干净node.js应用程序,并且有一个node.js脚本尝试在项目目录中运行npm install/var/app/current/deploy-dist ),但是,下面的权限错误被抛出:错误:在Elastic Beanstalk上运行`npm install`时EACCES:权限被拒绝

npm WARN locking Error: EACCES: permission denied, open '/tmp/.npm/_locks/staging-f212e8d64a01707f.lock' 
npm WARN locking  at Error (native) 
npm WARN locking /tmp/.npm/_locks/staging-f212e8d64a01707f.lock failed { Error: EACCES: permission denied, open '/tmp/.npm/_locks/staging-f212e8d64a01707f.lock' 
npm WARN locking  at Error (native) 
npm WARN locking errno: -13, 
npm WARN locking code: 'EACCES', 
npm WARN locking syscall: 'open', 
npm WARN locking path: '/tmp/.npm/_locks/staging-f212e8d64a01707f.lock' } 
npm WARN deploy-dist No description 
npm WARN deploy-dist No repository field. 
npm WARN deploy-dist No license field. 
npm ERR! Linux 4.4.35-33.55.amzn1.x86_64 
npm ERR! argv "/opt/elasticbeanstalk/node-install/node-v6.9.1-linux-x64/bin/node" "/opt/elasticbeanstalk/node-install/node-v6.9.1-linux-x64/bin/npm" "install" 
npm ERR! node v6.9.1 
npm ERR! npm v3.10.8 
npm ERR! path /tmp/.npm/_locks/staging-f212e8d64a01707f.lock 
npm ERR! code EACCES 
npm ERR! errno -13 
npm ERR! syscall open 

npm ERR! Error: EACCES: permission denied, open '/tmp/.npm/_locks/staging-f212e8d64a01707f.lock' 
npm ERR!  at Error (native) 
npm ERR! { Error: EACCES: permission denied, open '/tmp/.npm/_locks/staging-f212e8d64a01707f.lock' 
npm ERR!  at Error (native) 
npm ERR! errno: -13, 
npm ERR! code: 'EACCES', 
npm ERR! syscall: 'open', 
npm ERR! path: '/tmp/.npm/_locks/staging-f212e8d64a01707f.lock' } 
npm ERR! 
npm ERR! Please try running this command again as root/Administrator. 

npm ERR! Please include the following file with any support request: 
npm ERR!  /var/app/current/deploy-dist/npm-debug.log 

package.json只是一个:

{ 
    "dependencies": { 
    "node-fetch": "^1.3.3" 
    } 
} 

运行npm install使用sudo明显的作品,但最好避免,因为 一个办法。

NPM_CONFIG_PREFIX设置为目录~根据npm docs suggestion也没有工作,问题仍然存在。

我怀疑问题出在/tmp/.npm不正确的权限,这是

drwxr-xr-x 114 root root 4.0K Dec 27 17:04 .npm 

这是混乱的,如我所料简单npm install工作开箱。

UPDATE:不该该项目目录已包含node_modules文件夹,但即使取出并运行npm install不能解决问题。

+0

有人似乎具有完全相同的问题在AWS论坛以及现在:https://forums.aws.amazon.com/thread.jspa?messageID=758699&tstart=0 – Sbbs

+0

你是如何在这个Elastic Beanstalk实例中用sudo运行“npm install”的?这不是这样,但我可以用这个临时解决方法来测试我的应用程序。 – sergi

+0

@sergi'sudo /opt/elasticbeanstalk/node-install/node-v6.9.1-linux-x64/bin/node /opt/elasticbeanstalk/node-install/node-v6.9.1-linux-x64/bin/npm install ' – Sbbs

回答

4

我有这个问题!您可以使用ebextensions创建一个更改tmp/npm/.locks文件夹权限的post-deploy script

在您的node.js项目中,如果您还没有一个文件夹,请创建一个.ebextensions文件夹。然后,添加一个新的配置文件,例如00_create_postdeploy_script.config,具有以下YAML:

files: 
    "/opt/elasticbeanstalk/hooks/appdeploy/post/99_fix_node_permissions.sh": 
    mode: "000755" 
    owner: root 
    group: root 
    content: | 
     #!/usr/bin/env bash 
     chown -R nodejs:nodejs /tmp/.npm/_locks/ 

当你部署,这将创造/opt/elasticbeanstalk/hooks/appdeploy/post一个脚本调用99_fix_node_permissions.sh,它看起来像这样:

#!/usr/bin/env bash 
chown -R nodejs:nodejs /tmp/.npm/_locks/ 

因为它是在post文件夹中,这将是应用程序部署完成后自动运行 - 并根据需要更改权限。

编辑:如果您有与整个.npm文件夹的权限麻烦,那么你应该在配置文件的最后一行更改为:

chown -R nodejs:nodejs /tmp/.npm/ 
+0

稍微修正了您的答案,以完全解决问题(chwon'/ tmp/.npm'而不是'/ tmp/.npm/_locks') – Sbbs

+0

我不确定这里提供的编辑工作方式如何,但我已更新答案! – hsriskantha

1

我在过去有过这个问题,在我的情况下清理缓存解决了我的问题。 请试试

npm cache clean 

希望它有帮助。

+1

遗憾的是没有解决。 – Sbbs

相关问题