node.js PM2部署项目

这篇具有很好参考价值的文章主要介绍了node.js PM2部署项目。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

文章更新
2023-05-21 更新NSSM安装服务的方式

pm2 是什么

pm2 是一个守护进程管理工具,它能帮你守护和管理你的应用程序。通常一般会在服务上线的时候使用 pm2 进行管理。本文围绕以下重点进行讲解:安装pm2;命令行部署到PM2;PM2查看日志等命令;PM2进行负载均衡;PM2配置文件模式;日志插件pm2-logrotate;持久化PM2。
node.js PM2部署项目

PM2官网 https://pm2.keymetrics.io/
PM2中文网 https://pm2.fenxianglu.cn/docs/start

安装pm2

首先我们先创建一个简单的 node 服务,新建文件夹执行npm init,然后装 pm2

npm i pm2 -g

准备测试代码

准备一个pm2目录,例如D:\workspace\nodejs\pm2
新建 index1.js 和 index2.js,写两个简单的 http 服务,然后用 pm2 进行管理
node.js PM2部署项目

//index1.js
let http = require("http");
let server = http.createServer();
server.on("request", function (req, res) {
  console.log("------------------index1");
  res.write("hello pm2 https://zhengkai.blog.csdn.net/ ");
  res.end();
});

server.listen(3001, function () {
  console.log(`服务器启动成功,点击 http://localhost:3000/ 进行访问`);
});
//index2.js
let http = require("http");
let server = http.createServer();
server.on("request", function (req, res) {
  console.log("------------------index2");
  res.write("hello pm2 https://zhengkai.blog.csdn.net/ ");
  res.end();
});

server.listen(3002, function () {
  console.log(`服务器启动成功,点击 http://localhost:3001/ 进行访问`);
});

通过PM2启动node.js程序

接下来我们将使用 pm2 的start命令来分别启动这两个个程序

pm2 start index1.js
pm2 start index2.js

node.js PM2部署项目
之后分别访问 http://localhost:3001/ 和访问 http://localhost:3002/ , 可以看到浏览器显示“hello pm2 https://zhengkai.blog.csdn.net/”
node.js PM2部署项目

另外,如果你的代码有什么update的话,可以执行pm2 restart 0 1 (在只有少数几个应用的情况下,你可以很容易知道id)
node.js PM2部署项目

查看日志,执行以下命令可以看到我们程序的日志,默认只加载最后15行

pm2 log
node.js PM2部署项目

并且可以看到程序的日志被归档到C:\Users\mosho\.pm2\logs\

  • indexN-out.log
  • indexN-error.log

pm2 的命令还有很多,下面列举几个

  • 启动并查看日志 pm2 start api.js --attach
  • 启动并检测变更 pm2 start api.js --watch
  • 停止 1 个/多个/所有程序 pm2 stop id/id1 id2 id3/all
  • 杀死 1 个/多个/所有程序 pm2 delete id/id1 id2 id3/all
  • 重启 1 个/多个/所有程序 pm2 restart id/id1 id2 id3/all
  • 列出应用程序 pm2 ls
  • 查看监控面板 pm2 monit
  • 查看程序数据 pm2 show [id]

停止指定id的应用
node.js PM2部署项目
删除指定应用(如果你以fork模式运行,需要进行负载均衡,则最好删除后重新start)
node.js PM2部署项目

如何使用PM2进行负载均衡

NodeJS 是一个异步单线程语言,倘若不做任何多线程处理直接部署到服务器上,那么它也只能使用服务器的一个线程,这样是非常浪费服务器性能的,通常我们可以改造以下项目进行多并发的支持,然后以多线程的形式运行。

注意*:运行以下命令之前,请用pm2 ls查看并确认index1在列表中没有存在,如果存在请先删除pm2 delete 0 1

使用 pm2 只需一个命令就能让我们的程序充分利用服务器的 CPU,拿 index1.js 为例:

pm2 start index1 -i max
我的电脑是 6核 12线程,它就会开 12个线程
node.js PM2部署项目

pm2 start index1 -i 2
也可以手工指定是2个线程

对于cluster模式的应用,可以使用pm2 stop {name}的方式来停止所有线程,例如pm2 stop index1
node.js PM2部署项目

配置文件部署PM2

上面的例子我们都是使用命令行进行管理的,这样其实挺不方便的,好在 pm2 提供了配置文件的形式。

我们直接使用命令pm2 init simple即可生成一个简单的配置文件ecosystem.config.js,修改一下让它指向我们的两个服务

module.exports = {
  apps: [
    {
      name: "index1",
      script: "./index1.js",
    },
    {
      name: "index2",
      script: "./index2.js",
    },
  ],
};

