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


83

私はNode.jsプログラミングに不慣れで、最近、(エクスプレス、バックボーン、その他の補完的なビューテクノロジー、mongoDBを使用)を使用してサンプルの動作するWebアプリケーションを作成しました。現在、ステージング環境に同じものをデプロイしたいのですが、このアプリケーションをパッケージ化して配布する方法がわかりません。[mongoDbを管理し、個別に設定できます]

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

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

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


私のJavaプロジェクトでは、ビルド/デプロイツールとしてMavenを使用しています。過去には、アリも経験したことがあります。Grunt for Node.jsを調べましたが、そのタスクから理解できたのは、前処理タスク(ミニファイ、concat、JSHintなど)を実行し、アプリのパッケージ化については何も言及しておらず、インストールと言っていることだけでした。リポジトリに(mavenのように)。
KBJ 2014年

回答:


44

標準化された方法はありませんが、あなたは正しい方向に進んでいます。あなたの場合はpackage.json最新の状態にあると手入れの行き届いた、あなただけを除いた、生産システムに/ ZIP /クローンアプリのディレクトリをコピーすることができますnode_modules

実動システムで、テストがあり、最後にnpm install依存関係をインストールするために実行 しますnpm testNODE_ENV=production node server.js

永遠のようなラッパーのトピックも含まれている、非常に役立つと私が考えた最近のスライドのいくつかは、ここにあります


応答が遅れてすみません。考えられるすべての組み合わせを試した後、私は上記の提案自体に行き着きました。ありがとう!
KBJ 2014

4
npmにインターネットからモジュールをダウンロードさせたくない場合はどうなりますか?代わりに、パッケージ内のすべてを出荷したいと思います。node_modulesフォルダーも出荷できますか?それは機能しますか?私が尋ねる理由は次のとおりです。私のアプリケーションは、インターネットに接続されていないイントラネット環境で実行される可能性があります。
ステファン

2
@Stefan付属のモジュールによって異なります。純粋なJSではない一部のモジュールを最初にビルドする必要があるため、それらを別の環境に移動すると破損する可能性があります。私はまだこれに対処する必要はありませんでしたが、おそらくnpmキャッシュを使用すると、キャッシュにパッケージの完全なリストを入力し、そこからインストール(およびビルド)することで実行可能なソリューションが提供されます。
MildlySerious 2016年

89

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

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

しかし、生産中。

ユニットテストをスキップしたい。

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

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

あなたは、サンプル・アプリケーションを見たい場合は、例のブログアプリケーションを見つけることができるここに。フォルダ構造を確認しpackage.jsonて参照してください。

デプロイについては、スタートアップアプリケーションのherokuデプロイメントをお勧めします。ここでハウツーを見つけることができます。これは単純な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 test(のテストセクションpackage.json
  4. junitpowermock、... =>モカノード単位、...
  5. Spring MVC=> Express.JS
  6. pom.xml => package.json
  7. import package => require('module_name')

非常に便利。package.jsonで、依存関係の変更による破損の可能性を最小限に抑えるためにバージョンを指定する方法はありますか?
mikijov 2015

2
@MikiJ確かに、モジュールのバージョン(依存関係)を指定できます。セマンティックバージョニングがpackage.jsonで使用されている、あなたが見ることができ、ここで詳細
フセインBABAL

素敵なJava-ノードの比較。すごい!!ありがとう!
アレハンドロテイシェイラムニョス2017年

すごい。!!JavaのWarファイルに相当するものはありますか?ソースファイルではなくクラスファイルのみをデプロイするため、JSファイル全体をデプロイする代わりにノードにそのようなものはありますか。
Mdumanoj 2018年

@HüseyinBABALあなたのアナロジーは完全には正しくありません。これmvn clean installは、世界中のどのサーバーにも簡単にデプロイしてサーバーでjava -jar *.war実行できるバンドルされた.warファイルを作成するためです。しかし、どうすればノードプロジェクトのバンドルファイルを作成できますか?どうすればサーバーで実行できますか!
KNDheeraj

6
  1. Expressを使用して構築されたパッケージノードWebアプリの標準フォーマット/ガイドラインはありますか?(ノードアプリ用の同様のjar / warパッケージングシステムはありますか?)

はい、CommonJSパッケージの仕様

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

あなたの次の質問のために:

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

2番目にHüseyinがHerokuにデプロイして本番環境に移行するという提案をしました。開発とステージングには、それぞれVirtualBoxとAmazonEC2でNode-Applianceを使用します。

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

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


1
ただダゴンの質問に答える以外に何もしてくれてありがとう。
monsto 2015年

6

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


5

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

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

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

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


2

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

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

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

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

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

弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.