您应该提供一个独立的包。请查看精彩网站The Twelve-Factor App,特别是build, release, run部分。来自该网站的经验丰富的运营工程师有很多来之不易的智慧。
- 在你的app的repo中,编写一个可以生成可分发存档的脚本(shell,节点等)
- RPM或tar存档是您最明智的选择。 tar更便携,更简单。 RPM可以很好地与基于RPM的发行版集成。如果你没有做过很多软件包装/管理工作,我建议从tar开始。 RPM比tar要复杂得多。
- tar存档应该在其中嵌入node.js文件。这将使您的应用程序易于安装,并避免共享系统范围的节点安装,从而创建人工耦合。如果你使用RPM路由,你可以在RPM规范文件中指定node作为依赖项(但你可能不应该 - 见下文)。
- 存档也应嵌入所有npm依赖项。不要在程序包安装时运行
npm install
。考虑使用npm shrinkwrap工具在开发期间管理您的依赖项,但在部署时,它们应该预先捆绑并准备好运行。
具体来说,这些是你应该避免的坏主意:
- 安装过程中不要从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上可靠地运行而无需进行测试。调整。最常见的是,现在操作系统上只运行了1个应用程序,并且在应用程序之间共享节点的概念错误地通过适当的解耦和应用程序的操作独立性来限制磁盘空间的保护。
- 目前尚不清楚yumland是否有任何官方/可靠的预制RPM可以“正常工作”。
- 将node.js指定为PRM的依赖项
- 遵循操作系统包管理的一般原则(避免重复,节省磁盘空间等)
- RPM提供超出TAR的功能,包括库存管理,卸载,升级等。由于您提出这个问题,您可能还没准备好正确解决这些问题,因此您可能希望从tar开始,一旦您有了实体了解这一点,考虑RPM升级脚本等。
- 一旦您的应用程序开始使用数据库或3,支持电子邮件,日志聚合器等守护程序,“分发单个文件”的好处很快就会变得难以维持。