![](/img/trans.png)
[英]How do I run `npm update -g npm` on Elastic Beanstalk?
[英]How to use a private npm registry on Elastic Beanstalk?
我們有一個在 Amazon Elastic Beanstalk 上運行的 nodejs 項目,該項目使用我們使用nodejitsu 的私有 npm 注冊表托管的私有模塊。
然而,從彈性實例訪問私有 npm 注冊表並不簡單,也沒有很好的記錄。
設置此訪問權限的最佳方法是什么?
其他答案都不適合我。 經過幾個小時的頭發拉扯,我們終於弄明白了。 有效的解決方案與其他答案幾乎相同,但有一個非常小的調整。
Configuration
> Software Configuration
> Environment Properties
下設置 NPM_TOKEN 環境變量。.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 個不同的應用程序上嘗試了無數方法,但克隆和替換環境是唯一有效的方法。
因此,我們設法通過使用 npm userconfig 文件使其工作。 有關更多信息,請參閱npmrc的文檔頁面。
在將 nodejs 應用程序部署到 Elastic Beanstalk 時,root 用戶運行 npm install。 因此,您需要編寫 root 的 npm userconfig 文件,該文件位於 /tmp/.npmrc。
因此,如果您將一個名為 private_npm.config(或您選擇的任何名稱)的文件添加到您的 .ebextensions 文件夾中,其中包含所有需要的信息,那么您將很高興。 有關更多信息,請參閱自定義和配置 AWS Elastic Beanstalk 環境。
所以這是我的文件使用 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>
在項目中使用.npmrc
也可以。 例如...
.npmrc
registry=https://npm.mydomain.com
如果您包含_authToken
行,您可能希望.gitignore
此文件,但請確保不要.ebignore
它,以便它與每個部署正確捆綁。 在嘗試了一些不成功的事情后,我看到了這篇文章,這讓我意識到在項目中本地指定它是可能的。
上面的答案是朝着正確方向邁出的一步,但權限和所有者對我不起作用。 設法讓它與以下組合一起工作:
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 是一個環境變量,其中包含您的實際 npmjs 身份驗證令牌的值。
請注意,elasticbeanstalk 中的環境變量可以而且應該從 AWS 控制台 Elasticbeanstalk 軟件配置選項卡中設置。
使用現代平台,您不再需要通過.ebextensions
執行此.ebextensions
你可以簡單地在你的部署包的根目錄下創建一個.npmrc
文件,與你的package.json
一起使用以下行:
//registry.npmjs.org/:_authToken=${NPM_TOKEN}
使用此方法,您可以在 AWS 控制台中創建一個名為NPM_TOKEN
的環境變量,這樣您就不NPM_TOKEN
令牌存儲在您的存儲庫中。
結構:
~/your-app/
|-- package.json
|-- .npmrc
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.