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

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

在这里插入图片描述

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/pingmian/44932.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

自建邮局服务器相比云邮箱有哪些优势特性?

自建邮局服务器如何配置?搭建自建邮局服务器的技术? 尽管云邮箱服务提供了便捷和低成本的解决方案,自建邮局服务器依然具有许多独特的优势和特性,吸引了众多企业和组织。AokSend将深入探讨自建邮局服务器相比云邮箱的主要优势。 …

结合C++智能指针聊聊观察者模式

0. 问题 问题是这样,三个类A,B,C。AC都有指针指向同一个B类对象,C类可以回收了刚刚生成的B类对象的内存,A类应该对这个指针进行如何操作,才能确保使用该指针时不会产生野指针问题发生未定义结果? 这是前两天面试的时候…

BigMarket-基础层持久化数据库

需求 工程对接数据库 图例 结构说明 app-主要用于启动,没有业务逻辑 domain-业务逻辑,如积分的兑换,抽奖, infrastructure-基础层,技术支持,数据服务数据持久化:MySQL,redis&am…

「51媒体」能否提供一份成功邀约媒体的技巧?

传媒如春雨,润物细无声,大家好,我是51媒体网胡老师。 媒体宣传加速季,100万补贴享不停,一手媒体资源,全国100城线下落地执行。详情请联系胡老师。 成功邀约媒体的技巧涉及多个方面,包括了解媒体…

hyperworks软件许可优化解决方案

Hyperworks软件介绍 Altair 仿真驱动设计改变了产品开发,使工程师能够减少设计迭代和原型测试。提升科学计算能力扩大了应用分析的机会,使大型设计研究能够在限定的项目时间完成。现在,人工智能在工程领域的应用再次改变了产品开发。基于物理…

从源码到上线:互联网医院系统与医疗陪诊APP的开发全程解析

今天,笔者将详细解析从源码到上线的整个开发过程,帮助读者了解如何构建一个功能完善、用户体验良好的互联网医院系统与医疗陪诊APP。 一、项目启动与需求分析 1、需求分析 对于互联网医院系统,需求通常包括预约挂号、在线问诊、电子处方、…

Figma中文网?比Figma更懂你的神秘网站!

Figma奠定了在线UI设计工具的基本形式,许多国内设计师都在使用Figma。在本文中,我们将解密国内大型设计师使用的Figma灵魂合作伙伴,被称为Figma中文网络的即时设计资源社区。Figma中文网络UI设计工具的魅力是什么?让我们一起看看吧…

Java版Flink使用指南——将消息写入到RabbitMQ的队列中

大纲 新建工程新增依赖 编码自动产生数据写入RabbitMQ 测试工程代码 在 《Java版Flink使用指南——从RabbitMQ中队列中接入消息流》一文中,我们介绍了如何使用Java在Flink中读取RabbitMQ中的数据,并将其写入日志中。本文将通过代码产生一些数据&#xf…

JAVA PaddleOCR 部署

因为需要python环境,不熟悉py的人很痛苦,就和nodejs一样,报什么多,也不知道怎么解决,我也是研究了好几天,才部署成功了基于cpu模式的服务,看官方文档也没看明白什么,大家都在吐槽百度的文档&…

stm32实现软件spi

Driver_SPI.c #include "Driver_SPI.h"void Driver_SPI_Init(void) {/* 1. 开启GPIO时钟 PA和PC*/RCC->APB2ENR | (RCC_APB2ENR_IOPCEN | RCC_APB2ENR_IOPAEN);/* 2. 设置引脚的工作模式 *//* 2.1 cs: 推挽输出 PC13* CNF00 MODE11 */GPIOC->CRH & ~GPIO…

N32G45XVL-STB之lvgl的应用实例

目录 概述 1 硬件介绍 1.1 ST7796-LCD 1.2 MCU IO与LCD PIN对应关系 1.3 MCU IO与Touch PIN对应关系 2 N32G45x移植 LVGL 2.1 移植步骤 2.2 注意点 2.2.1 UI刷新函数 2.2.2 主函数中调用 3 LVGL的应用Demo 3.1 功能描述 3.2 代码实现 3.3 测试 N32G45XVL-STB之lv…

基于RK3588的NPU案例分享!6T是真的强!

RK3588 NPU简介 作为瑞芯微新一代旗舰工业处理器,RK3588 NPU性能可谓十分强大,6TOPS设计能够实现高效的神经网络推理计算。这使得RK3588在图像识别、语音识别、自然语言处理等人工智能领域有着极高的性能表现。 此外,RK3588的NPU还支持多种…

JDK-CompletableFuture

归档 GitHub: JDK-CompletableFuture 使用示例 https://github.com/zengxf/small-frame-demo/blob/master/jdk-demo/simple-demo/src/main/java/test/new_features/jdk1_8/juc/TestCompletableFuture.java基础方法使用测试:testThenApply2() JDK 版本 openjdk …

C# 异步编程Invoke、beginInvoke、endInvoke的用法和作用

C# 异步编程Invoke、beginInvoke、endInvoke的用法和作用 一、Invoke Invoke的本质只是一个方法,方法一定是要通过对象来调用的。 一般来说,Invoke其实用法只有两种情况: Control的Invoke Delegate的Invoke 也就是说,Invoke前…

C++:创建线程

在C中创建线程&#xff0c;最直接的方式是使用C11标准引入的<thread>库。这个库提供了std::thread类&#xff0c;使得线程的创建和管理变得简单直接。 以下是一个简单的示例&#xff0c;展示了如何在C中使用std::thread来创建和启动线程&#xff1a; 示例1&#xff1a;…

Python基础教学之五:异常处理与文件操作——让程序更健壮

Python基础教学之五&#xff1a;异常处理与文件操作——让程序更健壮 一、异常处理概念 1. 理解异常 异常是程序运行中发生的错误或意外情况&#xff0c;比如除以零、访问不存在的列表元素等。如果不进行处理&#xff0c;异常会导致程序终止运行。在编程过程中&#xff0c;我…

【YOLOv8】 用YOLOv8实现数字式工业仪表智能读数(二)

上一篇圆形表盘指针式仪表的项目受到很多人的关注&#xff0c;咱们一鼓作气&#xff0c;把数字式工业仪表的智能读数也研究一下。本篇主要讲如何用YOLOV8实现数字式工业仪表的自动读数&#xff0c;并将读数结果进行输出&#xff0c;若需要完整数据集和源代码可以私信。 目录 &…

android 消除内部保存的数据

在Android中&#xff0c;有多种方式可以消除应用内部保存的数据。这些数据可能存储在SharedPreferences、SQLite数据库、文件&#xff08;包括缓存文件&#xff09;或Content Providers中。以下是几种常见的方法来消除这些数据&#xff1a; SharedPreferences&#xff1a; 要删…

Spring AOP的几种实现方式

1.通过注解实现 1.1导入依赖 <dependency><groupId>org.springframework</groupId><artifactId>spring-aop</artifactId><version>5.1.6.RELEASE</version></dependency> 1.2定义注解 import java.lang.annotation.*;Targ…

初识Laravel(Laravel的项目搭建)

初识Laravel&#xff08;Laravel的项目搭建&#xff09; 一、项目简单搭建&#xff08;laravel&#xff09;1.首先我们确保使用国内的 Composer 加速镜像&#xff08;[加速原理](https://learnku.com/php/wikis/30594)&#xff09;&#xff1a;2.新建一个名为 Laravel 的项目&a…