Amazon Beanstalk installs node and npm into really obscure places - and I\'m not sure they won\'t change if EB decides to use a newer version of node, which would cause my appli
I created the file /.ebextensions/node.config
in my project folder to declare my node version and add symlinks to the /bin folder. More information about the .ebextensions folder can be found here: 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"
You can add the most recent node and npm binaries to $PATH with a command like this:
PATH=$PATH:`ls -td /opt/elasticbeanstalk/node-install/node-* | head -1`/bin
I couldn't figure out how to prevent beanstalk commands from resetting the $PATH back again.
If you are so inclined you can probably create a symlink with a command similar to the above and use that as your reference point in cron scripts etc.
Agreed, it is very very annoying.
We had a similar issue with "node not found", trying to run node in container commands. After running ps aux
on the EC2 instance we saw that EB has access to the $NODE_HOME
env var:
su -s /bin/sh -c PATH=$PATH:$NODE_HOME/bin $EB_NODE_COMMAND 2>&1 nodejs
This can be used in .ebextensions, e.g.:
container_commands:
your_node_script:
command: 'env PATH="$PATH:$NODE_HOME/bin" ./bin/your_node_script'
(thanks to Alan Grow)
ls -td /opt/elasticbeanstalk/node-install/node-* | head -1
/binFollowing Peter Johnson & Greg Tatum replies I created a symlink to the latest node executable:
container_commands:
01_node_binary:
command: "ln -sf `ls -td /opt/elasticbeanstalk/node-install/node-* | head -1`/bin/node /bin/node"