我们将原先的进程都 kill 掉(可以pm2 stop all 然后pm2 delete all),然后执行pm2 start ecosystem.config.js,同样的我们的两个服务都被启动了
node.js PM2部署项目

进阶配置

这里可以配置一些进阶的设置,例如注入环境变量,设置日志格式,设置定时重启,设置监听模式等等。

//https://zhengkai.blog.csdn.net/
module.exports = {
  apps: [
    {
      name: "index1", //name
      script: "./index1.js", //相对于pm2 start 的相对路径
      cwd: "", //要启动的应用程序的目录
      instances: 2, //要启动实例的数量,就是上面提到的负载
      watch: true, //是否启动监听
      env: { NODE_ENV: "development" }, // 将出现在您的应用程序中的 env 变量
      env_xxx: {
        NODE_ENV: "xxx", //使用pm2注入xxx变量进行切换
      },
      log_date_format: "YYYY-MM-DD HH:mm Z", //日志时间格式
      error_file: "./log/index-error.log", //错误文件路径
      out_file: "./log/index-out.log", //输出日志文件路径
      max_restarts: 10, //最大重启数
      restart_delay: 4000, //重启延迟时间ms
      autorestart: true, //是否自动重启
      cron_restart: "0 0 3 * * ?", //定时重启 使用cron表达式,每晚3点重启
    },
    {
      name: "index2",
      script: "./index2.js",
    },
  ],
};

node.js PM2部署项目

日志分析与pm2-logrotate插件

作为一个应用系统,日志分析也是非常重要的。但是pm2 自带的日志功能是不支持日志分割的。随着时间的推移,日志文件会越来越大,不仅会影响性能,后期排查问题也十分麻烦。

log_date_format: "YYYY-MM-DD HH:mm Z", //日志时间格式
error_file: "./log/index-error.log", //错误文件路径
out_file: "./log/index-out.log", //输出日志文件路径

所以通常我们都需要对日志进行分割。日志分割操作很简单,只需要安装pm2-logrotate插件即可,注意这里是 pm2 install

pm2 install pm2-logrotate
node.js PM2部署项目

  • Compress:是否通过 gzip 压缩日志
  • max_size:单个日志文件的大小
  • retain:保留的日志文件个数
  • dateFormat:日志文件名中的日期格式,默认是 YYYY-MM-DD_HH-mm-ss
  • rotateModule:是否把 pm2 本身的日志也进行分割,
  • workerInterval:检查文件时间间隔
  • rotateInterval:设置强制分割,默认值是 0 0 * * *,意思是每天晚上 0 点分割,这里使用的是 corn 表达式,不会的可以搜索一下

pm2-logrotate的一些命令和实践

查看默认配置
pm2 conf
node.js PM2部署项目

设置日志大小为1K(线上建议10M左右的size并启用compress压缩模式)
pm2 set pm2-logrotate:max_size 1K
node.js PM2部署项目

安装完插件,建议停止并删除所有服务,然后重新挂载。可以看到最后有一个Module模块并提示挂载了pm2-logrotate
pm2 stop all
pm2 delete all
pm2 start ecosystem.config.js
node.js PM2部署项目
node.js PM2部署项目

防止Pm2服务意外终止简易方法:Windows任务计划方式挂载PM2

1.首先先把任务保存和缓存起来。

pm2 save
node.js PM2部署项目

2.然后新建一个bat文件(例如叫pm2-startup.bat),内容为恢复服务

pm2 resurrect
node.js PM2部署项目
node.js PM2部署项目

3.打开windows自带的任务计划管理,英文版搜索Task Scheduler
node.js PM2部署项目
node.js PM2部署项目
node.js PM2部署项目
node.js PM2部署项目
注意* : 记得这里起始于,输入一下pm2项目的路径,可以避免一些运行问题(例如路径)
node.js PM2部署项目
(注意:双击进入计划任务属性,把安全选项修改为“不管用户是否登陆都运行” ,否则像server上的一些service account,是不需要登陆的,那么这个任务将不会起作用)*
node.js PM2部署项目
需要输入一次密码
node.js PM2部署项目

防止Pm2服务意外终止强力方法:Pm2-installer

那些什么node-windows, pm2 as windows那些都过时了,试试这个吧。
https://pm2.fenxianglu.cn/docs/general/persistent-application

https://github.com/jessety/pm2-installer

单js项目部署:NSSM安装系统服务

1.首先到NSSM官网下载NSSM 2.24
http://www.nssm.cc/download
node.js PM2部署项目
2.解压NSSM,找到win64/nssm.exe
node.js PM2部署项目
3.执行一下命令进行安装

nssm install pm2service
node.js PM2部署项目文章来源地址https://www.toymoban.com/news/detail-460421.html

