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 应用 JQuery.groupTable.js
Dec 15 Javascript
Node.js中的模块机制学习笔记
Nov 04 Javascript
再分享70+免费的jquery 图片滑块效果插件和教程
Dec 15 Javascript
Jquery效果大全之制作电脑健康体检得分特效附源码下载
Nov 02 Javascript
jQuery过滤选择器用法示例
Sep 12 Javascript
详谈innerHTML innerText的使用和区别
Aug 18 Javascript
vue.js todolist实现代码
Oct 29 Javascript
微信小程序页面生命周期详解
Jan 31 Javascript
jQuery实现获取动态添加的标签对象示例
Jun 28 jQuery
Vue+Mock.js模拟登录和表格的增删改查功能
Jul 26 Javascript
element-ui带输入建议的input框踩坑(输入建议空白以及会闪出上一次的输入建议问题)
Jan 15 Javascript
Vue 动态添加路由及生成菜单的方法示例
Jun 20 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制作静态网站的模板框架(三)
2006/10/09 PHP
建立动态的WML站点(一)
2006/10/09 PHP
用PHP的ob_start();控制您的浏览器cache!
2006/11/25 PHP
PHP Cookie学习笔记
2016/08/23 PHP
详解Yii2 定制表单输入字段的标签和样式
2017/01/04 PHP
PHP中通过getopt解析GNU C风格命令行选项
2019/11/18 PHP
javascript prototype原型操作笔记
2009/12/07 Javascript
计算新浪Weibo消息长度(还可以输入119字)
2013/07/02 Javascript
jquery 为a标签绑定click事件示例代码
2014/06/23 Javascript
JQuery判断radio(单选框)是否选中和获取选中值方法总结
2015/04/15 Javascript
js随机生成字母数字组合的字符串 随机动画数字
2015/09/02 Javascript
js和jq使用submit方法无法提交表单的快速解决方法
2016/05/17 Javascript
设计模式中的组合模式在JavaScript程序构建中的使用
2016/05/18 Javascript
JavaScript的ExtJS框架中数面板TreePanel的使用实例解析
2016/05/21 Javascript
Javascript之BOM(window对象)详解
2016/05/25 Javascript
微信小程序学习(4)-系统配置app.json详解
2017/01/12 Javascript
js a标签点击事件
2017/03/30 Javascript
layui分页效果实现代码
2017/05/19 Javascript
一文了解vue-router之hash模式和history模式
2019/05/31 Javascript
详细解析Python当中的数据类型和变量
2015/04/25 Python
Python根据欧拉角求旋转矩阵的实例
2019/01/28 Python
python找出一个列表中相同元素的多个索引实例
2019/06/11 Python
pyqt5 删除layout中的所有widget方法
2019/06/25 Python
python+django+rest框架配置创建方法
2019/08/31 Python
Python制作数据预测集成工具(值得收藏)
2020/08/21 Python
Python环境配置实现pip加速过程解析
2020/11/27 Python
基于PyInstaller各参数的含义说明
2021/03/04 Python
基于HTML5 Canvas:字符串,路径,背景,图片的详解
2013/05/09 HTML / CSS
英国女士家居服网站:hush
2017/08/09 全球购物
英国最大的纸工艺品商店:CraftStash
2018/12/01 全球购物
IGK Hair官网:喷雾、洗发水、护发素等
2020/11/03 全球购物
积极分子思想汇报
2014/01/04 职场文书
《最可爱的人》教学反思
2014/02/14 职场文书
2014年设备管理工作总结
2014/11/26 职场文书
2014企业年终工作总结
2014/12/23 职场文书
TensorFlow中tf.batch_matmul()的用法
2021/06/02 Python