Amazon Beanstalkは、ノードとnpmを本当にあいまいな場所にインストールします-そして、EBが新しいバージョンのノードを使用することを決めても、それらが変更されないので、アプリケーションが壊れます。
これらは、ノードと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
部分の変更が心配です。通常は/usr/bin/XXX
である何かを見つけようとするとき、cronまたはmonitスクリプトの内容をgrepしたくありません。
これらの実行可能ファイルの一貫したファイルパスを取得するにはどうすればよいですか?なぜEBはこれを行うのですか?
参考のため、.ebextensions/app.config
にNodeVersion
オプションを設定してみましたが、インストール場所には影響しませんでした。
次のようなコマンドを使用して、最新のnodeおよびnpmバイナリを$ PATHに追加できます。
PATH=$PATH:`ls -td /opt/elasticbeanstalk/node-install/node-* | head -1`/bin
Beanstalkコマンドが$ PATHを再びリセットするのを防ぐ方法がわかりませんでした。
あなたがそのように傾いているなら、おそらく上記と同様のコマンドでシンボリックリンクを作成し、それをcronスクリプトなどの参照ポイントとして使用できます。
同意した、それは非常に迷惑です。
Peter JohnsonとGreg Tatumの返信に続いて、最新のノード実行可能ファイルへのシンボリックリンクを作成しました。
container_commands:
01_node_binary:
command: "ln -sf `ls -td /opt/elasticbeanstalk/node-install/node-* | head -1`/bin/node /bin/node"
「node not found」で同様の問題が発生し、コンテナコマンドでノードを実行しようとしました。 EC2インスタンスでps aux
を実行した後、EBが$NODE_HOME
env変数にアクセスできることがわかりました。
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に感謝)
ファイルを作成しました/.ebextensions/node.config
私のプロジェクトフォルダーで、ノードバージョンを宣言し、/ 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"
ls -td /opt/elasticbeanstalk/node-install/node-* | head -1
/置き場