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下查找父节点的简单方法
Aug 13 Javascript
jQuery文件上传插件Uploadify使用指南
Jun 05 Javascript
jQuery实现复选框成对选择及对应取消的方法
Mar 03 Javascript
ECMAScript6中Set/WeakSet详解
Jun 12 Javascript
详细分析Javascript中创建对象的四种方式
Aug 17 Javascript
一个非常好用的文字滚动的案例,鼠标悬浮可暂停[两种方案任选]
Dec 01 Javascript
jQuery电话号码验证实例
Jan 05 Javascript
JavaScript实现随机数生成器(去重)
Oct 13 Javascript
JavaScript求一个数组中重复出现次数最多的元素及其下标位置示例
Jul 23 Javascript
vue自定义键盘信息、监听数据变化的方法示例【基于vm.$watch】
Mar 16 Javascript
Node使用Nodemailer发送邮件的方法实现
Feb 24 Javascript
Vue 集成 PDF.js 实现 PDF 预览和添加水印的步骤
Jan 22 Vue.js
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
php学习笔记 类的声明与对象实例化
2011/06/13 PHP
深入探讨PHP中的内存管理问题
2011/08/31 PHP
PHP中Memcache操作类及用法实例
2014/12/12 PHP
thinkphp下MySQL数据库读写分离代码剖析
2017/04/18 PHP
php面向对象的用户登录身份验证
2017/06/08 PHP
解决AJAX中跨域访问出现'没有权限'的错误
2008/08/20 Javascript
jquery关于页面焦点的定位(文本框获取焦点时改变样式 )
2010/09/10 Javascript
js生成随机数(指定范围)的实例代码
2016/07/10 Javascript
深入理解javascript作用域第二篇之词法作用域和动态作用域
2016/07/24 Javascript
浅谈JavaScript中promise的使用
2017/01/11 Javascript
React-router 4 按需加载的实现方式及原理详解
2017/05/25 Javascript
jQuery实现可兼容IE6的遮罩功能详解
2017/09/19 jQuery
javascript实现获取一个日期段内每天不同的价格(计算入住总价格)
2018/02/05 Javascript
bootstrap动态调用select下拉框的实例代码
2018/08/09 Javascript
Node.js如何对SQLite的async/await封装详解
2019/02/14 Javascript
如何基于jQuery实现五角星评分
2020/09/02 jQuery
如何通过Proxy实现JSBridge模块化封装
2020/10/22 Javascript
Python实现复杂对象转JSON的方法示例
2017/06/22 Python
Python实现树的先序、中序、后序排序算法示例
2017/06/23 Python
Python os.rename() 重命名目录和文件的示例
2018/10/25 Python
pandas 时间格式转换的实现
2019/07/06 Python
python+selenium select下拉选择框定位处理方法
2019/08/24 Python
Django框架HttpResponse对象用法实例分析
2019/11/01 Python
python Manager 之dict KeyError问题的解决
2019/12/21 Python
Android Q之气泡弹窗的实现示例
2020/06/23 Python
如何使用python写截屏小工具
2020/09/29 Python
HTML5 Canvas实现烟花绽放特效
2016/03/02 HTML / CSS
HTML5拖拽文件上传的示例代码
2021/03/04 HTML / CSS
欧洲最大的滑雪假期供应商之一:Sunweb Holidays
2018/01/06 全球购物
Bodum官网:咖啡和茶壶、玻璃器皿、厨房电器等
2018/08/01 全球购物
车工岗位职责
2013/11/26 职场文书
竞聘上岗演讲稿
2014/05/16 职场文书
旷工检讨书大全
2015/08/15 职场文书
幼儿园音乐教学反思
2016/02/18 职场文书
介绍信应该怎么开?
2019/04/03 职场文书
Vue实现动态查询规则生成组件
2021/05/27 Vue.js