現在、node.jsサーバーを実動サーバーにデプロイしたいときはいつでも、データベースおよび外部APIへのさまざまな接続のすべてのIP/DNS /ユーザー名/パスワードを変更する必要があります。
このプロセスはうっとうしいですが、現在実行中のnode.jsインスタンスがcloud9ideにあるのか、それとも実際に本番環境のスマートマシンにあるのかを確認する方法はありますか?
Node.jsインスタンスが実行されているサーバーで(実行中のコードで)決定できる場合は、値をprodまたはdevに設定する条件を追加します。
ありがとうございました
通常、本番環境では次のようにノードアプリを実行する必要があります。
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);
リソース:
環境を設定する最も簡単な方法は、コマンドライン引数をアプリケーションに渡すことだと思います。
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が作成されました モジュール 設定プロセスを少し簡単にします。たぶんそれはあなたを助けるでしょう。
実際、データベース接続情報、パスワード、アクセストークンなどの構成値を実際のアプリケーションコード内に保存することは、次の理由によりお勧めしません。
これらの値をハードコーディングすると、後で値を変更することが難しくなります。これらの値を変更するには、アプリケーションの新しいバージョンをリリースする必要があります。
本番グレードの構成データとパスワードをコードに保存してはならないため、これは重大なセキュリティ違反です。この機密データの漏洩は非常に簡単です。
より良いアプローチは、このデータを外部化し、実行中にアプリケーションに渡すことです。これは通常、環境変数を使用して行われます。異なる環境間で変更可能である必要があるデータの平和ごとに、一意の環境変数を定義する必要があります。
例:DB_Host
、DB_USER
、DB_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
のページ で詳細と使用例をご覧ください。
Npm configモジュールは、環境ベースのセットアップとそれに基づくアプリの実行に非常に便利です。以下のリンクを確認してください