Nodos de Amazon Elastic Beanstalk y npm ubicaciones de instalación no estándar

Amazon Beanstalk instala node y npm en lugares realmente oscuros, y no estoy seguro de que no cambien si EB decide usar una versión más nueva de node, lo que causaría que mi aplicación se rompa.

Estas son las ubicaciones para nodo y 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 

Estoy preocupado por el 0.8.24 parte 0.8.24 y prefiero no hacer grep para las cosas en los scripts cron o monit cuando bash encontrar algo que normalmente es /usr/bin/XXX .

¿Cómo obtengo una ruta de archivo consistente para estos ejecutables? ¿Y por qué EB hace esto?

como referencia, intenté configurar la opción NodeVersion en un .ebextensions/app.config , no tuvo ningún efecto en la ubicación de la instalación.

Puede agregar los binarios de nodo y npm más recientes a $ PATH con un comando como este:

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

No pude descubrir cómo evitar que los comandos beanstalk reinicien de nuevo el $ PATH.

Si está tan inclinado, probablemente pueda crear un enlace simbólico con un comando similar al anterior y usarlo como punto de referencia en los scripts cron, etc.

De acuerdo, es muy molesto.

Siguiendo las respuestas de Peter Johnson y Greg Tatum, creé un enlace simbólico al último ejecutable de nodo:

 container_commands: 01_node_binary: command: "ln -sf `ls -td /opt/elasticbeanstalk/node-install/node-* | head -1`/bin/node /bin/node" 
  • Encuentro la última versión del nodo binario de instalación.
  • Fuera de él creo un enlace simbólico en el directorio / bin (que es parte de $ PATH)

Tuvimos un problema similar con “nodo no encontrado” al intentar ejecutar el nodo en comandos de contenedor. Después de ejecutar ps aux en la instancia EC2, vimos que EB tiene acceso a la env var $NODE_HOME :

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

Esto se puede utilizar en .ebextensions, por ejemplo:

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

(Gracias a Alan Grow)

/.ebextensions/node.config el archivo /.ebextensions/node.config en la carpeta de mi proyecto para declarar la versión de mi nodo y agregar enlaces simbólicos a la carpeta / bin. Puede encontrar más información sobre la carpeta .ebextensions aquí: 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" 

Habichuela elástica de amazon

Gran el acceso al comando de nodo

  1. sudo su
  2. vipw
  3. nodejs: x: 496: 494 :: / tmp: / bin / bash (“: wq” para guardar los cambios)
  4. sudo su nodejs
  5. PATH = $ PATH: ls -td /opt/elasticbeanstalk/node-install/node-* | head -1 ls -td /opt/elasticbeanstalk/node-install/node-* | head -1 / bin
  6. nodo -v (disfrutar 🙂