Подтвердить что ты не робот

Как использовать частный реестр npm на Elastic Beanstalk?

У нас есть проект nodejs, работающий на Amazon Elastic Beanstalk, который использует частные модули, которые мы размещаем с помощью узловой утилиты privatejournal nodejitsu.

Однако доступ к частному реестру npm из эластичных экземпляров не был простым и плохо документирован.

Каков наилучший способ настроить этот доступ?

4b9b3361

Ответ 1

Ни один из других ответов не работал на меня. После нескольких часов вытягивания волос мы наконец поняли это. Решение, которое сработало, почти совпадает с другими ответами, но с очень незначительной настройкой.

  • Задайте переменную среды NPM_TOKEN на эластичном бобовом стебле в Configuration > 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}.

Почему нужны фигурные скобки? Без понятия. В языках оболочки /POSIX ${VAR} и $VAR являются синонимами. Однако в файлах .npmrc (на момент написания этой статьи) переменные без фигурных скобок не распознаются как переменные, поэтому npm должен использовать несколько иной стандарт синтаксиса.

UPDATE

Кроме того, это работало для нас только в новых или клонированных средах. По какой-либо причине среды, которые не были инициализированы с помощью /tmp/.npmrc, не будут читаться в будущих развертываниях перед запуском npm install --production. Мы пробовали бесчисленные методы в 4 разных приложениях, но клонирование и замена среды - единственный метод, который сработал.

Ответ 2

Итак, нам удалось получить эту работу, используя файл npm userconfig. Для получения дополнительной информации см. Страницу doc для npmrc.

Когда приложение nodejs развертывается в Elastic Beanstalk, пользователь root запускает npm install. Поэтому вам нужно будет написать файл npm userconfig root, который находится в /tmp/.npmrc.

Итак, если вы добавите файл private_npm.config(или любое другое имя, которое вы выбрали) в свою папку .ebextensions со всей необходимой информацией, вам будет хорошо идти. Для получения дополнительной информации см. Настройка и настройка 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>

Ответ 3

Ответьте на июнь 2016 года.

В моем случае мне не нужно было добавлять какой-либо .ebextension, мне просто нужно было настроить env var: NPM_TOKEN, выглядит как эластичный beanstalk, тихо добавил новую замечательную функцию, в которой они используют .npmrc, который ищет NPM_TOKEN для случаев где npm install требует приватов.

Ответ 4

Ответ выше как шаг в правильном направлении, но разрешения и владелец не работают для меня. Удалось заставить его работать со следующей комбинацией:

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>

Ответ 5

Поместите ниже в свой .ebextensions/app.config.

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

Где NPM_TOKEN - это переменная среды со значением вашего фактического токена npmjs auth.

Обратите внимание, что переменные среды внутри эластичного слоя могут и должны быть установлены из консоли консоли AVS консоли Elasticbeanstalk.

Конфигурация AWS Elasticbeanstalk

Ответ 6

Использование .npmrc в рамках проекта также работает. Например...

.npmrc

registry=https://npm.mydomain.com

Вы захотите .gitignore этот файл, так как он имеет _authToken но убедитесь, что вы не используете .ebignore чтобы он правильно связывался с каждым развертыванием. После нескольких неудачных попыток я наткнулся на этот пост, который заставил меня понять, что локально указать его в проекте возможно.