离线环境下Node.js应用部署方法

由 夕空 撰写于  2021年10月28日

离线环境下Node.js应用部署时需要解决以下三个基本问题:

  1. Node.js应用的进程管理,如性能监控、自动重启、负载均衡等
  2. Node.js应用开机如何自启动
  3. 离线环境下如何部署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 -i 0
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

参考链接

  1. Express 应用程序的进程管理器, by Express
  2. npm离线安装全局包,内网安装npm中的包, by 爱死费崇政
  3. What exact command is to install pm2 on offline RHEL, by stackoverflow.
  4. NodeJS: PM2 Startup on Windows,by Walter Accantelli.
  5. bat脚本%cd%和%~dp0获取当前目录区别,by dmfrm
  6. 离线安装npm包的几种方法

很遗憾自动bat方法失败,尚未找到原因,有部署通过的望留言告知下,谢谢!

以下是手动打包部署pm2

先在一台能连网的服务器上安装pm2

npm install pm2 -g

查询本机npm默认全局安装目录

npm config get prefix

CD node_modules/ 目录下执行打包:

tar -cvzf pm2.tar.gz pm2

到离线服务器部署

到全局node_modules/ 目录下执行解压:
tar xvf pm2.tar.gz
windows执行编译:
npm build pm2 -g

linux是全局变量,这里就不复述

理论上在离线服务器pm2文件放置在哪编译都可以,但最好还是放在全局目录内


声明:星耀夕空|版权所有,违者必究|如未注明,均为原创|本网站采用BY-NC-SA协议进行授权

转载:转载请注明原文链接 - 离线环境下Node.js应用部署方法


欢迎光顾我的小站!