zoukankan      html  css  js  c++  java
  • 浅析pm2实用入门指南、部署常用命令及配置文件方式

      这里有篇博客写的挺不错的,可以参考学习:PM2实用入门指南,不过最好的学习方式还是看官方文档。

    一、PM2 介绍

      PM2(Process Manager 2 )是具有内置负载均衡器的Node.js应用程序的生产运行时和进程管理器。 它允许您永久保持应用程序活跃,无需停机即可重新加载它们,并促进常见的Devops任务。

    1、pm2 特性

    (1)日志管理:应用程序日志保存在服务器的硬盘中~/.pm2/logs/

    (2)负载均衡:PM2可以通过创建共享同一服务器端口的多个子进程来扩展您的应用程序。这样做还允许您以零秒停机时间重新启动应用程序。

    (3)终端监控:可以在终端中监控您的应用程序并检查应用程序运行状况(CPU使用率,使用的内存,请求/分钟等)。

    (4)SSH部署:自动部署,避免逐个在所有服务器中进行ssh。

    (5)静态服务:支持静态服务器功能

    (6)多平台支持:适用于Linux(稳定)和macOS(稳定)和Windows(稳定)

    2、pm2 安装

    npm install pm2 -g
     
    yarn global add pm2
     
    apt update && apt install sudo curl && curl -sL https://raw.githubusercontent.com/Unitech/pm2/master/packager/setup.deb.sh | sudo -E bash -

    二、pm2 常用命令

    // 启动
    pm2 start app.js --watch
    // 实时监控app.js的方式启动,当app.js文件有变动时,pm2会自动reload
    
    pm2 start app.js -i max
    // 根据有效CPU数目启动最大进程数目
    
    pm2 start app.js -n appname -i max -e err.log -o out.log 
    // 以 appname 启动 app.js,错误当前目录 err.log 为 error log,out.log 为输出 log
    
    pm2 start bb.sh  --interpreter bash 
    // 用 bash 执行脚本
    
    pm2 start test.py--interpreter python3
    // 用 python 环境执行脚本

      --name xxx 或者 -n xxx 表示将应用命名为 xxx

    // 启动类似 node xxx.js 的项目
    pm2 start --name xxxsname xxx.js  //将运行的实例命名为 xxxsname
    
    // 启动类似 npm start 的项目
    pm2 start --name appname npm -- start // 设置应用名为 appname
    
    // 启动类似 npm run serve 的项目
    pm2 start --name servename npm -- run serve // 设置应用名为 servename
    
    // 以配置文件的形式启动
    pm2 start pm2config.json

      查看 PM2 部署的应用

    pm2 list               # 显示所有进程状态
    pm2 ls                 # 显示所有进程状态
    pm2 show 0             # 显示某个应用的详细信息
    pm2 monit              # 监视所有进程
    pm2 logs               # 显示所有进程日志
    pm2 log 0              # 查看 0 应用的日志
    pm2 stop all           # 停止所有进程
    pm2 restart all        # 重启所有进程
    pm2 reload all         # 0秒停机重载进程
    pm2 stop 0             # 停止指定的进程,0 是应用 id
    pm2 restart 0          # 重启指定的进程,0 是应用 id
    pm2 startup            # 产生 init 脚本 保持进程活着,startup 是指系统boot, 开机进程自启动
    pm2 unstartup          # 禁用开机进程自启动
    pm2 delete 0           # 杀死指定的进程,0 是应用 id,会删除该应用
    pm2 delete all         # 杀死全部进程,会删除所有应用

      PM2 文件目录:PM2 文件默认放在 $HOME/.pm2

      自定义启动文件:

    {
      "apps": [{
        "name": "appname", # 应用名
        "exec_interpreter": "node", # 执行环境
        "script": "./b.js", # 要执行的脚本
        "cwd": "/home/uftp/test-pm2", # 项目路径
        "exec_mode": "fork",
        "max_memory_restart": "1G",
        "autorestart": true, # 出错自动重启
        "node_args": [],
        "watch": false
        "error_file" : "./test-err.log", # 错误日志文件位置
        "out_file": "./test-out.log",  # 输出日志文件位置
        "pid_file": "./test.pid",  # 进程相关文件位置
        "env": {
           "NODE_ENV": "development"
        },
        "min_uptime": "60s",
        "max_restarts": 30
      }]
    }

      apps: 是一个数组,数组中的每一个对象表示一个运行中的应用,可以配置多个应用,同时启动
      exec_interpreter 执行环境,node bash python 等等
      script: 将要执行的脚本
      cwd: 应用的路径
      exec_mode: 应用程序启动模式,默认是fork,也可设置cluster_mode
      max_memory_restart: 超过这个指定的值之后将会重启应用 1G 500M
      autorestart: 出现故障之后是否自动重启,默认 true
      watch: 监听文件更改,更改文件之后自动重启
      error_file: error log 错误日志
      out_file: out log 输出日期
      pid_file: 进程文件
      min_uptime: 最短的运行时间,如果少于这个时间就退出了,则会触发 max_restarts
      max_restarts: 最大重启次数

    三、pm2 命令归类

    // 启动服务
        pm2 start app.js                //启动app.js应用
        pm2 start app.js --name demo    //启动应用并设置name
        pm2 start app.sh                //脚本启动
    
    // 停止服务
        pm2 stop all              //停止所有应用
        pm2 stop [AppName]        //根据应用名停止指定应用
        pm2 stop [ID]             //根据应用id停止指定应用
    
    // 删除应用
        pm2 delete all             //关闭并删除应用
        pm2 delete [AppName]       //根据应用名关闭并删除应用
        pm2 delete [ID]            //根据应用ID关闭并删除应用
    
    // 创建开机自启动
    pm2 startup
    
    // 更新PM2
        pm2 updatePM2
        pm2 update
    
    // 监听模式
    pm2 start app.js --watch    //当文件发生变化,自动重启
    
    // 静态服务器
    pm2 serve ./dist 9090        //将目录dist作为静态服务器根目录,端口为9090
    
    // 启用群集模式(自动负载均衡)
        //max 表示PM2将自动检测可用CPU的数量并运行尽可能多的进程
        //max可以自定义,如果是4核CPU,设置为2者占用2个
        pm2 start app.js -i max
    
    // 重新启动
    pm2 restart app.js        //同时杀死并重启所有进程。短时间内服务不可用。
    // 生产环境推荐使用reload
    
    // 0秒停机重新加载
        pm2 reload app.js        //重新启动所有进程,始终保持至少一个进程在运行
        pm2 gracefulReload all   //优雅地以群集模式重新加载所有应用程序
    
    // 查看启动列表
    pm2 list
    
    // 查看每个应用程序占用情况
    pm2 monit
    
    // 显示应用程序所有信息 
        pm2 show [Name]      //根据name查看
        pm2 show [ID]        //根据id查看
    
    // 日志查看
        pm2 logs            //查看所有应用日志
        pm2 logs [Name]    //根据指定应用名查看应用日志
        pm2 logs [ID]      //根据指定应用ID查看应用日志
    
    // 保存当前应用列表
    pm2 save
    
    // 重启保存的应用列表
    pm2 resurrect
    
    // 清除保存的应用列表
    pm2 cleardump
    
    // 保存并恢复PM2进程
    pm2 update

    四、PM2配置文件方式

    1、生成示例配置文件

    pm2 ecosystem //生成一个示例JSON配置文件
    pm2 init

    2、配置文件示例(实际使用自行删除)

    module.exports = {
        apps : [{
            name      : 'API',      //应用名
            script    : 'app.js',   //应用文件位置
            env: {
                PM2_SERVE_PATH: ".",    //静态服务路径
                PM2_SERVE_PORT: 8080,   //静态服务器访问端口
                NODE_ENV: 'development' //启动默认模式
            },
            env_production : {
                NODE_ENV: 'production'  //使用production模式 pm2 start ecosystem.config.js --env production
            },
            instances:"max",          //将应用程序分布在所有CPU核心上,可以是整数或负数
            watch:true,               //监听模式
            output: './out.log',      //指定日志标准输出文件及位置
            error: './error.log',     //错误输出日志文件及位置,pm2 install pm2-logrotate进行日志文件拆分
            merge_logs: true,         //集群情况下,可以合并日志
            log_type:"json",          //日志类型
            log_date_format: "DD-MM-YYYY",  //日志日期记录格式
        }],
        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'  //部署后的动作
            }
        }
    };

      命令配置文件来自于这篇博客学习:https://blog.csdn.net/cs380637384/article/details/82682799

  • 相关阅读:
    史上最刁钻的十道英语面试题
    99%的人连Where are you from都不会回答?
    库存管理与订单的控制
    订单处理逻辑
    配送规划
    多商家电子商务解决方案
    电商库存规划
    库存管理从入门到精通
    商家报名系统
    经销商管理
  • 原文地址:https://www.cnblogs.com/goloving/p/15212620.html
Copyright © 2011-2022 走看看