codecommit/codebuild/codedeployを介してAWSのEC2インスタンスにNodejsアプリケーションをデプロイしようとしています。私のcodedeployのappspec.ymlファイルには、アプリケーションの起動時に呼び出されるapplication_start.shというスクリプトがあります。 pm2の再起動に使用します。
#!/bin/bash
pm2 delete /home/ubuntu/server/app.js 2> /dev/null
CREDENTIALS_SOURCE=$CREDENTIALS_SOURCE pm2 start /home/ubuntu/server/app.js --update-env
ご覧のとおり、Nodejsコードのenv変数を設定するためにbashスクリプトから読み取るenv変数($ CREDENTIALS_SOURCE)があります。
問題は、スクリプトが最初に実行されると(awsパイプラインを介して自動的に)$ CREDENTIALS_SOURCE変数を読み取ることができず、サーバーがクラッシュすることです。サーバーにSSHで接続し、shスクリプトとまったく同じコマンドを実行すると機能します。
CREDENTIALS_SOURCE=dev
サーバー環境変数から読み取るのではなく、bashスクリプトを「dev」にハードコードするように変更するときにも機能します。
私はexport CREDENTIALS_SOURCE=dev
.bashrcにあり、それをインポートしました。これにより、printenv
環境変数が表示されます。
答え1
解決策を見つけて動作しますが、それが正しい方法であるかどうかはわかりません。
明らかに、pm2はサーバーから環境変数を読み取ることができません。 nodeJSアプリケーションは、.NETをnode app.js
実行するのではなく、実行時にenv変数にアクセスできます。pm2 start app.js
次のコマンドを使用してpm2で動作させるようにしました。
sudo -E pm2 start app.js
私の考えでは、env変数がUbuntuユーザーではなくrootユーザーに保存されているようです。そうですか?
上記の方法は完璧な解決策ではありません。より良いソリューション:
export CREDENTIALS_SOURCE=dev
追加する/etc/profile
source /etc/profile
始めるapplication_start.sh
前に追加pm2
動作します!
源泉: