当前位置: 首页 > news >正文

Nodejs 第八十六章(部署pm2)

Node.js如何部署?

如果要部署Nodejs项目,第一点肯定是需要有台服务器,第二点需要一个部署工具这里使用pm2

PM2

PM2 是一个非常流行的 Node.js 进程管理工具,用于在生产环境中运行和监控 Node.js 应用程序。它提供了多种功能,帮助开发者更好地管理和优化他们的应用程序,pm2 能做的其实有很多,比如监听文件改动自动重启,统一管理多个进程,内置的负载均衡,日志系统等等,

进程管理:PM2 可以轻松地启动、停止、重启和删除 Node.js 应用程序进程。它支持启动多个进程以利用多核 CPU,提高应用的性能和稳定性。

负载均衡:通过集群模式,PM2 可以创建多个应用实例并自动进行负载均衡,确保应用在高并发情况下仍能稳定运行。

自动重启:当应用程序崩溃或出现错误时,PM2 能自动重启应用,确保服务的高可用性。

日志管理:PM2 提供了全面的日志管理功能,可以方便地查看、合并和分析应用程序的日志信息。

监控和性能分析:PM2 内置监控功能,可以实时查看应用程序的性能指标(如 CPU 和内存使用情况)。此外,PM2 还集成了 Keymetrics,这是一个专门用于 Node.js 应用的性能监控和管理平台。

配置文件支持:PM2 支持通过 JSON 文件或 JavaScript 文件进行配置,便于管理多个应用和环境配置。

热重载:在不停止服务的情况下,PM2 可以重新加载应用代码,从而减少停机时间。

容器支持:PM2 可以与 Docker 等容器技术很好地集成,方便在容器化环境中管理 Node.js 应用。

基本使用

1.安装
npm install pm2 -g
2.基本使用

随便创建一个服务 当然express koa nestjs也都是能用 这儿只是http举个例子懒写的代码了

import http from 'node:http'http.createServer((req, res) => {res.writeHead(200)res.end('cluster is running')
}).listen(6000,()=>{console.log('http://127.0.0.1:6000')
})
1.启动一个服务 或者多个服务都是可以的
pm2 start app.js xx.js bb.js ......
2.查看当前正在运行的node进程
pm2 list

3.停止一个node进程
pm2 stop [process_id]

4.重启服务
pm2 restart [process_id]
5.删除服务
pm2 delete [process_id]
6.开机自启

linux

  1. 先运行一个脚本如 pm2 start app.js
  2. 保存进程信息 pm2 save
  3. 生成启动脚本 pm2 startup
  4. 开机自启命令 pm2 startup systemd
  5. 保存自启命令 pm2 save
  6. 删除自动启动 pm2 unstartup systemd
  7. 保存删除启动 pm2 save

windows

  1. 安装windows自动启动包 npm install pm2-windows-startup -g
  2. 安装自启脚本 pm2-startup install
  3. 启动服务 pm2 start xxxx
  4. 保存自启服务 pm2 save
  5. 删除自动启动 pm2-startup uninstall
3.日志

可以收集各种日志反馈调试问题

pm2 log

4.监控面板

可以实时监控所有由 PM2 管理的进程。这个监控面板提供了丰富的实时数据,包括 CPU 使用率、内存使用情况、重启次数、日志输出等信息

实时监控:在开发和生产环境中实时监控应用程序的性能,及时发现和处理异常。

调试和诊断:查看日志输出,帮助调试和诊断问题。

资源管理:监控资源使用情况,优化应用程序的性能和资源分配。

pm2 monit

5.负载均衡

在上一章我们介绍过了集群的能力,当然pm2内部封装了集群的能力可以让我们的应用程序更加强大

pm2 start index.js -i [max | number] 

可以指定经线程数量,也可以设置max直接设置最高

6.配置文件

调用下面命令在项目中生成配置文件 ecosystem.config.js 或者手动创建也可以

pm2 init simple

ecosystem.config.js

apps: [{ name: "my-app", script: "./app.js", instances: 4, exec_mode: "cluster", watch: true, max_memory_restart: "200M", env: { NODE_ENV: "development", PORT: 3000 }, env_production:{ NODE_ENV: "production", PORT: 8080 } 
}]

apps:一个包含应用程序配置对象的数组,每个对象代表一个应用程序。

name:应用程序名称,用于在 PM2 中标识。

