Stellen Sie Node.JS webapp "schlüsselfertig" zur Verfügung

8

Ich erstelle eine einfache Node.JS-Anwendung für einen Client. Die Webanwendung sollte auf jeder Serverinstanz (RedHat EL 6.3), "Key in Hand", einfach zu implementieren sein.

Wie verpacken Sie eine Node.JS-App am besten? Grundsätzlich brauche ich einen "Installer" oder "Paket" um:

  • Installieren Sie Node.JS
  • Installieren Sie die Abhängigkeiten ( npm install )
  • Füllen Sie die Anwendungsdateien (CSS, JS, HTML, etc.)
Randomblue 29.12.2012, 17:45
quelle

1 Antwort

8

Sie sollten ein eigenständiges Paket ausliefern. Bitte schaue dir die großartige Seite die Twelve-Factor App an, insbesondere die Build, Release, Run Abschnitt. Es gibt eine Menge von hart erkämpften Weisheiten von erfahrenen Operationsingenieuren, die auf dieser Site verkörpert sind.

  • Schreiben Sie im Repo Ihrer App ein Skript (Shell, Node, was auch immer), das ein verteilbares Archiv erzeugen kann
  • RPM oder tar-Archiv sind die zwei sinnvollsten Möglichkeiten für Sie. Teer ist tragbarer und einfacher. RPM würde sich gut mit einer RPM-basierten Distribution integrieren lassen. Ich würde empfehlen, mit tar zu beginnen, wenn Sie nicht viel Software-Paketierung / Management-Arbeit geleistet haben. RPM ist wesentlich komplexer als tar.
  • Das tar-Archiv sollte die node.js-Dateien darin einbetten. Dies erleichtert die Installation Ihrer App und vermeidet die gemeinsame Nutzung einer systemweiten Node-Installation, wodurch eine künstliche Kopplung entsteht. Wenn Sie die RPM-Route verwenden, können Sie den Knoten als Abhängigkeit in Ihrer RPM-Spezifikationsdatei angeben (aber Sie sollten dies wahrscheinlich nicht tun - siehe unten).
  • Das Archiv sollte alle npm-Abhängigkeiten ebenfalls einbetten. Führen Sie npm install nicht zur Installationszeit des Pakets aus. Erwägen Sie, das Tool npm shrinkwrap zu verwenden, um Ihre Abhängigkeiten zu verwalten Entwicklung, aber zum Zeitpunkt der Bereitstellung sollten sie vorgebündelt und einsatzbereit sein.

Insbesondere sind dies schlechte Ideen, die Sie vermeiden sollten:

  • Laden Sie während der Installation nichts aus dem Internet herunter. Dies ist spröde, langsam und kann möglicherweise böse Überraschungen einschließlich Sicherheitsprobleme
  • werfen
  • Erstellen Sie keine Artefakte zur Installationszeit, die zur Build-Zeit erstellt werden können. Versenden Sie also CSS-Dateien vor dem Build, benötigen Sie optimierte Dateien, vorkompilierte Binaries usw.

Wenn Ihr Anwendungs-RPM node.js als Abhängigkeit auflisten oder Knoten in das RPM einbetten soll, sollten Sie hier einige Punkte beachten.

  • Betten Sie node.js in Ihr RPM ein
    • Einzelne .rpm -Datei zum Verteilen
    • Ermöglicht Ihrer Anwendung, die verwendete Knotenversion genau zu steuern. (siehe unten)
    • Höhere Zuverlässigkeit. Tatsache ist, dass Ihre App wahrscheinlich ziemlich eng mit mindestens der Nebenversion von node.js verbunden ist, auf der Sie entwickeln (z. B. 0.8.x) oder sogar mit einer Patch-Version (& gt; = 0.8.12 & lt; 0.9 zum Beispiel). Es ist am besten, node.js zu erlauben, Ihre App vom Betriebssystem zu entkoppeln, aber lassen Sie sich nicht täuschen, dass Ihre App auf einer anderen Version von node.js ohne Test & amp; Einstellung. Meistens läuft heutzutage nur eine App auf dem Betriebssystem, und die Vorstellung, Knoten zwischen Apps gemeinsam zu verwenden, legt Wert auf die Erhaltung des Speicherplatzes über die korrekte Entkopplung und betriebliche Unabhängigkeit der Anwendungen.
    • Es ist unklar, ob es offizielle offizielle / zuverlässige vorgefertigte RPMs in Yumland gibt, die "einfach funktionieren".
  • Geben Sie node.js als eine Abhängigkeit von Ihrem PRM an
    • Folgt der allgemeinen Philosophie der OS-Paketverwaltung (Vermeidung von Doppelarbeit, Speicherplatz sparen usw.)
    • RPM bietet über TAR hinausgehende Funktionen rund um Inventarverwaltung, Deinstallation, Upgrade usw. Da Sie diese Frage stellen, sind Sie wahrscheinlich noch nicht bereit, diese richtig zu adressieren, also möchten Sie vielleicht mit tar beginnen und sobald Sie einen Volumenkörper haben Verständnis dafür, RPM - Upgrade - Skripte, etc.
    • Der nette Punkt "Einzelne Datei zum Verteilen" kann schnell unhaltbar werden, sobald Ihre App mit der Verwendung einer Datenbank oder 3 beginnt und Daemons für E-Mails, Protokollaggregatoren usw. unterstützt.
Peter Lyons 29.12.2012, 18:26
quelle