第十五节: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 : 原创博客请在转载时保留原文链接或在文章开头加上本人博客地址,否则保留追究法律责任的权利。
 
posted @ 2023-02-27 14:54  Yaopengfei  阅读(1015)  评论(2)    收藏  举报