script:要启动的脚本文件路径。

instances:实例数量,可以是具体数字或者 max,以利用所有可用的 CPU 核心。

exec_mode:执行模式,常用值有 fork(默认)和 cluster

watch:启用文件监视,如果文件有变化,应用会自动重启。

max_memory_restart:当内存使用超过指定值时自动重启应用。

env:普通环境变量配置。

env_production:生产环境变量配置,使用 pm2 start ecosystem.config.js --env production 命令启动时生效。

启用配置文件

pm2 start ecosystem.config.json #这样就可以了 不用在单独指定js文件了

部署服务器操作也是一样的

结束语

到此Nodejs课程将完结,后续有新增的API还会继续补充,感谢大家一路以来的支持,另外这套Nodejs教程是有配套的视频教程的

哔哩哔哩 小满zs

欲买桂花同载酒,终不似,少年游

在这里插入图片描述

相关文章:

  • 北京网站建设多少钱?
  • 辽宁网页制作哪家好_网站建设
  • 高端品牌网站建设_汉中网站制作
  • 如何在uniapp中使用websocket?
  • 如何选择一款适合自己的鼠标?
  • 在Mac上一键安装Mysql(解决所有安装问题)
  • 网络安全威胁也日益复杂,分布式拒绝服务(DDoS)攻击因其高频率和破坏力而成为一大挑战
  • Okhttp实现原理
  • linux kernel ptr dump
  • python 知识点累积
  • js逆向-webpack-python
  • YOLOv8损失函数改进-增加MPDIoU提升边界框回归精度【附代码】
  • 苹果入局,AI手机或将实现“真智能”?
  • Spring懒加载Bean机制
  • 昇思25天学习打卡营第19天 | 基于MindSpore通过GPT实现情感分类
  • PGCCC|【PostgreSQL】PCA认证考试大纲#postgresql认证
  • GitHub 站点打不开
  • JVM原理(二十):JVM虚拟机内存的三特性详解
  • 【5+】跨webview多页面 触发事件(二)
  • CentOS 7 修改主机名
  • classpath对获取配置文件的影响
  • codis proxy处理流程
  • flutter的key在widget list的作用以及必要性
  • Javascripit类型转换比较那点事儿,双等号(==)
  • ⭐ Unity 开发bug —— 打包后shader失效或者bug (我这里用Shader做两张图片的合并发现了问题)
  • Vue UI框架库开发介绍
  • Webpack 4x 之路 ( 四 )
  • 复杂数据处理
  • 基于遗传算法的优化问题求解
  • 如何解决微信端直接跳WAP端
  • 实习面试笔记
  • 提升用户体验的利器——使用Vue-Occupy实现占位效果
  • 我看到的前端
  • 如何用纯 CSS 创作一个货车 loader
  • 整理一些计算机基础知识!
  • 正则表达式-基础知识Review
  • ‌分布式计算技术与复杂算法优化:‌现代数据处理的基石
  • # Java NIO(一)FileChannel
  • #07【面试问题整理】嵌入式软件工程师
  • #1014 : Trie树
  • #if 1...#endif
  • #微信小程序:微信小程序常见的配置传值
  • #周末课堂# 【Linux + JVM + Mysql高级性能优化班】(火热报名中~~~)
  • (31)对象的克隆
  • (C语言)输入一个序列,判断是否为奇偶交叉数
  • (pojstep1.1.1)poj 1298(直叙式模拟)
  • (附源码)ssm旅游企业财务管理系统 毕业设计 102100
  • (附源码)计算机毕业设计SSM疫情居家隔离服务系统
  • (剑指Offer)面试题34:丑数
  • (转)eclipse内存溢出设置 -Xms212m -Xmx804m -XX:PermSize=250M -XX:MaxPermSize=356m
  • (转)Mysql的优化设置
  • (转)机器学习的数学基础(1)--Dirichlet分布
  • (转)拼包函数及网络封包的异常处理(含代码)
  • .describe() python_Python-Win32com-Excel
  • .NET IoC 容器(三)Autofac
  • .vollhavhelp-V-XXXXXXXX勒索病毒的最新威胁:如何恢复您的数据?
  • @CacheInvalidate(name = “xxx“, key = “#results.![a+b]“,multi = true)是什么意思
  • @EnableWebSecurity 注解的用途及适用场景