web-dev-qa-db-fra.com

Nœuds Amazon Elastic Beanstalk et emplacements d'installation non standard npm

Amazon Beanstalk installe le nœud et le npm dans des endroits vraiment obscurs - et je ne suis pas sûr qu'ils ne changeront pas si EB décide d'utiliser une version plus récente du nœud, ce qui entraînerait la rupture de mon application.

Ce sont les emplacements pour le noeud et le 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

Je suis inquiet pour le 0.8.24 changement de partie et je préfère ne pas chercher les choses dans les scripts cron ou monit lorsque vous essayez de trouver quelque chose qui est normalement juste /usr/bin/XXX.

comment puis-je obtenir un chemin de fichier cohérent pour ces exécutables? et pourquoi EB fait-il cela?

pour référence, j'ai essayé de définir l'option NodeVersion dans un .ebextensions/app.config, cela n'a eu aucun effet sur l'emplacement d'installation.

40
dubeegee

Vous pouvez ajouter les binaires node et npm les plus récents à $ PATH avec une commande comme celle-ci:

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

Je n'arrivais pas à comprendre comment empêcher les commandes beanstalk de réinitialiser à nouveau $ PATH.

Si vous êtes si enclin, vous pouvez probablement créer un lien symbolique avec une commande similaire à celle ci-dessus et l'utiliser comme point de référence dans les scripts cron, etc.

D'accord, c'est très très ennuyeux.

59
Peter Johnson

Suite aux réponses de Peter Johnson et Greg Tatum, j'ai créé un lien symbolique vers le dernier exécutable de nœud:

container_commands:
  01_node_binary:
    command: "ln -sf `ls -td /opt/elasticbeanstalk/node-install/node-* | head -1`/bin/node /bin/node"
  • Je trouve la dernière version du binaire d'installation du nœud
  • À partir de là, je crée un lien symbolique dans le répertoire/bin (qui fait partie de $ PATH)
29
asaf am

Nous avons eu un problème similaire avec "noeud introuvable", en essayant d'exécuter le noeud dans les commandes de conteneur. Après avoir exécuté ps aux sur l'instance EC2, nous avons vu qu'EB a accès à $NODE_HOME env var:

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

Cela peut être utilisé dans les extensions Web, par exemple:

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

(merci à Alan Grow)

9
dorianm

J'ai créé le fichier /.ebextensions/node.config dans mon dossier de projet pour déclarer ma version de nœud et ajouter des liens symboliques vers le dossier/bin. Plus d'informations sur le dossier .ebextensions peuvent être trouvées ici: 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"
3
Greg Tatum

Amazon Elastic Beanstalk

Commande d'accès au nœud

  1. Sudo su
  2. vipw
  3. nodejs: x: 496: 494 ::/tmp:/bin/bash (": wq" pour enregistrer les modifications)
  4. Sudo su nodejs
  5. CHEMIN = $ CHEMIN: ls -td /opt/elasticbeanstalk/node-install/node-* | head -1/poubelle
  6. node -v (profitez :)
1
Fupslot