目次
PM2で環境ごとに環境変数を設定する
1. jsonファイルで環境変数私
本格的にNode.jsのアプリを開発していると、環境ごとに環境変数の値を変更したいことが多いです。有名なものだとNODE_ENV
のような変数だったり、ファイルの保存先ディレクトリだったり、APIのエンドポイントだったり、と様々です。
PM2では起動時に、環境変数を指定してNode.jsのインスタンスを立ち上げることが可能です。
具体的にはまず、起動用の設定ファイルに、以下のような記述(env
やenv_production
)を追加します。
// pm2config.json { "name": "myapp", //이것이 현재 돌아가고 있는 어플의 이름이됨. 나중에 stop 시킬 때 name에서 설정한 이름을 사용함. pm2 stop myapp "script": "app.js", //디렉토리 구성은 app.js(실행파일)과 pm2설정 파일이 같은 디렉토리에 위치하는 것 "env": { "NODE_ENV": "local", "SECRET_KEY": "my-local-secret" }, "env_production": { "NODE_ENV": "production", "SECRET_KEY": "my-production-secret" } }
そして、以下のようにコマンドで利用することで、環境変数をインスタンスに渡します。
# envを指定しない場合には、設定ファイル内のenvが利用されます。 $ pm2 start pm2config.json # envを指定すると、該当の環境(env_xxxの「xxx」の部分)の環境変数が適用されます。 $ pm2 start pm2config.json --env production
と、こんな感じで、簡単に環境変数を使い分けることができます。上記はenv_production
ですが、env_local
やenv_develop
など、複数の環境ごとに指定することも可能です。便利♪
アプリ側で、例えば以下のような出力をしている場合には、
// 環境変数のテスト(PM2の設定ファイルより指定) console.log('NODE_NEV:', process.env.NODE_ENV); console.log('SECRET_KEY:', process.env.SECRET_KEY);
pm2 logs
より、その出力を確認することができます。
$ pm2 logs 3|myapp | NODE_NEV: production <==== ここ 3|myapp | SECRET_KEY: my-production-secret <==== ここ 3|myapp | Express app starts, linstening port on 3000.
2. CMDで環境変数渡し
$ NODE_ENV=development PORT=3004 pm2 start app.js --name=3004
const port = process.env.PORT
3. Shell scriptで複数のpm2コマンド渡し
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 | #!bin/bash if [ $# -ne 1 ]; then echo "argument of processNum is nessacery" 1>&2 exit 1 fi cd '/srv/app/' for i in `seq 3000 $((3000 + $1 - 1))` do echo "PORT=${i} pm2 start app.js --name=${i}" 1>&2 PORT=${i} pm2 start app.js --name=${i} done exit 0 | cs |
今回のサンプルコード
今回のサンプルコードは、下記におきましたので、適宜ご参照いただけたら幸いです。
https://github.com/yoheiMune/node-playground/tree/master/010-pm2
参考資料
下記ドキュメントを参照しました。ありがとうございます。
PM2 - Environment management(公式、英語)
最後に
pm2には色々な機能が備わっていて助かります。本番で利用するための設定を他にもいくつか行なっているので、その辺も今後ブログにアウトプットできたらなと思います。
最後になりますが本ブログでは、Node.js・Linux・インフラ・開発環境・Python・フロントエンド・Go言語・Swift・Java・機械学習など雑多に情報発信をしていきます。自分の第2の脳にすべく、情報をブログに貯めています。気になった方は、本ブログのRSSやTwitterをフォローして頂けると幸いです ^ ^。
最後までご覧頂きましてありがとうございました!
'C Lang > JS Technic' 카테고리의 다른 글
실시간 데이터 송신의 진화 : 폴링 방식, 롱폴링 방식, 웹소켓 (1) | 2018.08.06 |
---|---|
서버로 파일 송신하는 웹어플 만들기 feat. formDate객체(front),formidable모듈(server) (0) | 2018.07.30 |
Object.assign, 복사 대상과 참조가 연결되는 얕은 복사(shallow copy), 아예 새로운 객체를 복사하는 깊은 복사(deep copy) (0) | 2018.07.24 |
array.reduce 함수 (0) | 2018.07.24 |
이미지, 파일 송신에 특화된 모듈 : formidable (0) | 2018.07.23 |