2016-12-27 6 views
8

Я предоставил по умолчанию очищенное приложение node.js через Elastic Beanstalk и скрипт node.js пытался запустить npm install внутри каталога проекта (/var/app/current/deploy-dist), однако, выбрасывается следующее сообщение об ошибке разрешение:Ошибка: EACCES: разрешено отклонение при запуске `npm install` на Elastic Beanstalk

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 с Судо, очевидно, работает, но предпочтительно избегать, решение.

Установка 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

Как вы запустили «npm install» с sudo в этом экземпляре Elastic Beanstalk? Это не так, но я смогу проверить свое приложение с помощью этого временного решения. – 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 для создания post-deploy script, который изменяет разрешения папки tmp/npm/.locks.

В проекте 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 папке, это будет запускаться автоматически после развертывания вашего приложения - и, следовательно, изменять разрешения по мере необходимости.

EDIT: Если у вас возникли проблемы с разрешениями всей.npm папку , то вы должны изменить последнюю строку файла конфигурации в:

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

немного скорректировал ваш ответ, чтобы полностью решить проблему (chwon '/ tmp/.npm', а не просто'/tmp/.npm/_locks') – Sbbs

+0

Я не уверен, как здесь работают исправления, но я обновил ответ! – hsriskantha

1

У меня была эта проблема в прошлом, и в моем случае очистка кеша исправила мою проблему. Пожалуйста, попробуйте это

npm cache clean 

Надеется, что это помогает.

+1

Не исправил это, к сожалению. – Sbbs