PM2自动部署代码步骤流程总结


Posted in Javascript onDecember 10, 2018

公司的项目需要自动部署到服务器上,在网上查询后,发现PM2自带的发布程序可以自动部署并运行。

0x01 环境条件

本地环境:window10的WSL ubuntu16.04

服务器环境:ubuntu18.04

使用PM2进行部署,可以先查看官方的文档

这里需要在本地和服务器环境上同时安装好 PM2 、git ,本地PM2可以通过git向github、gitee等仓库提交代码,同时通知服务器的PM2拉取最新的代码,并在拉取成功后运行代码。

0x02 设置本地环境与服务器环境gitee仓库ssh

本地环境

执行 ssh-keygen -t rsa -b 2048 -f pm2deploy -C "PM2 deploy ssh key"

PM2自动部署代码步骤流程总结

执行后将得到本地环境生成的ssh key

执行 ssh-agent bash --login -i

执行 ssh-add pm2deploy

PM2自动部署代码步骤流程总结

执行后将pm2deloy添加到ssh高速代理中去。

将公钥添加入gitee或github中,注意本地环境添加的是个人公钥,而服务器环境需要添加在部署公钥下

PM2自动部署代码步骤流程总结

添加成功以后,本地shell执行git -T git@gitee.com

PM2自动部署代码步骤流程总结

返回successfully后,则说明本地ssh已经部署完成。

添加config

如果你的公钥和私钥是有别名的,需要添加一个配置文件config来说明网站和密钥的对应关系

PM2自动部署代码步骤流程总结

如果有多个 ssh 账号需要配置,在 config 文件里隔行分开写就行

PM2自动部署代码步骤流程总结

服务器环境

服务器环境同理,不同的是服务器环境添加的公钥需要放在部署公钥下

PM2自动部署代码步骤流程总结

0x02 配置git

先将git origin 的地址修改成ssh的别名地址

vim /.git/config

修改origin 的中gitee.com 为别名gitee,然后保存

注意这里的别名是本地的别名gitee,但是git库需要保持一致,所以在服务器上配置的别名也为gitee,只需要配置别名即可,证书还是各有各的证书。

先到项目目录用git将刚刚创建的项目拉取下来,拉取后,我们随便部署一个测试的代码,看是否能提交进gitee
这里我使用的是node的官方测试代码

PM2自动部署代码步骤流程总结

PM2自动部署代码步骤流程总结

传输成功后,我们开始配置PM2的配置文件

0x03 配置PM2

官方说明中只需要配置好这里的ecosystem.config.js 配置文件,并且让本地环境和服务器环境可以通过ssh访问即可实现PM2自动部署

配置ssh

本地生成shh密钥

将密钥写入本地config文件中

将公钥写入到服务器环境中的authorized_keys

配置ecosystem.config.js

使用 pm2 ecosystem 自动生成ecosystem.config.js

ecosystem.config.js:
module.exports = {
    apps : [{
    name: 'test',
    script: 'test.js',

    // Options reference: https://pm2.io/doc/en/runtime/reference/ecosystem-file/
    // 远程服务器上的PM2参数配置
    args: 'one two',   //参数
    instances: 1,     //实例数量
    autorestart: true,  //自动启动:是
    watch: false,     //监视模式:否
    max_memory_restart: '1G',//如果超过内存多少后,将重启实例:1G
    env: {
     NODE_ENV: 'development'
    },
    env_production: {
     NODE_ENV: 'production'
    }
 }],

 deploy : {
  production : {
   user : '远程主机用户名',
   host : '远程主机的ssh-config中的别名',
   port : '远程主机ssh端口',
   ref : 'origin/master',//远程gitee上的分支
   repo : 'git@[gitee别名]:[git库地址]',
   path : '远程服务器上的部署路径',
   'post-deploy' : 'npm install && pm2 reload ecosystem.config.js --env production'//部署完成后的操作
  }
 }
};

配置完成后,执行 pm2 deploy production setup 初始化PM2的部署

PM2自动部署代码步骤流程总结

以后更新,执行 pm2 deploy production update,则更新新的代码并运行了。

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

