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计算字符串中每个字符出现次数的小例子
Jul 02 Javascript
javascript实现锁定网页、密码解锁效果(类似系统屏幕保护效果)
Aug 15 Javascript
js实现鼠标感应图片展示的方法
Feb 27 Javascript
JS实现仿google、百度搜索框输入信息智能提示的实现方法
Apr 20 Javascript
jQuery基础知识点总结(DOM操作)
Jun 01 Javascript
jquery过滤特殊字符',防sql注入的实现方法
Aug 17 Javascript
JavaScript 随机验证码的生成实例代码
Sep 22 Javascript
input框中的name和id的区别
Nov 16 Javascript
vue兄弟组件传递数据的实例
Sep 06 Javascript
node实现生成带参数的小程序二维码并保存到本地功能示例
Dec 05 Javascript
Angular7创建项目、组件、服务以及服务的使用
Feb 19 Javascript
vue 遮罩层阻止默认滚动事件操作
Jul 28 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/06/07 PHP
php xml文件操作代码(一)
2009/03/20 PHP
PHP中CURL方法curl_setopt()函数的参数分享
2013/01/19 PHP
PHP实现链表的定义与反转功能示例
2018/06/09 PHP
php快速导入大量数据的实例方法
2019/09/23 PHP
JQuery index()方法使用代码
2010/06/02 Javascript
jQuery学习总结之元素的相对定位和选择器(持续更新)
2011/04/26 Javascript
PHP配置文件php.ini中打开错误报告的设置方法
2015/01/09 PHP
javascript中caller和callee详解
2015/08/10 Javascript
如何解决谷歌浏览器下jquery无法获取图片的尺寸
2015/09/10 Javascript
js实现select下拉框菜单
2015/12/08 Javascript
Bootstrap实现导航栏的2种方式
2016/11/28 Javascript
jQuery与js实现颜色渐变的方法
2016/12/30 Javascript
JavaScript+HTML5实现的日期比较功能示例
2017/07/12 Javascript
浅谈vue项目优化之页面的按需加载(vue+webpack)
2017/12/11 Javascript
vue实现登录后页面跳转到之前页面
2018/01/07 Javascript
angular的输入和输出的使用方法
2018/09/22 Javascript
基于javascript的拖拽类封装详解
2019/04/19 Javascript
python将多个文本文件合并为一个文本的代码(便于搜索)
2011/03/13 Python
python实现巡检系统(solaris)示例
2014/04/02 Python
python的构建工具setup.py的方法使用示例
2017/10/23 Python
python 和c++实现旋转矩阵到欧拉角的变换方式
2019/12/04 Python
Django模板标签中url使用详解(url跳转到指定页面)
2020/03/19 Python
Jupyter notebook如何修改平台字体
2020/05/13 Python
施华洛世奇澳大利亚官网:SWAROVSKI澳大利亚
2017/01/06 全球购物
美国百年历史早餐食品供应商:Wolferman’s
2017/01/18 全球购物
英国曼彻斯特宠物用品品牌:Bunty Pet Products
2019/07/27 全球购物
武汉世纪畅想数字传播有限公司 .NET笔试题
2015/06/13 面试题
完美实现CSS垂直居中的11种方法
2021/03/27 HTML / CSS
连锁经营管理专业大学生求职信
2013/10/30 职场文书
《搭石》教学反思
2014/04/07 职场文书
个人校本研修方案
2014/05/26 职场文书
关于工作时间玩手机的检讨书
2014/09/18 职场文书
工作会议简报
2015/07/20 职场文书
python 开心网和豆瓣日记爬取的小爬虫
2021/05/29 Python
mysql insert 存在即不插入语法说明
2022/03/25 MySQL