【问题标题】:Elastic Beanstalk deployment failure, permission denied, mkdirElastic Beanstalk 部署失败,权限被拒绝,mkdir
【发布时间】:2018-10-01 17:43:39
【问题描述】:

我正在尝试将 GRPC 依赖项添加到节点弹性 beanstalk 应用程序中,但我的所有部署都失败了。一旦我从我的package.json 中删除了 GRPC 依赖项,我的部署就会工作。

错误是

ERROR: Failed to run npm install.  
> grpc@1.10.1 install /tmp/deployment/application/node_modules/grpc
> node-pre-gyp install --fallback-to-build --library=static_library

node-pre-gyp ERR! Pre-built binaries not installable for grpc@1.10.1 
and node@8.9.3 (node-v57 ABI, glibc) (falling back to source compile 
with node-gyp) 
node-pre-gyp ERR! Hit error EACCES: permission denied, mkdir 
'/tmp/deployment/application/node_modules/grpc/src/node' 
gyp ERR! configure error 
gyp ERR! stack Error: EACCES: permission denied

我在另一个节点应用程序上遇到了这个问题,并且能够通过运行 npm --save-dev eb-fix-npm 解决它,但它不适用于这个应用程序。我有时也会收到类似“无法创建符号链接,文件已存在(释义)”的错误。

我也设置了此文件以尝试解决此问题。

 files:
   "/opt/elasticbeanstalk/hooks/appdeploy/pre/50npm.sh" :
     mode: "000775"
     owner: root
     group: root
     content: |
       #!/bin/bash          
       function error_exit

       {
         eventHelper.py --msg "$1" --severity ERROR
         exit $2
       }

       export HOME=/home/ec2-user

       OUT=$(/opt/elasticbeanstalk/containerfiles/ebnode.py --action npm-install 2>&1) || error_exit "Failed to run npm install.  $OUT" $?
       echo $OUT

感谢您的帮助

【问题讨论】:

    标签: node.js amazon-web-services amazon-ec2 amazon-elastic-beanstalk grpc


    【解决方案1】:

    我通过添加.npmrc 文件解决了这个问题

    unsafe-perm=true
    

    但是将.npmrc 添加到根应用程序文件夹不是可行的方法。您必须在 EB 配置文件中指定它。查看https://stackoverflow.com/a/24993093

    【讨论】:

      【解决方案2】:

      将名为 .npmrc 的文件添加到包含内容的应用程序中:

      unsafe-perm=true
      

      现在在将其推送到 ElasticBeanStalk 之前使用以下命令:

      git add .npmrc
      git commit -m"EB issue fix"
      

      现在部署您的代码。它应该可以工作。

      【讨论】:

        【解决方案3】:

        适用于在您的项目中使用 bcrypt 库的任何人。

        如果您尝试使用 Elastic Beanstalk 部署代码,您将收到此错误。

        只需删除bcrypt 并开始使用bycryptjs

        为此我头疼了 2 周。

        此外,将bcrypt 降级到 3.0.0 也无济于事。

        【讨论】:

        • 这不是完整的图片。您正在将本机实现换成纯粹用 JS 编写的实现,这将慢约 30%。人们只有在理解切换到纯 JS 库的含义时才应该这样做。
        • 你建议什么替代方案? @Aron
        • 感谢上帝的发现
        【解决方案4】:

        在我的情况下,.ebextensions/00_dir_permission.config 的解决方案不起作用(仍然给了我错误),但在 .npmrc 文件中使用 unsafe-perm=true 的解决方案可以。见https://stackoverflow.com/a/46001517/769726

        PS:在 Node.js 上运行版本:8.11.4 on 64bit Amazon Linux/4.5.4

        【讨论】:

          【解决方案5】:

          我可以通过以下文件解决这个问题 --> .ebextensions/00_dir_permission.config。希望这对其他人有帮助

          files:
            "/opt/elasticbeanstalk/hooks/appdeploy/pre/00_set_tmp_permissions.sh":
              mode: "000755"
              owner: root
              group: root
              content: |
                #!/usr/bin/env bash
                chown -R ec2-user /tmp
                chown -R $USER:$(id -gn $USER) /tmp/.config
                chown -R nodejs:nodejs /tmp/.npm
          

          【讨论】:

          • 这到底是做什么的?
          • 我试过了,但我似乎没有nodejs 用户
          猜你喜欢
          • 2021-11-28
          • 2021-07-25
          • 2022-01-22
          • 2013-04-28
          • 2020-11-03
          • 2020-09-03
          • 2021-07-27
          • 2021-02-04
          • 2016-08-24
          相关资源
          最近更新 更多