使用pm2自动化部署node项目的方法步骤


Posted in Javascript onJanuary 28, 2019

1、pm2简介

pm2(process manager)是一个进程管理工具,维护一个进程列表,可以用它来管理你的node进程,负责所有正在运行的进程,并查看node进程的状态,也支持性能监控,负载均衡等功能。

1.1、使用pm2管理的node程序的好处

  • 监听文件变化,自动重启程序
  • 支持性能监控
  • 负载均衡
  • 程序崩溃自动重启
  • 服务器重新启动时自动重新启动
  • 自动化部署项目

 2、pm2安装与使用

 2.1、全局安装

npm install pm2 -g

2.2、常用命令

启动一个node程序

pm2 start start.js

使用pm2自动化部署node项目的方法步骤

启动进程并指定应用的程序名

pm2 start app.js --name application1

集群模式启动

// -i 表示 number-instances 实例数量
  // max 表示 PM2将自动检测可用CPU的数量 可以自己指定数量
  pm2 start start.js -i max

使用pm2自动化部署node项目的方法步骤

添加进程监视

// 在文件改变的时候会重新启动程序
  pm2 start app.js --name start --watch

使用pm2自动化部署node项目的方法步骤

列出所有进程

pm2 list
pm2 ls // 简写

从进程列表中删除进程

// pm2 delete [appname] | id
pm2 delete app // 指定进程名删除
pm2 delete 0  // 指定进程id删除

删除进程列表中所有进程

pm2 delete all

查看某个进程具体情况

pm2 describe app

使用pm2自动化部署node项目的方法步骤 

查看进程的资源消耗情况

pm2 monit

使用pm2自动化部署node项目的方法步骤

重启进程

pm2 restart app // 重启指定名称的进程
pm2 restart all // 重启所有进程

查看进程日志

pm2 logs app  // 查看该名称进程的日志
pm2 logs all  // 查看所有进程的日志

设置pm2开机自启

开启启动设置,此处是CentOS系统,其他系统替换最后一个选项(可选项:ubuntu, centos, redhat, gentoo, systemd, darwin, amazon)

pm2 startup centos

然后按照提示需要输入的命令进行输入

最后保存设置

pm2 save

3、通过pm2配置文件来自动部署项目

确保服务器安装了pm2,没有安装的话先安装

npm install pm2 -g

3.1 在项目根目录下新建一个 deploy.yaml 文件

# deploy.yaml
apps:
 - script: ./start.js    # 入口文件
  name: 'app'       # 程序名称
  env:           # 环境变量
   COMMON_VARIABLE: true
  env_production:
   NODE_ENV: production

deploy:           # 部署脚本
 production:        # 生产环境
  user: lentoo      # 服务器的用户名
  host: 192.168.2.166   # 服务器的ip地址
  port: 22        # ssh端口
  ref: origin/master   # 要拉取的git分支
  ssh_options: StrictHostKeyChecking=no # SSH 公钥检查
  repo: https://github.com/**.git # 远程仓库地址
  path: /home       # 拉取到服务器某个目录下
  pre-deploy: git fetch --all # 部署前执行
  post-deploy: npm install && pm2 reload deploy.yaml --env production # 部署后执行
  env:
   NODE_ENV: production

3.2、配置git的ssh免密认证

在服务器中生成rsa公钥和私钥,当前是 centos7 下进行

前提服务器要安装git,没有安装的先安装git,已安装的跳过

yum ?y install git

生成秘钥

ssh-keygen -t rsa -C xxx@xxx.com

在~/.ssh目录下有 id_rsa和 id_rsa.pub两个文件,其中id_rsa.pub文件里存放的即是公钥key。

登录到GitHub,点击右上方的头像,选择settings ,点击Add SSH key,把id_rsa.pub的内容复制到里面即可。

使用pm2自动化部署node项目的方法步骤

3.3 使用pm2部署项目

每次部署前先将本地的代码提交到远程git仓库

首次部署

pm2 deploy deploy.yaml production setup

部署完成后,既可登陆服务器查看配置的目录下是否从git上拉取了项目

再次部署

pm2 deploy deploy.yaml production upddate

3.4 该部署流程同样适用前端项目

如vue-cli的项目,自动部署到服务器,自动执行npm run build 命令,生成的dist目录,指定到nginx的静态文件目录下。

4、可能会遇到的坑

在window系统下 vscode的命令行程序,以及powershell执行部署的命令时,出现部署失败

pm2 deploy deploy.yaml production setup

使用pm2自动化部署node项目的方法步骤

