热门标签 | HotTags
当前位置:  开发笔记 > 前端 > 正文

使用pm2部署node生产环境的方法步骤

这篇文章主要介绍了使用pm2部署node生产环境的方法步骤,小编觉得挺不错的,现在分享给大家,也给大家做个参考。一起跟随小编过来看看吧

一、PM2是什么

  • 是可以用于生产环境的Nodejs的进程管理工具,并且它内置一个负载均衡。它不仅可以保证服务不会中断一直在线,并且提供0秒reload功能,还有其他一系列进程管理、监控功能。并且使用起来非常简单。
  • 嗯嗯,最好的用处就是监控我们的生产环境下的node程序运行状态,让它给我们日以继日的处于工作状态。
  • pm2官方文档

二、为森么要使用pm2

  • 原始社会的我们开发node服务端程序一般过程:
    • 编写好node程序app.js,运行node app.js;或者写入script使用npm运行;打开浏览器访问;
    • 好像需要修改内容,浏览器对修改的内容没有显示出来?->node app.js->再次运行;
    • 浏览器忽然访问不到服务,好像出错啦?重启下->node app.js->再次运行;
    • 哎呀开了好多控制台窗口,一不小心关闭了,服务又访问不到了,继续打开控制台->node app.js->再次运行;
  • 好崩溃!好像有个工具nodemon;安装使用nodemon app.js;哇,可以自动监听文件修改变化自动重启,但是关闭控制台服务还是会被摧毁。
  • 通过这个很常用的场景,我们了解到要避免这些麻烦一个服务器至少需要有:后台运行和自动重启,这两个能力。
  • 再来看看使用pm2可拥有的能力:
    • 日志管理;两种日志,pm2系统日志与管理的进程日志,默认会把进程的控制台输出记录到日志中;
    • 负载均衡:PM2可以通过创建共享同一服务器端口的多个子进程来扩展您的应用程序。这样做还允许以零秒停机时间重新启动应用程序。
    • 终端监控:可以在终端中监控应用程序并检查应用程序运行状况(CPU使用率,使用的内存,请求/分钟等)。
    • SSH部署:自动部署,避免逐个在所有服务器中进行ssh。
    • 静态服务:支持静态服务器功能
    • 支持开发调试模式,非后台运行,pm2-dev start
    • 。。。。。太过强大!

pm2常用命令

启动服务pm2 start [options] 启动指定应用

pm2 start app.js        //启动app.js应用
pm2 start app.js --name app  //启动应用并设置name
pm2 start app.sh        //脚本启动

pm2 start app.js --watch  //监听模式启动,当文件发生变化,自动重启

//max 表示PM2将自动检测可用CPU的数量并运行尽可能多的进程
//max可以自定义,如果是4核CPU,设置为2则占用2个
pm2 start app.js -i max //启用群集模式(自动负载均衡)

pm2-dev start ... // 开发模式启动,即不启用后台运行

查看启动列表pm2 list

显示应用程序详细信息pm2 show [options] 显示指定应用详情

pm2 show [Name]   //根据name查看
pm2 show [ID]    //根据id查看

停止指定应用pm2 stop [options] 停止指定应用

pm2 stop all        //停止所有应用
pm2 stop [AppName]    //根据应用名停止指定应用
pm2 stop [ID]       //根据应用id停止指定应用

重启应用pm2 reload|restart [options] 重启指定应用

pm2 restart app.js    //同时杀死并重启所有进程,短时间内服务不可用,生成环境慎用
pm2 reload app.js    //重新启动所有进程,0秒重启,始终保持至少一个进程在运行
pm2 gracefulReload all  //以群集模式重新加载所有应用程序

启动静态服务器pm2 serve ./dist 8080将目录dist作为静态服务器根目录,端口为8080

删除应用pm2 delete [options] 删除指定应用;如果修改了应用配置行为,需要先删除应用,重新启动后方才会生效,如修改脚本入口文件;

pm2 delete all        //关闭并删除应用
pm2 delete [AppName]    //根据应用名关闭并删除应用
pm2 delete [ID]      //根据应用ID关闭并删除应用

pm2 kill 杀掉pm2管理的所有进程;

pm2 logs 查看指定应用的日志,即标准输出和标准错误

pm2 logs      //查看所有应用日志
pm2 logs [Name]  //根据指定应用名查看应用日志
pm2 logs [ID]   //根据指定应用ID查看应用日志

