离线环境下Node.js应用部署时需要解决以下三个基本问题:
- Node.js应用的进程管理,如性能监控、自动重启、负载均衡等
- Node.js应用开机如何自启动
- 离线环境下如何部署Node.js应用
下面以在Windows Server 2012上离线部署Node.js应用为例,记录上述问题的解决方案:
Node.js应用的进程管理
在生产环境中运行 Express 应用程序时,使用进程管理器对于完成以下任务很有帮助[1]:
- 在应用程序崩溃后将其重新启动。
- 获得对运行时性能和资源消耗的洞察。
- 动态修改设置以改善性能。
- 控制集群。
进程管理器有点类似于应用程序服务器:它是应用程序的“容器”,可促进部署,提供高可用性并使您可以在运行时管理应用程序。
用于 Express 和其他 Node.js 应用程序的最流行的进程管理器包括:
- StrongLoop Process Manager
- PM2
- Forever
上述三种工具的比较请参阅http://strong-pm.io/compare/。其中,StrongLoop Process Manager无法在Windows平台工作,再综合比较PM2和Forever,由于Forever没有操作系统自启动的脚本,故选择PM2作为Windows平台Node.js应用的进程管理器。
Node.js应用开机如何自启动
选择PM2作为Node.js应用的进程管理器后,Node.js应用开机自启动的问题就变为如何开机自启动PM2。Windows平台存在两个自启动PM2的脚本:
- pm2-windows-service
- pm2-windows-startup
pm2-windows-service基于 node-windows将PM2注册为Windows服务,从而实现自启动。pm2-windows-startup则基于start-on-windows-boot在注册表中将PM2设为自启动程序,从而实现自启动。两种方案经测试,只有pm2-windows-startup在Windows Server 2012上可行,故选择pm2-windows-startup作为解决Node.js应用开机自启动的方案。
离线环境下如何部署Node.js应用
PM2和pm2-windows-startup必须全局安装,如何简单方便地在离线环境下全局安装这两个模块是一个问题。网上搜到的方法有:
- npm link
- npm-bundle
npm link[2]是npm的一个命令,可将本地包链接成全局包,但实际测试过程中,无法解决PM2包的依赖问题,故放弃。而npm-bundle[3]则能很好的解决PM2的依赖问题。具体过程为:
1 | \\在线环境下全局安装 |
离线部署Nodejs Express应用
1 | @echo off |
离线卸载Nodejs Express应用
1 | @echo off |
参考链接
- Express 应用程序的进程管理器, by Express
- npm离线安装全局包,内网安装npm中的包, by 爱死费崇政
- What exact command is to install pm2 on offline RHEL, by stackoverflow.
- NodeJS: PM2 Startup on Windows,by Walter Accantelli.
- bat脚本%cd%和%~dp0获取当前目录区别,by dmfrm