Bcrypt Elastic beanstalk nodejs 部署

Posted

技术标签:

【中文标题】Bcrypt Elastic beanstalk nodejs 部署【英文标题】:Bcrypt Elastic beanstalk nodejs deploy 【发布时间】:2018-06-06 22:26:35 【问题描述】:

我正在尝试将带有 codeship 的 nodejs 后端部署到弹性 beanstalk。但每次我收到以下错误:

bcrypt@1.0.3 install /tmp/deployment/application/node_modules/bcrypt
node-pre-gyp install --fallback-to-build

module.js:471
throw err;
^

Error: Cannot find module '../'
at Function.Module._resolveFilename (module.js:469:15)
at Function.Module._load (module.js:417:25)
at Module.require (module.js:497:17)
at require (internal/module.js:20:19)
at Object.<anonymous> (/tmp/deployment/application/node_modules/.bin/node-pre-gyp:15:20)
at Module._compile (module.js:570:32)
at Object.Module._extensions..js (module.js:579:10)
at Module.load (module.js:487:32)
at tryModuleLoad (module.js:446:12)
at Function.Module._load (module.js:438:3)

npm ERR! Linux 4.9.62-21.56.amzn1.x86_64
npm ERR! argv "/opt/elasticbeanstalk/node-install/node-v6.11.5-linux-x64/bin/node" "/opt/elasticbeanstalk/node-install/node-v6.11.5-linux-x64/bin/npm" "--production" "rebuild"
npm ERR! node v6.11.5
npm ERR! npm v3.10.10
npm ERR! code ELIFECYCLE
npm ERR! bcrypt@1.0.3 install: `node-pre-gyp install --fallback-to-build`
npm ERR! Exit status 1
npm ERR! 
npm ERR! Failed at the bcrypt@1.0.3 install script 'node-pre-gyp install --fallback-to-build'.
npm ERR! Make sure you have the latest version of node.js and npm installed.
npm ERR! If you do, this is most likely a problem with the bcrypt package,
npm ERR! not with npm itself.
npm ERR! Tell the author that this fails on your system:
npm ERR! node-pre-gyp install --fallback-to-build
npm ERR! You can get information on how to open an issue for this project with:
npm ERR! npm bugs bcrypt
npm ERR! Or if that isn't available, you can get their info via:
npm ERR! npm owner ls bcrypt
npm ERR! There is likely additional logging output above.

有人知道怎么解决吗?几天来一直在尝试修复它,非常感谢您的帮助!

【问题讨论】:

你可以看到github问题线程-github.com/kelektiv/node.bcrypt.js/issues/509。看来很多人都和你有同样的问题。 【参考方案1】:

查看此 GitHub 评论:https://github.com/kelektiv/node.bcrypt.js/issues/509#issuecomment-313693838

TL;DR:作为一种解决方法,在运行 npm install 之前运行 npm install bcrypt

【讨论】:

【参考方案2】:

我创建了一个.npmrc 文件:

unsafe-perm=true

似乎已经做到了。

【讨论】:

这与上面的答案相同,没有增加任何价值。【参考方案3】:

尝试使用bcrypt.js 模块而不是bcrypt,这是一个更新/最新的npm 模块。 运行npm install bcryptjs 然后npm install

【讨论】:

应该是 npm install bcryptjs。不是 npm install bcrypt.js【参考方案4】:

在您的 package.json 中添加 bcryptjs 依赖项,然后 npm install 应该可以处理所有依赖项。

【讨论】:

【参考方案5】:

首先确保您没有上传节点模块文件夹并且 npm install 命令正在实例上运行。

https://github.com/kelektiv/node.bcrypt.js/wiki/Installation-Instructions

这个问题与node-pre-gyp有关。 bcrypt 的一个依赖。

对于 AWS Elastic Beanstalk 部署到运行 Node 8.x 的 Elastic Beanstalk 时,node-gyp 没有足够的权限写入 tmp 目录。 bcrypt 不会安装,应用程序部署将失败。

解决方法是将 .npmrc 文件添加到项目的根目录,这将强制 node-gyp 以根用户身份运行并允许安装完成。 .npmrc 的文件内容:

# Force npm to run node-gyp also as root, preventing permission denied errors in AWS with npm@5 or @6
unsafe-perm=true

另一种选择(也许更正确的方法)是使用代码制作 .ebextensions 文件:

.ebextensions:00_change_npm_permissions.config:

  "/opt/elasticbeanstalk/hooks/appdeploy/post/00_set_tmp_permissions.sh":
    mode: "000755"
    owner: root
    group: root
    content: |
      #!/usr/bin/env bash
      chown -R nodejs:nodejs /tmp/.npm

这将为您提供足够的权限来运行 node-gyp

【讨论】:

我有点惊讶于其他答案如何获得更多支持,因为它并不真正适用于 Elastic Beanstalk 部署流程。 @Sai Kassam 的答案实际上是最接近正确答案的答案,使用 .npmrc 文件可以解决这个问题,并允许 EBS 的部署流程实际安装 bcrypt。 @bytesbase,作为您的问题的解决方案可能值得探索,如果它有效,请将@sai Kassam 的答案标记为正确答案,以便其他面临完全相同问题的人可以从中受益。

以上是关于Bcrypt Elastic beanstalk nodejs 部署的主要内容,如果未能解决你的问题,请参考以下文章

将 AMI 映像用于 Elastic Beanstalk

elastic-beanstalk http请求超时

在 AWS Elastic Beanstalk 和 EKS 上部署了一个 laravel 应用程序 相同的数据库 RDS 为啥在 Elastic Beanstalk 中获得快速响应

AWS Elastic Beanstalk CLI 安装错误

text codepipeline + Elastic Beanstalk

text AWS Elastic Beanstalk