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

Amazon Elastic Beanstalk node и npm нестандартные места установки

Amazon Beanstalk устанавливает node и npm в действительно неясные места - и я не уверен, что они не изменятся, если EB решит использовать более новую версию node, что приведет к поломке моего приложения.

Это местоположения для node и npm:

/opt/elasticbeanstalk/node-install/node-v0.8.24-linux-x64/bin/node
/opt/elasticbeanstalk/node-install/node-v0.8.24-linux-x64/bin/npm

Меня беспокоит изменение части 0.8.24, и я бы предпочел не grep для вещей в сценариях cron или monit при попытке найти что-то, что обычно просто /usr/bin/XXX.

Как получить согласованный путь к файлам для этих исполняемых файлов? и почему EB это делает?

для справки, я попытался установить параметр NodeVersion в .ebextensions/app.config, это не повлияло на место установки.

4b9b3361

Ответ 1

Вы можете добавить самые последние node и npm двоичные файлы в $PATH с помощью следующей команды:

PATH=$PATH:`ls -td /opt/elasticbeanstalk/node-install/node-* | head -1`/bin

Я не мог понять, как предотвратить переключение команд beanstalk с перезагрузки $PATH.

Если вы так склонны, возможно, вы можете создать символическую ссылку с командой, аналогичной приведенной выше, и использовать ее как свою контрольную точку в скриптах cron и т.д.

Согласен, это очень раздражает.

Ответ 2

После ответов Питера Джонсона и Грега Татума я создал символическую ссылку на последний исполняемый файл node:

container_commands:
  01_node_binary:
    command: "ln -sf `ls -td /opt/elasticbeanstalk/node-install/node-* | head -1`/bin/node /bin/node"
  • Я нахожу последнюю версию node install binary
  • Из него я создаю символическую ссылку в каталоге /bin (которая является частью $PATH)

Ответ 3

У нас была аналогичная проблема с "node not found", пытаясь запустить node в командах контейнера. После запуска ps aux в экземпляре EC2 мы увидели, что EB имеет доступ к $NODE_HOME env var:

su -s /bin/sh -c PATH=$PATH:$NODE_HOME/bin $EB_NODE_COMMAND 2>&1 nodejs

Это можно использовать в .ebextensions, например:

container_commands:
  your_node_script:
    command: 'env PATH="$PATH:$NODE_HOME/bin" ./bin/your_node_script'

(благодаря Алану Расту)

Ответ 4

Я создал файл /.ebextensions/node.config в моей папке проекта, чтобы объявить мою версию node и добавить символические ссылки в папку /bin. Более подробную информацию о папке .ebextensions можно найти здесь: http://docs.aws.amazon.com/elasticbeanstalk/latest/dg/customize-containers-ec2.html

option_settings:
  - option_name: NodeVersion
    value: 0.12.2
files:
  "/bin/node" :
    mode: "755755"
    content: "/opt/elasticbeanstalk/node-install/node-v0.12.2-linux-x64/bin/node"
  "/bin/npm" :
    mode: "755755"
    content: "/opt/elasticbeanstalk/node-install/node-v0.12.2-linux-x64/bin/npm"