pm2 monit 监控各个应用进程cpu和memory使用情况;

PM2配置方式

命令生产默认示例配置文件pm2 ecosystem或pm2 init,运行默认会生成ecosystem.config.js配置文件

module.exports = {
 apps: [
  {
   name: 'back-Api',   //应用名
   script: './server/start.js',  //应用文件位置
   env: {
    PM2_SERVE_PATH: "./apidoc",  //静态服务路径
    PM2_SERVE_PORT: 8080,  //静态服务器访问端口
    NODE_ENV: 'development' //启动默认模式
   },
   env_production : {
    NODE_ENV: 'production' //使用production模式 pm2 start ecosystem.config.js --env production
   },
   instances:"max",     //将应用程序分布在所有CPU核心上,可以是整数或负数
   instance_var: "INSTANCE_ID",
   exec_mode: "cluster",
   watch:[
    "server",
   ], //监听模式,不能单纯的设置为true,易导致无限重启,因为日志文件在变化,需要排除对其的监听
   merge_logs: true,     //集群情况下,可以合并日志
  }
 ],
 deploy: {
   production : {
    user: 'node',           //ssh 用户
    host: '212.83.163.1',       //ssh 地址
    ref: 'origin/master',       //GIT远程/分支
    repo: 'git@github.com:repo.git',  //git地址
    path: '/var/www/production',    //服务器文件路径
    "post-deploy": 'npm install && pm2 reload ecosystem.config.js --env production' //部署后的动作
   }
 }
}; 

自定义json配置文件如:processes.json;启动pm2 start processes.json

  {
   "apps": [{
    "name": "app", //名称
    "script": "./", //程序入口
    "cwd": "./",      //根目录
    "watch":[
      "views"
    ],//需要监控的目录
    "error_file":"./logs/err.log",//错误输出日志
    "out_file":"./logs/out.log", //日志
    "log_date_format":"YYYY-MM-DD HH:mm Z" //日期格式
    }]
  }

pm2常用配置项解析

1. apps:json结构,apps是一个数组,每一个数组成员就是对应一个pm2中运行的应用

2. name:应用程序名称"app"

3. cwd:应用程序所在的目录"./"

4. script:应用程序的脚本路径"./"

5. log_date_format: 日志文件名输出日期格式"YYYY-MM-DD HH:mm Z"

6. error_file:自定义应用程序的错误日志文件"./logs/app-err.log",

7. out_file:自定义应用程序日志文件"./logs/app-out.log"

8. instances: 应用启动实例个数,仅在cluster模式有效 默认为fork;或者 max

9. min_uptime:最小运行时间,这里设置的是60s即如果应用程序在60s内退出,pm2会认为程序异常退出,此时触发重启max_restarts设置数量

10. max_restarts:设置应用程序异常退出重启的次数,默认15次(从0开始计数)

11. cron_restart:定时启动,解决重启能解决的问题

12. watch:是否启用监控模式,默认是false。如果设置成true,当应用程序变动时,pm2会自动重载。这里也可以设置你要监控的文件。

13. "ignore_watch": [                           // 不用监听的文件
            "node_modules",
            "logs"
        ],
13. merge_logs:// 设置追加日志而不是新建日志

14. exec_interpreter:应用程序的脚本类型,这里使用的shell,默认是nodejs

15. exec_mode:应用程序启动模式,这里设置的是cluster_mode(集群),默认是fork

16. autorestart:启用/禁用应用程序崩溃或退出时自动重启,默认为true, 发生异常的情况下自动重启

17. vizion:启用/禁用vizion特性(版本控制)

18. "args": "", // 传递给脚本的参数

19. env: {
        PM2_SERVE_PATH: "./apidoc",    //静态服务路径
        PM2_SERVE_PORT: 8080,   //静态服务器访问端口
        NODE_ENV: 'development' //启动默认模式
      },

20. env_production : {
        NODE_ENV: 'production'  //使用production模式 pm2 start ecosystem.config.js --env production
      },

pm2配合log4js处理日志

1、pm2启动时通常会发现log4js记录不到日志信息;

2、解决方案,安装pm2的pm2-intercom进程间通信模块

3、在log4js的配置文件logger.js里添加如下命令:

pm2: true, 
pm2InstanceVar: 'INSTANCE_ID' 