到了这里,关于node.js PM2部署项目的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • Linux搭建node环境-MobaXterm+node+pm2安装

    1.登录session 2.安装X11-forwarding 我也不知道这个有什么用,但是有个叉叉在那里有点难受,就把它解决了 什么是X11-forwarding?怎么使用? 安装完就没了叉叉 3.安装node 由于直接 yum 安装的 nodejs 版本太低,所以参考这篇文章安装:Linux中安装node 4.安装pm2 建立软连接: 输入pm2 li

    2024年02月16日
    浏览(39)
  • docker基础操作与进阶 - 搭建基于pm2的node环境

    最近遇到一台机器需要部署两个不同版本node的情况,首先就想起了docker,想必还有其他类似环境问题的情况,需要进行项目隔离,而docker正是用来解决这个问题的。 docker的优势就在于环境隔离,相当于可以在一台机器上切割成若干个子机器,而各个子机器之前互不影响,另

    2024年02月11日
    浏览(34)
  • 一文教你如何使用Node进程管理工具-pm2

    pm2 是一个守护进程管理工具,它能帮你守护和管理你的应用程序。通常一般会在服务上线的时候使用 pm2 进行管理。pm2 能做的其实有很多,比如监听文件改动自动重启,统一管理多个进程,内置的负载均衡,日志系统等等,下面就让我们看下 pm2 是如何使用的吧 首先我们先创建一个简

    2023年04月25日
    浏览(32)
  • pm2 运行springboot项目

    注意安装java版本必须和打包的java版本一致 java安装 安装nodejs 通过npm安装pm2 pm2.json 运行 启动项目即可 参考 https://www.bbsmax.com/A/KE5QmgZ35L/ https://blog.csdn.net/Aria_Miazzy/article/details/103895455

    2024年02月09日
    浏览(34)
  • .Net 6.0 部署Linux+Nginx +PM2教程

    今天带大家将本地.Net6.0项目部署到Linux系统中,其中有用到Nginx反向代理和PM2进程管理工具,希望本偏文章能对你有所帮助,成为你成功路上的垫脚石! 背景: 在.Net 5.0横空出世之后,.Net已经支持夸平台了,身为一名合格的码农,你敢说你不会用Linux? 哈哈哈开个玩笑,因为工作最近接手

    2023年04月19日
    浏览(27)
  • linux下express+puppeteer安装部署并用PM2守护进程

    承上篇 puppeteer-不需重构,无痛加强vue单页面应用的SEO,提升百度收录排名,是在本地nginx部署前端,本地另起express服务进行测试,下面我们来讲讲如何部署express到linux服务器,并用PM2守护进程。 node 16.14.1 puppeteer ^20.7.2 express ^4.18.2 在此仅作为本人开发记录,不一定能解决你的

    2024年02月09日
    浏览(27)
  • (后续补充)vue+express、gitee pm2部署轻量服务器

    首先 防火墙全部关闭算了 首先 防火墙全部关闭算了 首先 防火墙全部关闭算了 首先 防火墙全部关闭算了 首先 防火墙全部关闭算了 首先 防火墙全部关闭算了 关闭防火墙 systemctl stop firewalld 重新载入防火墙使设置生效 firewall-cmd --reload 后端的 pm2.config.cjs 更改为 其次 前端打

    2024年02月05日
    浏览(36)
  • 保姆级阿里云ESC服务器安装nodejs和服务器node服务管理工具PM2安装使用

    默认 /opt 下边 /opt/node 也可建到其他地方,如/usr/local/node 等 创建后切换到文件夹下 cd /opt/node 使用命令下载node wget https://nodejs.org/dist/v18.12.0/node-v18.12.0-linux-x64.tar.xz 或者到node官网下载tar包到本地然后上传到node所在位置 上传 scp命令为 scp node-v18.12.0-linux-x64.tar.xz root@0.0.0.0:/opt/

    2024年02月08日
    浏览(43)
  • nuxt3项目在宝塔上使用pm2放到服务器

    最近在将nuxt3项目扔到服务器上的时候遇到了一些问题,发现打包后的nuxt项目与正常的vue文件有些差别,缺失了index.html文件。 这边就记录下nuxt3项目是怎么放到服务器上的🤔 一、打包nuxt3项目 执行对应的打包命令    yarn build    二、找到打包后的文件     三、这里我使用

    2024年02月21日
    浏览(30)
  • 飞桨中的李宏毅课程中的第一个项目——PM2.5的预测

    所谓的激活函数,就是李宏毅老师讲到的sigmoid函数 和 hard sigmoid函数 ,ReLU函数那些 现在一点点慢慢探索,会成为日后想都做不到的经历,当你啥也不会的时候,才是慢慢享受探索的过程。 有一说一,用chatGPT分解代码是真的香! part1:初始文件处理 补充关于Shell命令的相关知

    2024年02月11日
    浏览(26)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包