2016-12-27 271 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

相關問題