4、pm2配置文件中添加"instance_var": "INSTANCE_ID", // 添加这一行 字段

5、发现如果没有设置群集模式"exec_mode": "cluster",也会记录不到;

其他

log4js日志配置使用详情Koa日志中间件封装开发(log4js)

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持。


推荐阅读
  • Node.js在服务器上的多种部署策略
    本文探讨了Node.js应用程序在服务器上部署的几种有效方法,包括使用Screen、PM2以及通过宝塔面板进行简易管理。 ... [详细]
  • 实践指南:使用Express、Create React App与MongoDB搭建React开发环境
    本文详细介绍了如何利用Express、Create React App和MongoDB构建一个高效的React应用开发环境,旨在为开发者提供一套完整的解决方案,包括环境搭建、数据模拟及前后端交互。 ... [详细]
  • 深入理解SAP Fiori及其核心概念
    本文详细介绍了SAP Fiori的基本概念、发展历程、核心特性、应用类型、运行环境以及开发工具等,旨在帮助读者全面了解SAP Fiori的技术框架和应用场景。 ... [详细]
  • 页面预渲染适用于主要包含静态内容的页面。对于依赖大量API调用的动态页面,建议采用SSR(服务器端渲染),如Nuxt等框架。更多优化策略可参见:https://github.com/HaoChuan9421/vue-cli3-optimization ... [详细]
  • 实现Win10与Linux服务器的SSH无密码登录
    本文介绍了如何在Windows 10环境下使用Git工具,通过配置SSH密钥对,实现与Linux服务器的无密码登录。主要步骤包括生成本地公钥、上传至服务器以及配置服务器端的信任关系。 ... [详细]
  • 利用Node.js实现PSD文件的高效切图
    本文介绍了如何通过Node.js及其psd2json模块,快速实现PSD文件的自动化切图过程,以适应项目中频繁的界面更新需求。此方法不仅提高了工作效率,还简化了从设计稿到实际应用的转换流程。 ... [详细]
  • Docker安全策略与管理
    本文探讨了Docker的安全挑战、核心安全特性及其管理策略,旨在帮助读者深入理解Docker安全机制,并提供实用的安全管理建议。 ... [详细]
  • 调试利器SSH隧道
    在开发微信公众号或小程序的时候,由于微信平台规则的限制,部分接口需要通过线上域名才能正常访问。但我们一般都会在本地开发,因为这能快速的看到 ... [详细]
  • 本文详细介绍了如何搭建一个高可用的MongoDB集群,包括环境准备、用户配置、目录创建、MongoDB安装、配置文件设置、集群组件部署等步骤。特别关注分片、读写分离及负载均衡的实现。 ... [详细]
  • 在现代前端开发中,组件化已成为不可或缺的技术,尤其在 React 和 Vue 生态中。然而,组件的管理和测试一直是开发者面临的挑战。本文将介绍如何使用 Storybook 来简化这一过程,提高开发效率。 ... [详细]
  • 应对高并发面试题:构建稳健的系统架构策略
    本文探讨了如何在面试中有效地回答有关高并发系统设计的问题。通过逐步介绍从单机部署到集群化、数据库优化、缓存应用及消息队列的使用,帮助读者建立解决高并发挑战的基本思路。 ... [详细]
  • 深入解析 Git 代码提交流程及常见问题处理
    本文详细阐述了使用 Git 进行代码提交的具体步骤,并提供了遇到常见问题时的解决方案,旨在帮助开发者更加高效地管理代码。 ... [详细]
  • 本文介绍了.hbs文件作为Ember.js项目中的视图层,类似于HTML文件的功能,并详细讲解了如何在Ember.js应用中集成Bootstrap框架及其相关组件的方法。 ... [详细]
  • 小编给大家分享一下Vue3中如何提高开发效率,相信大部分人都还不怎么了解,因此分享这篇文章给大家参考一下,希望大家阅读完这篇文章后大有收获, ... [详细]
  • Angular 4 生产模式编译 ng build --prod --aot 报错解决方案
    在项目中使用 Angular CLI 版本 1.3.2,并通过 cnpm 安装依赖包时,使用 ng build --prod --aot 编译可能会遇到错误。本文将详细介绍该问题的解决方法。 ... [详细]
author-avatar
湖南美景创意动画设计有限公司
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有