如何在Elastic Beanstalk上使用私有npm注册表?

时间:2014-07-28 10:18:52

标签: node.js npm elastic-beanstalk nodejitsu

我们在Amazon Elastic Beanstalk上运行了一个nodejs项目,该项目使用我们使用nodejitsu's private npm registry托管的私有模块。

然而,从弹性实例访问私有npm注册表并不简单,也没有很好地记录。

设置此访问权限的最佳方式是什么?

7 个答案:

答案 0 :(得分:17)

其他答案都没有对我有用。经过几个小时的拔毛,我们终于明白了。有效的解决方案几乎与其他答案相同,但调整很小。

  1. Configuration>下的Elastic Beanstalk上设置NPM_TOKEN环境变量Software Configuration> Environment Properties
  2. 创建.ebextensions/npm.config文件。 (名称不一定是' npm'。)
  3. 将此内容放入文件中:

    files:
      "/tmp/.npmrc":
        content: |
          //registry.npmjs.org/:_authToken=${NPM_TOKEN}
    
  4. 请注意,它使用的是${NPM_TOKEN},而不是$NPM_TOKEN。这至关重要。使用$NPM_TOKEN工作;它必须有花括号:${NPM_TOKEN}

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

    <强>更新

    此外,这对我们在新环境或克隆环境中有效。无论出于何种原因,未使用/tmp/.npmrc初始化的环境在运行npm install --production之前的任何未来部署中都不会读取它。我们已经在4个不同的应用上尝试了无数的方法,但克隆和替换环境是唯一有效的方法。

答案 1 :(得分:10)

因此,我们设法通过使用npm userconfig文件来实现这一点。有关详细信息,请参阅doc page for npmrc

将nodejs应用程序部署到Elastic Beanstalk时,root用户运行npm install。因此,您需要编写root的npm userconfig文件,该文件位于/tmp/.npmrc。

因此,如果您将名为private_npm.config的文件(或您选择的任何名称)添加到.ebextensions文件夹中,并提供所需的所有信息,那么您将很高兴。有关详细信息,请参阅Customizing and Configuring AWS Elastic Beanstalk Environments

所以这就是我的文件看起来像使用nodejitsu私有注册表。

.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>

答案 2 :(得分:3)

按照2016年6月的答案。

在我的情况下,我不需要添加任何.ebextension,我只需要设置env var:NPM_TOKEN,看起来像弹性beanstalk默默地添加了一个新的强大功能,他们使用.npmrc查找NPM_TOKEN的案例其中npm install需要私有。

答案 3 :(得分:2)

上面的答案是朝着正确的方向迈出的一步,但权限和所有者对我没有用。管理以使用以下组合:

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>

答案 4 :(得分:2)

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

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

其中NPM_TOKEN是一个环境变量,其值为您实际的npmjs身份验证令牌。

请注意,elasticbeanstalk中的环境变量可以并且应该在AWS控制台Elasticbeanstalk软件配置选项卡中设置。

AWS Elasticbeanstalk Configuration

答案 5 :(得分:0)

在项目中使用.npmrc也可以。例如...

.npmrc

registry=https://npm.mydomain.com
//packages.qintel.com/npm/:_authToken="..."

由于该文件具有.gitignore,因此您将要_authToken,但是请确保您没有.ebignore,以便正确地将其与每个部署捆绑在一起。在尝试了一些失败之后,我遇到了this post,这使我意识到可以在项目中本地指定它。

答案 6 :(得分:0)

在现代平台上,您不再需要通过.ebextensions

执行此操作

您只需在您的.npmrc旁边的部署包的根目录下创建一个package.json文件,并添加以下行:

//registry.npmjs.org/:_authToken=${NPM_TOKEN}

使用此方法,您可以在AWS控制台中创建一个名为NPM_TOKEN的环境变量,因此您不必将令牌存储在存储库中。

结构:

~/your-app/
|-- package.json
|-- .npmrc