簡體   English   中英

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

[英]How to use a private npm registry on Elastic Beanstalk?

我們有一個在 Amazon Elastic Beanstalk 上運行的 nodejs 項目,該項目使用我們使用nodejitsu 的私有 npm 注冊表托管的私有模塊。

然而,從彈性實例訪問私有 npm 注冊表並不簡單,也沒有很好的記錄。

設置此訪問權限的最佳方法是什么?

其他答案都不適合我。 經過幾個小時的頭發拉扯,我們終於弄明白了。 有效的解決方案與其他答案幾乎相同,但有一個非常小的調整。

  1. 在 Elastic Beanstalk 上的Configuration > Software Configuration > Environment Properties下設置 NPM_TOKEN 環境變量。
  2. 創建一個.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文件中(在撰寫本文時),沒有大括號的變量不會被識別為變量,因此 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 軟件配置選項卡中設置。

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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM