我们在Amazon Elastic Beanstalk上运行了一个nodejs项目,该项目使用我们使用nodejitsu's private npm registry托管的私有模块。
然而,从弹性实例访问私有npm注册表并不简单,也没有很好地记录。
设置此访问权限的最佳方式是什么?
答案 0 :(得分:17)
其他答案都没有对我有用。经过几个小时的拔毛,我们终于明白了。有效的解决方案几乎与其他答案相同,但调整很小。
Configuration
>下的Elastic Beanstalk上设置NPM_TOKEN环境变量Software Configuration
> Environment Properties
。.ebextensions/npm.config
文件。 (名称不一定是' npm'。) 将此内容放入文件中:
files:
"/tmp/.npmrc":
content: |
//registry.npmjs.org/:_authToken=${NPM_TOKEN}
请注意,它使用的是${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软件配置选项卡中设置。
答案 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