解决方案:使用git命令行来执行

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

Javascript 相关文章推荐
javascript页面加载完执行事件代码
Feb 11 Javascript
Javascript学习笔记之 对象篇(一) : 对象的使用和属性
Jun 24 Javascript
JS+CSS实现可拖拽的漂亮圆角特效弹出层完整实例
Feb 13 Javascript
JavaScript实现表格快速变色效果代码
Aug 19 Javascript
React.js入门学习第一篇
Mar 30 Javascript
JS+HTML5手机开发之滚动和惯性缓动实现方法分析
Jun 12 Javascript
深入浅出ES6新特性之函数默认参数和箭头函数
Aug 01 Javascript
JavaScript表单验证实现代码
May 22 Javascript
JS全角与半角转化实例(分享)
Jul 04 Javascript
利用React Router4实现的服务端直出渲染(SSR)
Jan 07 Javascript
使用vscode快速建立vue模板过程详解
Oct 10 Javascript
ZK中使用JS读取客户端txt文件内容问题
Nov 07 Javascript
jQuery访问json文件中数据的方法示例
Jan 28 #jQuery
JS实现的点击按钮图片上下滚动效果示例
Jan 28 #Javascript
vue-cli3 项目从搭建优化到docker部署的方法
Jan 28 #Javascript
JavaScript 判断iPhone X Series机型的方法
Jan 28 #Javascript
JS实现二维数组元素的排列组合运算简单示例
Jan 28 #Javascript
新手快速上手webpack4打包工具的使用详解
Jan 28 #Javascript
jQuery实现的网站banner图片无缝轮播效果完整实例
Jan 28 #jQuery
You might like
PHP简单处理表单输入的特殊字符的方法
2016/02/03 PHP
ThinkPHP静态缓存简单配置和使用方法详解
2016/03/23 PHP
Laravel中日期时间处理包Carbon的简单使用
2017/09/21 PHP
php弹出提示框的是实例写法
2019/09/26 PHP
Prototype使用指南之selector.js说明
2008/10/26 Javascript
Jquery实现无刷新DropDownList联动实现代码
2010/03/08 Javascript
JavaScript 继承机制的实现(待续)
2010/05/18 Javascript
js模拟点击以提交表单为例兼容主流浏览器
2013/11/29 Javascript
jQuery中filter()方法用法实例
2015/01/06 Javascript
详解JavaScript中的forEach()方法的使用
2015/06/08 Javascript
js 数据存储和DOM编程
2017/02/09 Javascript
浅谈JavaScript的innerWidth与innerHeight
2017/10/12 Javascript
原生js的ajax和解决跨域的jsonp(实例讲解)
2017/10/16 Javascript
PHP自动加载autoload和命名空间的应用小结
2017/12/01 Javascript
vue 实现在函数中触发路由跳转的示例
2018/09/01 Javascript
angularJs提交文本框数据到后台的方法
2018/10/08 Javascript
three.js 实现露珠滴落动画效果的示例代码
2021/03/01 Javascript
[03:09]2014DOTA2国际邀请赛 Mushi前队友送上祝福
2014/07/12 DOTA
[01:25:38]DOTA2-DPC中国联赛 正赛 VG vs LBZS BO3 第一场 1月19日
2021/03/11 DOTA
Python挑选文件夹里宽大于300图片的方法
2015/03/05 Python
Python实战小程序利用matplotlib模块画图代码分享
2017/12/09 Python
python实现三次样条插值
2018/12/17 Python
python实现动态数组的示例代码
2019/07/15 Python
python误差棒图errorbar()函数实例解析
2020/02/11 Python
Eclipse配置python默认头过程图解
2020/04/26 Python
Python如何定义接口和抽象类
2020/07/28 Python
Python+Appium实现自动化清理微信僵尸好友的方法
2021/02/04 Python
Stefania Mode英国:奢华设计师和时尚服装
2017/10/23 全球购物
英国最大的独立玩具专卖店:The Entertainer
2019/09/06 全球购物
Lowe’s加拿大:家居装修、翻新和五金店
2019/12/06 全球购物
智能家居、吸尘器、滑板车、电动自行车网上购物:Geekmaxi
2021/01/18 全球购物
大学英语专业求职信
2014/06/21 职场文书
夫妻婚内购房协议书
2014/10/05 职场文书
2014年纪检工作总结
2014/11/12 职场文书
南京南京观后感
2015/06/02 职场文书
pytorch DataLoader的num_workers参数与设置大小详解
2021/05/28 Python