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 相关文章推荐
jQuery 隔行换色 支持键盘上下键,按Enter选定值
Aug 02 Javascript
jquery(live)中File input的change方法只起一次作用的解决办法
Oct 21 Javascript
关于js日期转化为毫秒数“节省20%的效率和和节省9个字符“问题
Mar 01 Javascript
JSON.stringify 语法实例讲解
Mar 14 Javascript
javascript ie6兼容position:fixed实现思路
Apr 01 Javascript
javascript写的一个模拟阅读小说的程序
Apr 04 Javascript
jquery mobile的触控点击事件会多次触发问题的解决方法
May 08 Javascript
html的DOM中Event对象onabort事件用法实例
Jan 21 Javascript
jQuery UI Grid 模态框中的表格实例代码
Apr 01 jQuery
Javarscript中模块(module)、加载(load)与捆绑(bundle)详解
May 28 Javascript
electron demo项目npm install安装失败的解决方法
Feb 06 Javascript
jQuery实现的手动拖动控制进度条效果示例【测试可用】
Apr 18 jQuery
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
excellent!――ASCII Art(由目标图象生成ascii)
2007/02/20 PHP
PHP 中英文混合排版中处理字符串常用的函数
2007/04/12 PHP
PHP 向右侧拉菜单实现代码,测试使用中
2009/11/03 PHP
php登陆页的密码处理方式分享
2013/10/14 PHP
php检测iis环境是否支持htaccess的方法
2014/02/18 PHP
PHP实现的多彩标签效果代码分享
2014/08/21 PHP
PHP中__FILE__、dirname与basename用法实例分析
2014/12/01 PHP
PHP微信红包生成代码分享
2016/10/06 PHP
简述php环境搭建与配置
2016/12/05 PHP
PHP多种序列化/反序列化的方法详解
2017/06/23 PHP
IE6-IE9不支持table.innerHTML的解决方法分享
2012/09/14 Javascript
CSS(js)限制页面显示的文本字符长度
2012/12/27 Javascript
javascript实现数字+字母验证码的简单实例
2014/02/10 Javascript
PHP PDO操作总结
2014/11/17 Javascript
javascript去掉代码里面的注释
2015/07/24 Javascript
深入理解Angular2 模板语法
2016/08/07 Javascript
JavaScript中关于for循环删除数组元素内容时出现的问题
2016/11/21 Javascript
ES6字符串模板,剩余参数,默认参数功能与用法示例
2017/04/06 Javascript
xmlplus组件设计系列之列表(4)
2017/04/26 Javascript
vue2.0 兄弟组件(平级)通讯的实现代码
2018/01/15 Javascript
深入了解JavaScript代码覆盖
2019/06/13 Javascript
关于vue 结合原生js 解决echarts resize问题
2020/07/26 Javascript
vue router返回到指定的路由的场景分析
2020/11/10 Javascript
JavaScript实现切换多张图片
2021/01/27 Javascript
Python基于select实现的socket服务器
2016/04/13 Python
python tensorflow学习之识别单张图片的实现的示例
2018/02/09 Python
美国婴童服装市场上的领先品牌:Carter’s
2018/02/08 全球购物
Bluebella美国官网:英国性感内衣品牌
2018/10/04 全球购物
反邪教宣传工作方案
2014/05/07 职场文书
学生检讨书怎么写
2015/05/07 职场文书
复兴之路展览观后感
2015/06/02 职场文书
药品销售员2015年终工作总结
2015/10/22 职场文书
【超详细】八大排序算法的各项比较以及各自特点
2021/03/31 Python
redis客户端实现高可用读写分离的方式详解
2021/07/04 Redis
详解OpenCV获取高动态范围(HDR)成像
2022/04/29 Python
Java死锁的排查
2022/05/11 Java/Android