Amazon Elastic Beanstalk节点和npm非标准安装位置

Amazon Beanstalk将节点和npm安装到真正模糊的地方 – 我不确定如果EB决定使用更新版本的节点,这会导致我的应用程序中断,它们不会改变。

这些是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部分发生了变化,我不想在cron或monit脚本中寻找通常只是/usr/bin/XXX

我如何获得这些可执行文件的一致的文件path? 为什么EB做到这一点?

作为参考,我尝试在.ebextensions/app.config设置NodeVersion选项,它对安装位置没有影响。

       

网上收集的解决方案 "Amazon Elastic Beanstalk节点和npm非标准安装位置"

您可以使用如下命令将最新的节点npm二进制文件添加到$ PATH中:

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

我无法弄清楚如何防止再次重置$ PATH的豆杆命令。

如果你非常喜欢,你可以用类似于上面的命令创build一个符号链接,并用它作为cron脚本中的参考点。

同意,这是非常非常烦人的。

在Peter Johnson和Greg Tatum的回复之后,我创build了一个到最新节点可执行文件的符号链接:

 container_commands: 01_node_binary: command: "ln -sf `ls -td /opt/elasticbeanstalk/node-install/node-* | head -1`/bin/node /bin/node" 
  • 我find了最新版本的节点安装二进制文件
  • 在它之外,我在/ bin目录中创build了一个符号链接(这是$ PATH的一部分)

我们遇到了“找不到节点”的类似问题,试图在容器命令中运行节点。 在EC2实例上运行ps aux ,我们看到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' 

(感谢Alan Grow)

我在我的项目文件夹中创build了文件/.ebextensions/node.config来声明我的节点版本并将符号链接添加到/ bin文件夹。 有关.ebextensions文件夹的更多信息可以在这里find: 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"