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 相关文章推荐
用js提交表单解决一个页面有多个提交按钮的问题
Sep 01 Javascript
深入理解JavaScript系列(45):代码复用模式(避免篇)详解
Mar 04 Javascript
在JS中操作时间之getUTCMilliseconds()方法的使用
Jun 10 Javascript
利用vue实现模态框组件
Dec 19 Javascript
JavaScript实现获取用户单击body中所有A标签内容的方法
Jun 05 Javascript
vue初尝试--项目结构(推荐)
Jan 30 Javascript
详解基于vue的服务端渲染框架NUXT
Jun 20 Javascript
Vue结合后台导入导出Excel问题详解
Feb 19 Javascript
JavaScript数据结构与算法之二叉树插入节点、生成二叉树示例
Feb 21 Javascript
Vue指令之 v-cloak、v-text、v-html实例详解
Aug 08 Javascript
js实现简单的打印表格
Jan 15 Javascript
原生javascript运动函数的封装示例【匀速、抛物线、多属性的运动等】
Feb 23 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
php读取mysql的简单实例
2014/01/15 PHP
PHP动态页生成静态页的3种常用方法
2014/11/13 PHP
ThinkPHP模版中导入CSS和JS文件的方法
2014/11/29 PHP
php+mysqli预处理技术实现添加、修改及删除多条数据的方法
2015/01/30 PHP
php使用file函数、fseek函数读取大文件效率对比分析
2016/11/04 PHP
PHP验证码类ValidateCode解析
2017/01/07 PHP
微信接口生成带参数的二维码
2017/07/31 PHP
从新浪弄下来的全屏广告代码 与使用说明
2007/03/15 Javascript
用XMLDOM和ADODB.Stream实现base64编码解码实现代码
2010/11/28 Javascript
JS操作Cookies包括(读取添加与删除)
2012/12/26 Javascript
ionic由于使用了header和subheader导致被遮挡的问题的两种解决方法
2016/09/22 Javascript
AngularJS 使用ng-repeat报错 [ngRepeat:dupes]
2017/01/19 Javascript
jQuery使用unlock.js插件实现滑动解锁
2017/04/04 jQuery
解决layui中table异步数据请求不支持自定义返回数据格式的问题
2018/08/19 Javascript
webpack4.0 入门实践教程
2018/10/08 Javascript
浅析JS中什么是自定义react数据验证组件
2018/10/19 Javascript
如何使用less实现随机下雪动画详解
2019/01/02 Javascript
jQuery中each和js中forEach的区别分析
2019/02/27 jQuery
关于vue项目中搜索节流的实现代码
2019/09/17 Javascript
NodeJs crypto加密制作token的实现代码
2019/11/15 NodeJs
vue移动端使用appClound拉起支付宝支付的实现方法
2019/11/21 Javascript
Python中使用第三方库xlrd来读取Excel示例
2015/04/05 Python
Python实现将文本生成二维码的方法示例
2017/07/18 Python
使用Python实现一个栈判断括号是否平衡
2018/08/23 Python
Python实现的括号匹配判断功能示例
2018/08/25 Python
python实现自动化上线脚本的示例
2019/07/01 Python
python基于TCP实现的文件下载器功能案例
2019/12/10 Python
如何使用selenium和requests组合实现登录页面
2020/02/03 Python
使用python 计算百分位数实现数据分箱代码
2020/03/03 Python
Roxy美国官网:澳大利亚冲浪、滑雪健身品牌
2016/07/30 全球购物
阿迪达斯丹麦官网:adidas丹麦
2016/10/01 全球购物
Manduka官网:瑜伽垫、瑜伽毛巾和服装
2018/07/02 全球购物
万宝龙英国官网:Montblanc手表、书写工具、皮革和珠宝
2018/10/16 全球购物
快递业务员岗位职责
2014/01/06 职场文书
Pygame如何使用精灵和碰撞检测
2021/11/17 Python
MySQL日期时间函数知识汇总
2022/03/17 MySQL