Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/linux/26.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/node.js/36.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Linux 提供Node.JS webapp“;“手握钥匙”;_Linux_Node.js_Web Applications_Packaging - Fatal编程技术网

Linux 提供Node.JS webapp“;“手握钥匙”;

Linux 提供Node.JS webapp“;“手握钥匙”;,linux,node.js,web-applications,packaging,Linux,Node.js,Web Applications,Packaging,我正在为客户端构建一个简单的Node.JS应用程序。webapp应该很容易部署在每个服务器实例(RedHat EL 6.3)上,“密钥在手” 打包Node.JS应用程序的最佳方式是什么?基本上,我需要一个“安装程序”或“软件包”来: 安装Node.JS 安装依赖项(npm安装) 填充应用程序文件(CSS、JS、HTML等) 您应该提供一个独立的包裹。请查看伟大的网站,特别是该部分。该站点包含了来自经验丰富的运营工程师的许多来之不易的智慧 在应用程序的repo中,编写一个脚本(shell、节点

我正在为客户端构建一个简单的Node.JS应用程序。webapp应该很容易部署在每个服务器实例(RedHat EL 6.3)上,“密钥在手”

打包Node.JS应用程序的最佳方式是什么?基本上,我需要一个“安装程序”或“软件包”来:

  • 安装Node.JS
  • 安装依赖项(
    npm安装
  • 填充应用程序文件(CSS、JS、HTML等)

您应该提供一个独立的包裹。请查看伟大的网站,特别是该部分。该站点包含了来自经验丰富的运营工程师的许多来之不易的智慧

  • 在应用程序的repo中,编写一个脚本(shell、节点等)来生成可分发的归档文件
  • RPM或tar归档是您最明智的两种选择。tar更轻便、更简单。RPM将与基于RPM的发行版很好地集成。如果您没有做过很多软件打包/管理工作,我建议您从tar开始。RPM比tar要复杂得多
  • tar归档文件应将node.js文件嵌入其中。这将使您的应用程序易于安装,并避免共享系统范围的节点安装,从而产生人为耦合。如果您选择RPM路径,您可以在RPM规范文件中将节点指定为依赖项(但您可能不应该这样做,请参见下文)
  • 归档文件还应嵌入所有npm依赖项。不要在安装软件包时运行
    npm install
    。考虑在开发过程中使用该工具管理依赖项,但在部署时,应预先捆绑并准备运行。李>
具体来说,这些都是你应该避免的坏主意:

  • 安装期间,请勿从Internet下载任何内容。这是脆弱、缓慢的,并且可能会给您带来坏的惊喜,包括安全问题
  • 不要在安装时构建可以在构建时构建的工件。因此,请发送预构建CSS文件、requirejs优化文件、预编译二进制文件等
<关于你的应用程序RPM是否应该将NoDE.js作为依赖项或嵌入到RPM中的节点,这里有一些要考虑的要点。
  • 将node.js嵌入到RPM中
    • 要分发的单个
      .rpm
      文件
    • 允许应用程序严格控制其使用的节点版本。(见下文)
    • 更高的可靠性。事实上,您的应用程序可能与您开发的node.js的次要版本(例如0.8.x)甚至补丁版本(例如>=0.8.12<0.9)紧密耦合。最好允许node.js将你的应用程序与操作系统分离,但不要误以为你的应用程序可以在不同版本的node.js上可靠工作,而无需进行测试和调整。如今,操作系统上通常只有一个应用程序在运行,应用程序之间共享节点的概念错误地将节省磁盘空间的价值置于应用程序的适当解耦和操作独立性之上
    • 目前尚不清楚尤姆兰是否有任何官方/可靠的预建RPM可以“正常工作”
  • 将node.js指定为PRM的依赖项
    • 遵循操作系统软件包管理的一般原则(避免重复、节省磁盘空间等)
    • RPM在库存管理、卸载、升级等方面提供了超越TAR的能力。既然你问这个问题,你可能还没有准备好正确地处理这些问题,所以你可能想从TAR开始,一旦你有了一个坚实的理解,考虑RPM升级脚本,等等。
    • 一旦你的应用程序开始使用数据库或3,支持电子邮件守护进程、日志聚合器等,那么“要分发的单个文件”这一点很快就会变得站不住脚

我想我会选择RPM路线,因为这是我的客户想要的。因此,RPM将包含预先下载的所需Node.JS模块,以及准备运行的代码。你是说RPM本身不能包含Node.JS吗?我将更新我的答案,以澄清在RPM中嵌入Node本身的问题。