如何在Elastic Beanstalk上使用私有的npmregistry?

我们在Amazon Elastic Beanstalk上运行了一个nodejs项目,该项目使用我们使用nodejitsu的私有npmregistry托pipe的私有模块。

然而,从弹性实例访问私有的npmregistry并不是直截了当的,没有很好的logging。

什么是最好的方式来build立这个访问?

所以,我们设法通过使用npm userconfig文件来实现这个工作。 有关更多信息,请参阅npmrc的文档页面 。

当一个nodejs应用程序被部署到Elastic Beanstalk时,root用户运行npm install。 所以你需要编写根目录的npm userconfig文件,它位于/tmp/.npmrc。

所以,如果您将一个名为private_npm.config(或任何您select的名称)的文件添加到您的.ebextensions文件夹并提供所需的所有信息,那么您将很好。 有关更多信息,请参阅自定义和configurationAWS Elastic Beanstalk环境 。

所以这里是我的文件看起来像使用nodejitsu私人registry。

.ebextensions / private_npm.config:

files: #this is the npm user config file path "/tmp/.npmrc": mode: "000777" owner: root group: root content: | _auth = <MY_AUTH_KEY> always-auth = true registry = <PATH_TO_MY_REGISTRY> strict-ssl = true email = <NPM_USER_EMAIL> 

没有其他答案为我工作。 经过几个小时的拉发,我们终于搞清楚了。 工作的解决scheme几乎与其他答案相同,但只是一个很小的调整。

  1. Configuration > Software Configuration > Environment Properties下,在Elastic Beanstalk上设置NPM_TOKEN环境variables。
  2. 创build一个.ebextensions/npm.config文件。 (名字不一定是'npm'。)
  3. 把这个内容放到文件中:

     files: "/tmp/.npmrc": content: | //registry.npmjs.org/:_authToken=${NPM_TOKEN} 

请注意,它使用${NPM_TOKEN}而不是$NPM_TOKEN 。 这是至关重要的 。 使用$NPM_TOKEN将不起作用。 它必须有大括号: ${NPM_TOKEN}

为什么需要花括号? 不知道。 在shell / POSIX语言中, ${VAR}$VAR是同义词。 但是,在.npmrc文件中(在编写本文时),没有大括号的variables不会被识别为variables,所以npm必须使用稍微不同的语法标准。

UPDATE

此外,这只适用于新的或克隆的环境。 无论出于何种原因,在运行npm install --production之前,未使用/tmp/.npmrc进行初始化的/tmp/.npmrc将不会在以后的任何部署中读取。 我们已经尝试了4种不同应用程序的无数方法,但克隆和replace环境是唯一有效的方法。

根据2016年6月的答案。

在我的情况下,我不需要添加任何.ebextension,我只需要设置env var:NPM_TOKEN,看起来像弹性beanstalk默默地添加了一个新的强大的function,他们使用.npmrc寻找NPM_TOKEN npm安装需要私人。

上面的答案是朝着正确的方向迈出的一步,但是权限和所有者并不适合我。 设法使它与以下组合一起工作:

 files: #this is the npm user config file path "/tmp/.npmrc": mode: "000600" owner: nodejs group: nodejs content: | _auth = <MY_AUTH_KEY> always-auth = true registry = <PATH_TO_MY_REGISTRY> strict-ssl = true email = <NPM_USER_EMAIL> 

将下面的内容放在.ebextensions / app.config中。

 files: "/tmp/.npmrc": mode: "000777" owner: root group: root content: | //registry.npmjs.org/:_authToken=$NPM_TOKEN 

其中NPM_TOKEN是一个环境variables,其中包含您的实际npmjs身份validation令牌的值。

请注意,elasticbeanstalk中的环境variables可以并应该从AWS控制台Elasticbeanstalk软件configuration选项卡中进行设置。

AWS Elasticbeanstalkconfiguration