Javascript 相关文章推荐
用javascript实现页面打印的三种方法
Mar 05 Javascript
JS模拟面向对象全解(一、类型及传递)
Jul 13 Javascript
分别用marquee和div+js实现首尾相连循环滚动效果,仅3行代码
Sep 21 Javascript
js 实现css风格选择器(压缩后2KB)
Jan 12 Javascript
JS打字效果的动态菜单代码分享
Aug 21 Javascript
Bootstrap导航栏各元素操作方法(表单、按钮、文本)
Dec 28 Javascript
设计模式中的facade外观模式在JavaScript开发中的运用
May 18 Javascript
详解Node.js模块间共享数据库连接的方法
May 24 Javascript
AngularJS 2.0入门权威指南
Oct 08 Javascript
微信小程序实现多选框全选与取消全选功能示例
May 14 Javascript
微信小程序动态评分展示/五角星展示/半颗星展示/自定义长度展示功能的实现
Jul 22 Javascript
JavaScript this关键字指向常用情况解析
Sep 02 Javascript
vue路由前进后退动画效果的实现代码
Dec 10 #Javascript
Vue.js子组件向父组件通信的方法实例代码详解
Dec 10 #Javascript
vue 基于element-ui 分页组件封装的实例代码
Dec 10 #Javascript
JavaScript对象拷贝与赋值操作实例分析
Dec 10 #Javascript
express 项目分层实践详解
Dec 10 #Javascript
JS选取DOM元素常见操作方法实例分析
Dec 10 #Javascript
微信小程序分享海报生成的实现方法
Dec 10 #Javascript
You might like
页面乱码问题的根源及其分析
2013/08/09 PHP
PHP实现的链式队列结构示例
2017/09/15 PHP
解决php写入数据库乱码的问题
2019/09/17 PHP
JS 参数传递的实际应用代码分析
2009/09/13 Javascript
JS图片浏览组件PhotoLook的公开属性方法介绍和进阶实例代码
2010/11/09 Javascript
Javascript学习笔记二 之 变量
2010/12/15 Javascript
js实现在页面上弹出蒙板技巧简单实用
2013/04/16 Javascript
阻止表单提交按钮多次提交的完美解决方法
2016/05/16 Javascript
关于Vue.js 2.0的Vuex 2.0 你需要更新的知识库
2016/11/30 Javascript
vue.js开发环境搭建教程
2017/05/04 Javascript
vue引入swiper插件的使用实例
2017/07/19 Javascript
认识less和webstrom的less配置方法
2017/08/02 Javascript
微信小程序实现轮播图效果
2017/09/07 Javascript
Bootstrap 模态框多次显示后台提交多次BUG的解决方法
2017/12/26 Javascript
ajax请求data遇到的问题分析
2018/01/18 Javascript
react router4+redux实现路由权限控制的方法
2018/05/03 Javascript
解决vue热替换失效的根本原因
2018/09/19 Javascript
详解基于electron制作一个node压缩图片的桌面应用
2019/01/29 Javascript
[46:27]DOTA2上海特级锦标赛主赛事日 - 1 胜者组第一轮#2LGD VS MVP.Phx第一局
2016/03/02 DOTA
python 中文字符串的处理实现代码
2009/10/25 Python
Python实现简单文本字符串处理的方法
2018/01/22 Python
在Django model中设置多个字段联合唯一约束的实例
2019/07/17 Python
python将字典列表导出为Excel文件的方法
2019/09/02 Python
numpy 返回函数的上三角矩阵实例
2019/11/25 Python
Python面向对象中类(class)的简单理解与用法分析
2020/02/21 Python
python不同版本的_new_不同点总结
2020/12/09 Python
移动端html5判断是否滚动到底部并且下拉加载
2019/11/19 HTML / CSS
StubHub巴西:购买和出售您的门票
2016/07/22 全球购物
高中体育教学反思
2014/01/29 职场文书
入党自我评价范文
2014/02/02 职场文书
计算机专业自荐信
2014/05/24 职场文书
月度优秀员工获奖感言
2014/08/16 职场文书
汇报材料怎么写
2014/12/30 职场文书
python设置 matplotlib 正确显示中文的四种方式
2021/05/10 Python
浅谈自定义校验注解ConstraintValidator
2021/06/30 Java/Android
python三子棋游戏
2022/05/04 Python