我已经通过Elastic Beanstalk配置了一个默认的clean 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
package.json
只是一个:
{
"dependencies": {
"node-fetch": "^1.3.3"
}
}
使用sudo运行npm install
显然有效,但最好避免作为解决方案。
根据NPM_CONFIG_PREFIX
将~
设置为npm
docs suggestion上的目录也不起作用,问题仍然存在。
我怀疑问题在于/tmp/.npm
的错误权限,这是
drwxr-xr-x 114 root root 4.0K Dec 27 17:04 .npm
这是令人困惑的,因为我期望一个简单的npm install
开箱即用。
更新:不应该项目目录已经包含node_modules
文件夹,但即使删除它并运行npm install
也无法修复它。
我有这个问题!您可以使用ebextensions创建一个更改post-deploy script文件夹权限的tmp/npm/.locks
。
在node.js项目中,如果还没有.ebextensions
文件夹,请创建一个00_create_postdeploy_script.config
文件夹。然后,添加一个新的配置文件,例如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/
,以下是yaml:
/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/
文件夹的权限有问题,那么你应该将配置文件的最后一行更改为:
npm cache clean
我过去遇到过这个问题,在我的情况下清理缓存修复了我的问题。请试试这个
qazxswpoi
希望能帮助到你。