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基础教程之deferred对象使用方法
Jan 22 Javascript
JS数组去重与取重的示例代码
Jan 24 Javascript
JavaScript二维数组实现的省市联动菜单
May 08 Javascript
零基础搭建Node.js、Express、Ejs、Mongodb服务器及应用开发入门
Dec 20 Javascript
详解JavaScript中的表单验证
Jun 16 Javascript
BootStrap 轮播插件(carousel)支持左右手势滑动的方法(三种)
Jul 07 Javascript
JS简单实现仿百度控制台输出信息效果
Sep 04 Javascript
js实现hashtable的赋值、取值、遍历操作实例详解
Dec 25 Javascript
js实现截图保存图片功能的代码示例
Feb 16 Javascript
vue 组件中slot插口的具体用法
Apr 03 Javascript
jQuery md5加密插件jQuery.md5.js用法示例
Aug 24 jQuery
微信小程序实现分享朋友圈的图片功能示例
Jan 18 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制作简单的内容采集器的原理分析
2008/10/01 PHP
php 无法加载mcrypt.dll的解决办法
2013/04/03 PHP
PHP内置过滤器FILTER使用实例
2014/06/25 PHP
跟我学Laravel之快速入门
2014/10/15 PHP
PHP中的一些常用函数收集
2015/05/26 PHP
php文件上传、下载和删除示例
2020/08/28 PHP
PHP7创建COOKIE和销毁COOKIE的实例方法
2020/02/03 PHP
PHP使用PDO 连接与连接管理操作实例分析
2020/04/21 PHP
javascript 写的一个简单的timer
2009/07/30 Javascript
一个基于jQuery的树型插件(OrangeTree)使用介绍
2012/05/03 Javascript
一个级联菜单代码学习及removeClass与addClass的应用
2013/01/24 Javascript
js中settimeout方法加参数的使用实例
2014/02/27 Javascript
javascript中解析四则运算表达式的算法和示例
2014/08/11 Javascript
JQuery右键菜单插件ContextMenu使用指南
2014/12/19 Javascript
基于jQuery.Hz2Py.js插件实现的汉字转拼音特效
2015/05/07 Javascript
Javascript实现div层渐隐效果的方法
2015/05/30 Javascript
jquery+php随机生成红包金额数量代码分享
2015/08/27 Javascript
Node.js 条形码识别程序构建思路详解
2016/02/14 Javascript
深入理解javascript中的 “this”
2017/01/17 Javascript
js禁止表单重复提交
2017/08/29 Javascript
jquery 输入框查找关键字并提亮颜色的实例代码
2018/01/23 jQuery
浅析java线程中断的办法
2018/07/29 Javascript
解决vue 绑定对象内点击事件失效问题
2018/09/05 Javascript
Python中的pprint折腾记
2015/01/21 Python
Python实现文件按照日期命名的方法
2015/07/09 Python
动感网页相册 python编写简单文件夹内图片浏览工具
2016/08/17 Python
Python进阶学习之特殊方法实例详析
2017/12/01 Python
Django 2.0版本的新特性抢先看!
2018/01/05 Python
简单实现python画圆功能
2018/01/25 Python
详解Python解决抓取内容乱码问题(decode和encode解码)
2019/03/29 Python
澳大利亚在线床零售商:Bedworks
2020/09/01 全球购物
.NET初级开发工程师面试题(包括Javascript)
2012/08/22 面试题
仓库管理员岗位职责
2014/03/19 职场文书
五一劳动节活动记录
2014/03/23 职场文书
学历证明样本
2015/06/16 职场文书
创业项目(超低成本创业项目)
2019/08/16 职场文书