web-dev-qa-db-ja.com

node.jsインスタンスがdevか本番かを確認します

現在、node.jsサーバーを実動サーバーにデプロイしたいときはいつでも、データベースおよび外部APIへのさまざまな接続のすべてのIP/DNS /ユーザー名/パスワードを変更する必要があります。

このプロセスはうっとうしいですが、現在実行中のnode.jsインスタンスがcloud9ideにあるのか、それとも実際に本番環境のスマートマシンにあるのかを確認する方法はありますか?

Node.jsインスタンスが実行されているサーバーで(実行中のコードで)決定できる場合は、値をprodまたはdevに設定する条件を追加します。

ありがとうございました

51
guiomie

通常、本番環境では次のようにノードアプリを実行する必要があります。

NODE_ENV=production node app.js

Express、Socket.IOなどを使用するアプリケーションはprocess.env.NODE_ENV環境を把握します。

開発では、これを省略して、node app.js

次のようにコード内の環境を検出できます。

var env = process.env.NODE_ENV || 'dev';
loadConfigFile(env + '.json', doStuff);

リソース:

express.jsアプリで環境をどのように検出しますか?

79
alessioalex

環境を設定する最も簡単な方法は、コマンドライン引数をアプリケーションに渡すことだと思います。

node ./server.js dev

スクリプトでは、この引数を処理し、必要な構成を設定する必要があります。

var env = process.argv[2] || 'dev';
switch (env) {
    case 'dev':
        // Setup development config
        break;
    case 'prod':
        // Setup production config
        break;
}

また、iが作成されました モジュール 設定プロセスを少し簡単にします。たぶんそれはあなたを助けるでしょう。

14
Vadim Baryshev

実際、データベース接続情報、パスワード、アクセストークンなどの構成値を実際のアプリケーションコード内に保存することは、次の理由によりお勧めしません。

  1. これらの値をハードコーディングすると、後で値を変更することが難しくなります。これらの値を変更するには、アプリケーションの新しいバージョンをリリースする必要があります。

  2. 本番グレードの構成データとパスワードをコードに保存してはならないため、これは重大なセキュリティ違反です。この機密データの漏洩は非常に簡単です。

より良いアプローチは、このデータを外部化し、実行中にアプリケーションに渡すことです。これは通常、環境変数を使用して行われます。異なる環境間で変更可能である必要があるデータの平和ごとに、一意の環境変数を定義する必要があります。

例:DB_HostDB_USERDB_PASSWORD。次に、これらの値を本番環境のアプリにこの方法で渡すことができます。

$ NODE_ENV=production DB_Host=1.2.3.4 DB_USER=someusername DB_PASSWORD=somerandompassword /bin/node app.js

実際、この値は暗号化してコードベースに追加し、展開中に復号化できます。ただし、復号化キーが展開システムに安全に保存されているか、リリースエンジニアによってインタラクティブに提供されていることを確認してください。 Shippableはこれを行うことができます すぐに使用できます。

開発環境では、非常に便利な dotenv module を使用できるため、よりシンプルになります。プロジェクトのルートディレクトリに.envファイルを作成し、それにすべての変数を追加するだけです。

DB_Host=1.2.3.4
DB_USER=someusername
DB_PASSWORD=somerandompassword

ただし、各開発者はおそらく個人的な設定が必要になるため、必ずVCSから除外してください。 .env.distファイルを作成して、後でテンプレートとして使用できるデフォルトの構成を含めることができます:cp .env.dist .env


また、CLI引数とNODE_ENV変数の両方を分析することにより、環境を自動的に検出できる再利用可能なモジュールを実装しました。 Node.jsプログラムに$ node app.js --prodのようなCLI引数を渡すことで簡単に環境を変更できるため、これは開発マシンで便利です。 Gulpで使用するのもいいです:$ gulp build --prod

detect-environmentのページ で詳細と使用例をご覧ください。

5
Slava Fomin II

Npm configモジュールは、環境ベースのセットアップとそれに基づくアプリの実行に非常に便利です。以下のリンクを確認してください

https://www.npmjs.com/package/config