错误:EACCES:在 Elastic Beanstalk 上运行“npm install”时权限被拒绝

2023-12-31

我已通过 Elastic Beanstalk 预置了一个默认的干净的 Node.js 应用程序,并且有一个尝试运行的 Node.js 脚本npm install在项目目录中(/var/app/current/deploy-dist),但是会引发以下权限错误:

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

The package.json只是一个:

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

Running npm install使用 sudo 显然可以,但最好避免作为解决方案。

Setting NPM_CONFIG_PREFIX到目录~ as per npm文档建议 https://docs.npmjs.com/getting-started/fixing-npm-permissions也没有效果,问题仍然存在。

我怀疑问题在于权限不正确/tmp/.npm, 哪个是

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

这很令人困惑,正如我所期望的一个简单的npm install开箱即用。

UPDATE:项目目录不应该已经包含node_modules文件夹,但甚至删除它并运行npm install没有修复它。


我遇到了这个问题!您可以使用电子扩展 http://docs.aws.amazon.com/elasticbeanstalk/latest/dg/ebextensions.html创建一个部署后脚本 http://junkheap.net/blog/2013/05/20/elastic-beanstalk-post-deployment-scripts/这会改变的权限tmp/npm/.locks folder.

在您的 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 called 99_fix_node_permissions.sh,看起来像这样:

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

因为它就在那个post文件夹,它将在您的应用程序部署后自动运行 - 因此根据需要更改权限。

EDIT:如果您遇到权限问题whole .npm文件夹,那么您应该将配置文件的最后一行更改为:

chown -R nodejs:nodejs /tmp/.npm/
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

错误:EACCES:在 Elastic Beanstalk 上运行“npm install”时权限被拒绝 的相关文章

随机推荐