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
, это не повлияло на место установки.
Ответы
Ответ 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"