Как использовать частный реестр npm на Elastic Beanstalk?
У нас есть проект nodejs, работающий на Amazon Elastic Beanstalk, который использует частные модули, которые мы размещаем с помощью узловой утилиты privatejournal nodejitsu.
Однако доступ к частному реестру npm из эластичных экземпляров не был простым и плохо документирован.
Каков наилучший способ настроить этот доступ?
Ответы
Ответ 1
Ни один из других ответов не работал на меня. После нескольких часов вытягивания волос мы наконец поняли это. Решение, которое сработало, почти совпадает с другими ответами, но с очень незначительной настройкой.
Обратите внимание, что он использует ${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
чтобы он правильно связывался с каждым развертыванием. После нескольких неудачных попыток я наткнулся на этот пост, который заставил меня понять, что локально указать его в проекте возможно.