Подтвердить что ты не робот

Ошибка: EACCES: разрешение отклонено при запуске `npm install` на Elastic Beanstalk

Я предоставил по умолчанию чистый node.js-приложение через Elastic Beanstalk и попробовал node.js script пытаться запустить 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"
  }
}

Выполнение npm install с помощью sudo, очевидно, работает, но предпочтительнее избегать в качестве решения.

Настройка NPM_CONFIG_PREFIX в каталог с ~ в соответствии с npm предложение docs также не работало, и проблема сохраняется.

Я подозреваю, что проблема заключается в неправильных разрешениях для /tmp/.npm, которые

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

Это сбивает с толку, поскольку я ожидал, что простой npm install будет работать из коробки.

UPDATE:. Не следует, чтобы каталог проекта уже содержал папку node_modules, но даже удаление и запуск npm install не исправляли.

4b9b3361

Ответ 1

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

РЕДАКТИРОВАТЬ: Если у вас возникли проблемы с разрешениями всей папки .npm, то вам следует изменить последнюю строку файла конфигурации на:

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

Ответ 2

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

npm cache clean

Надеюсь, что это поможет.

Ответ 3

Существует альтернативный js only npm модуль, который называется просто sass. Кажется, работает нормально, но не так актуально, как бездарность.