第十五节:node项目部署(pm2部署windows、linux、问题解决)
一. 背景
之前无论采用node启动 或者 nodemon启动程序也好,如果终端被关闭掉了呢?
-
那么这个时候相当于启动的Node进程会被关闭掉;
-
我们将无法继续访问服务器;
在真实的部署过程中,我们会使用一个工具pm2来管理Node的进程:
-
PM2是一个Node的进程管理器;
-
我们可以使用它来管理Node的后台进程;
-
这样在关闭终端时,Node进程会继续在后台执行,那么服务器就可以继续为前端提供服务了;
二. 实操
(之前文章:https://www.cnblogs.com/yaopengfei/p/14549481.html)
1. 准备
首先要全局安装pm2 【npm install pm2 -g】
其次,准备好要部署项目,就以前面的node项目实操为例,入库函数为 src/main.js,如下图: 【部署的时候,不能有中文目录,否则乱码】

2. 部署
(1). 进入到src目录下,运行指令 【pm2 start ./src/main.js --name nodeapi1 】, 其中main.js 为入口函数名, nodeapi1为部署后的项目名称。
注: 这里要在根目录下运行指令,不要直接进入src再运行,否则接口访问不通

(2). 运行指令 【pm2 list】查看所有进程

(3). 使用postman进行测试
【请求成功】
(4). 关闭控制台,继续用postman进行测试
【请求成功】
(5). 运行指令 【pm2 stop nodeapi1】,关闭指定名称的项目

3. 其它指令
启动项目:【pm2 start app.js --name nodeapi】
查看日志 【pm2 logs】仅显示15条
指定条数查看日志 【pm2 logs --lines 200 --timestamp】 查看最新的200行日志
显示所有进程状态:【pm2 list】
停止指定的进程 【pm2 stop 0】 特别注意:这里的 0,对应的是上图中的 id,而不是pid ,这里的 0,也可以换成上面的name,比如: 【pm2 stop nodeapi1】,下面的依次类推。
停止所有进程 【 pm2 stop all】
重启所有进程 【pm2 restart all】
重启指定的进程 【pm2 restart 0】
杀死指定的进程 【pm2 delete 0】
杀死全部进程 【pm2 delete all】
后台运行pm2,启动4个app.js,实现负载均衡 【pm2 start app.js -i 4】
三. 部署出现的问题
1. 使用pnpm start 正常运行,然后使用pm2部署无法运行,报错 ts-node找不到,或者某型类型找不到。
错误1:
Interpreter /usr/lib/node_modules/pm2/node_modules/.bin/ts-node is NOT AVAILABLE in PATH. (type 'which /usr/lib/node_modules/pm2/node_modules/.bin/ts-node' to double check.)
错误2:

原因分析:ts-node路径找不到、还有一些最新的ES高级语法不支持。
解决方案
先打包,使用pm2发布打包后的版本。
PS: 这里的打包可借助bable 或者 tsup库 (chatgpt-server中使用了)进行打包。

!
- 作 者 : Yaopengfei(姚鹏飞)
- 博客地址 : http://www.cnblogs.com/yaopengfei/
- 声 明1 : 如有错误,欢迎讨论,请勿谩骂^_^。
- 声 明2 : 原创博客请在转载时保留原文链接或在文章开头加上本人博客地址,否则保留追究法律责任的权利。

浙公网安备 33010602011771号