web-dev-qa-db-ja.com

Node.js + Express Webアプリケーションをパッケージ化してデプロイする方法

私はNode.jsプログラミングを初めて使用し、最近(mongoDBを使用したエクスプレス、バックボーン、その他の無料のビューテクノロジー)を使用してサンプルの動作Webアプリケーションを作成しました。今、私はステージング環境に同じものを展開したいと思っていますが、このアプリケーションをパッケージ化して同じものを配布する方法がわかりません。 [mongoDbの面倒を見て、個別に設定できます]

私はJavaの世界から来ました。そこで、サーブレットコンテナにデプロイされたWebアプリケーション用の再利用可能なライブラリとwar/earパッケージ用のjarを作成します。この場合、node.js自体もWebコンテナとして機能するため、webappをパッケージ化するにはどうすればよいですか?

  1. Expressを使用して構築されたパッケージングノードwebappsの標準形式/ガイドラインはありますか? (ノードアプリ用の同様のjar/warパッケージシステムはありますか?)
  2. パッケージ化したら、どのようにデプロイしますか?それは独自のコンテナでもあるので、exeになりますか?

PS:今のところ、必要なすべてのソースファイルをステージング環境に手動でコピーし、npmコマンドを実行してそのマシンのすべての依存関係をダウンロードし、「永久」または他のメカニズムを使用してserver.jsを実行することを考えています。 (また、アプリがクラッシュして永遠に失敗する場合のために、何らかの監視を追加します)それが正しい方法かどうかわかりませんか?この問題に対処するための標準化された方法がなければならないと確信しています。

73
KBJ

標準化された方法はありませんが、あなたは正しい軌道に乗っています。 package.jsonが最新の状態に保たれている場合は、node_modulesを除いて、アプリのディレクトリを運用システムにコピー/ Zip /クローンするだけで済みます。

実動システムで、npm installを実行して依存関係をインストールします。テストがある場合はnpm test、最後にNODE_ENV=production node server.js

私が非常に役立つと考えた最近のスライドには、永遠のようなラッパーのトピックも含まれています here を見つけることができます。

41
MildlySerious

Node.jsアプリケーションのデプロイは非常に簡単です。 Mavenには、pom.xmlがあります。 Node.jsの関連概念はpackage.jsonです。 package.jsonへの依存関係を述べることができます。 package.jsonで環境設定を行うこともできます。たとえば、開発環境では、それを言うことができます

単体テストを実行したい。

しかし、生産中;

単体テストをスキップしたい。

.m2フォルダーの下にmavenのローカルリポジトリがあります。 Node.jsでは、Node.jsプロジェクトの下にnode_modulesフォルダーがあります。モジュールフォルダーとその名前を確認できます。

この答えのgruntの部分に行きましょう。 Gruntは、フロントエンドアセット、html、javascript、cssのタスクマネージャーです。たとえば、展開する前に、html、css、javascript、さらに画像を縮小できます。 gruntタスク実行関数をpackage.jsonに配置することもできます。

サンプルアプリケーションをご覧になりたい場合は、サンプルブログアプリケーション here をご覧ください。参照用にフォルダー構造とpackage.jsonを確認してください。

展開については、スタートアップアプリケーション用のheroku展開をお勧めします。 howto here を見つけることができます。これは単純なgitベースの展開です。

プロジェクトの実行部分で、環境NODE_ENV=developmentおよびnode app.jsを設定するだけです。ここにapp.jsがプロジェクトにあります。

Javaとnodejsの相対的な概念は次のとおりです。

  1. maven clean install => npm install
  2. .m2フォルダー=> node_modules(プロジェクトフォルダーの下)
  3. mvn test => npm testpackage.jsonのテストセクション)
  4. junitpowermock、... => mochanode-unit 、...
  5. Spring MVC => Express.JS
  6. pom.xml => package.json
  7. import package => require('module_name')
87
Hüseyin BABAL
  1. Expressを使用して構築されたパッケージングノードwebappsの標準形式/ガイドラインはありますか? (ノードアプリ用の同様のjar/warパッケージシステムはありますか?)

はい、 CommonJSパッケージ仕様

この仕様では、CommonJSプログラムおよびライブラリを配布するためのCommonJSパッケージ形式について説明します。 CommonJSパッケージは、モジュール、コード、およびその他のアセットのコレクションを単一の形式にまとめたラッピングです。 CommonJSコンポーネントの便利な配信、インストール、管理の基盤を提供します。

次の質問:

2.パッケージ化したら、どのようにデプロイしますか?それは独自のコンテナでもあるので、exeになりますか?

生産のために Herok に展開するHüseyinの提案を2回目にします。開発とステージングには、それぞれ Node-Appliance をVirtualBoxとAmazon EC2で使用します。

このプログラムは、build-debian-cloudまたはDebian-VirtualBox-Applianceによって構築されたDebianマシンを取得し、それをNode.jsの「アプライアンス」に変換し、git経由でデプロイされるNodeアプリケーションを実行できます。

Webアプリはexeになりません。

6
David Braun

これが解決策を探している人に役立つことを願っています。Node jsアプリのパッケージ化は「npm pack」コマンドを使用して実行できます。本番/ステージング環境で実行できるアプリケーションのZipファイルを作成します。 。

5
naveen kumar

これにアプローチするいくつかの方法:

  • コード以外のすべて(node_modules/**)を除くGitリポジトリにコードをプッシュしてから、ステージング環境にプルし、npm installを実行してすべての依存関係を復元します

  • nPMパッケージを作成し、npmを介してステージング環境にインストールします(これにより、すべての依存関係も処理されるはずです)

  • ステージング環境への手動コピー/ sshファイル(これはGruntで自動化できます)、npmを使用して依存関係を復元します

4
dark_ruby

Zeitのpkgモジュールを使用しました。 linux/win/macos用のクロスプラットフォームの成果物を作成できます。実際に本番環境で使用しており、問題なく動作します。

すべてのjsスクリプトを取り込み、単一のファイルにパッケージ化します。

私がそれを使用した理由は、ソースコードの保護に役立つからです。顧客環境での本番環境では、ソースコードではなくアプリケーションにアクセスできます。

また、利点の1つは、実稼働環境では、ノードバイナリもビルド内にパッケージ化されるため、実際に顧客にnode.jsをインストールさせる必要がないことです。

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

0
varad11