8

クライアント用の単純な Node.JS アプリケーションを構築しています。webapp は、各サーバー インスタンス (RedHat EL 6.3) に簡単にデプロイでき、「キーを手元に置いておく」必要があります。

Node.JS アプリをパッケージ化する最良の方法は何ですか? 基本的に、次のことを行うには「インストーラー」または「パッケージ」が必要です。

  • Node.JS をインストールする
  • 依存関係をインストールする ( npm install)
  • アプリケーション ファイル (CSS、JS、HTML など) を入力します。
4

1 に答える 1

8

自己完結型のパッケージを提供する必要があります。The Twelve-Factor Appの優れたサイト、特にビルド、リリース、実行セクションを確認してください。そのサイトには、経験豊富なオペレーション エンジニアが苦労して得た多くの知恵が具体化されています。

  • アプリのリポジトリで、配布可能なアーカイブを生成できるスクリプト (シェル、ノードなど) を記述します。
  • RPM または tar アーカイブは、最も賢明な 2 つの選択肢です。tar はより移植性が高く、より単純です。RPM は、RPM ベースのディストリビューションとうまく統合できます。ソフトウェアのパッケージ化/管理作業をあまり行っていない場合は、tar から始めることをお勧めします。RPM は tar よりもかなり複雑です。
  • tar アーカイブは、その中に node.js ファイルを埋め込む必要があります。これにより、アプリのインストールが簡単になり、システム全体のノード インストールの共有を回避して、人為的なカップリングを作成できます。RPM ルートを使用する場合は、RPM 仕様ファイルで node を依存関係として指定できます (ただし、おそらくそうすべきではありません - 以下を参照してください)。
  • アーカイブには、npm の依存関係もすべて埋め込む必要があります。npm installパッケージのインストール時に実行しないでください。開発中に依存関係を管理するためにnpm シュリンクラップツールを使用することを検討してください。

特に、これらは避けるべき悪い考えです。

  • インストール中にインターネットから何もダウンロードしないでください。これは脆弱で遅く、セキュリティ上の問題を含む予期せぬ事態を引き起こす可能性があります
  • ビルド時にビルドできる成果物をインストール時にビルドしないでください。そのため、ビルド前の CSS ファイル、requirejs に最適化されたファイル、コンパイル済みのバイナリなどを出荷します。

アプリケーション RPM が node.js を依存関係としてリストする必要があるか、ノードを RPM に埋め込む必要があるかについて、考慮すべき点がいくつかあります。

  • RPM に node.js を埋め込む
    • 配布する単一.rpmのファイル
    • アプリケーションが使用するノードのバージョンを厳密に制御できるようにします。(下記参照)
    • より高い信頼性。実際には、あなたのアプリはおそらく、開発する node.js の少なくともマイナー バージョン (たとえば 0.8.x) またはパッチ リリース (たとえば >= 0.8.12 < 0.9) とかなり緊密に結合されています。node.js がアプリを OS から分離できるようにするのが最善ですが、テストや調整を行わなくても、異なるバージョンの node.js でアプリが確実に動作すると思い込まないでください。最近では、OS 上で実行されているアプリが 1 つだけであることが最も一般的であり、アプリ間でノードを共有するという概念は、アプリケーションの適切な分離と運用上の独立性よりも、ディスク領域の節約を誤って評価しています。
    • yumland に「正常に動作する」公式/信頼できるビルド済み RPM があるかどうかは不明です。
  • PRM の依存関係として node.js を指定します。
    • OS パッケージ管理の一般的な考え方に従います (重複の回避、ディスク容量の節約など)。
    • RPM は、インベントリ管理、アンインストール、アップグレードなどに関する TAR を超える機能を提供します。この質問をしているので、おそらくこれらに適切に対処する準備ができていない可能性があります。 、RPM アップグレード スクリプトなどを検討してください。
    • 「単一のファイルを配布する」という利点は、アプリケーションが 1 つまたは 3 つのデータベースを使用し始めるとすぐに受け入れられなくなり、電子メールやログ アグリゲータなどのデーモンをサポートします。
于 2012-12-29T18:26:01.040 に答える