以下介绍的两种方法各有优缺点,最终总结方法在此:
http://www.flashme.cn/index.php/web/98.html
离线环境下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的依赖问题。具体过程为:
\\在线环境下全局安装 npm install -g pm2 npm install -g pm2-windows-startup npm install -g npm-bundle \\打包tgz文件: npm-bundle pm2 npm-bundle pm2-windows-startup |
离线部署Nodejs Express应用
@echo off SET NODE_ENV=production call npm install .\pm2-2.10.3.tgz -g call npm install .\pm2-windows-startup-1.0.3.tgz -g call pm2-startup install call pm2 start ./bin/www --name app call pm2 save |
此方法安装pm2时失败,只能使用手动打包了,方法写在最下面
离线卸载Nodejs Express应用
@echo off call pm2 stop all call pm2-startup uninstall call npm uninstall pm2 -g call npm uninstall pm2-windows-startup -g |
参考链接
- 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
总结的离线部署方法:
先在一台能连网的服务器上安装pm2
npm install pm2 -g
npm install pm2-windows-startup -g
查询本机npm默认全局安装目录
npm config get prefix
将文件拷贝离线电脑全局node_modules/目录下,然后执行:
npm build pm2 -g
npm build pm2-windows-startup -g
pm2-startup install
Comments | NOTHING