背景

常规部署项目比较传统的方式通过上传工具直接上传文件替换服务器文件, 也可以通过Xftp 方式来更新/发布指定站点。随着项目复杂度的增强,开发技术等手段增多。一些部署方式显得有点力不从心,且操作过程,失误率很难把控。
本章将基于现在比较流行的一套开发模式(如: VUE + SSR) 输出的项目来了解如何通过PM2 来实现自动化部署我们的站点项目。

== 必须说的一点是:本章重点不在PM2 相关知识,其相关知识及原理将在后续章节中介绍。 这里我假设你对PM2已经有了基本的了解==
如果不了解可以先跳到这篇文章了解其内关于pm2的相关简介: vue 服务端部署

另外: 我这里用的是阿里云 CentOS 7.4 64位

PM2 简介

pm2(process manager)是一个进程管理工具,维护一个进程列表,可以用它来管理你的node进程,负责所有正在运行的进程,并查看node进程的状态,也支持性能监控,负载均衡等功能。

使用pm2管理的node程序的好处

  • 监听文件变化,自动重启程序
  • 支持性能监控
  • 负载均衡
  • 程序崩溃自动重启
  • 服务器重新启动时自动重新启动 传送门-关注文章内关于pm2部分介绍
  • 自动化部署项目 (本章重点)

MP2自动部署实践

pm2 自动部署主要流程我概括为如下几点:

  • 服务端SSH关联部署项目的git 仓库 (无密获取git仓库代码)
  • 本地机器SSH关联到远程服务器 (无密连接部署服务器)
  • 通过pm2 在项目根目录下生成 ecosystem.config 部署相关配置文件
  • 本地提交代码至git 仓库并通过pm2 命令实现自动部署

下面我开始针对如上几点一一分析讲解

服务端SSH关联部署项目的git 仓库

我们都知道,开发过程中我们需要从git 仓库中先clone 代码到本地。git clone/pull/push 有个特点: https 模式下每次获取代码都需要校验账号及密码。 这比较麻烦,所以我们可以通过SSH 方式来建立本地与git 仓库之间公/私钥鉴权验证来解决这个问题。 即通过:ssh-keygen 命令生成公钥/私钥文件。 具体的生成过程看这篇文章 Git SSH 之 公钥/私钥

==这里我假设你已经知道如何生成SSH KEY ==

生成ssh key 后, 可以通过如下命令来输出公钥到命令控制台:

cat ~/.ssh/id_rsa.pub

然后复制粘贴到github 添加公钥-> 公钥 即可。 这里我用的是码云 gitee, 用起来都是一样的,只是它运行个人拥有多个私人项目。
图1 生成ssh key

图2: 输出公钥到命令行:

本地机器SSH关联到远程服务器

这里简单补一下 ssh key 的工作原理

: ssh key通过ssh-keygen命令生成公钥文件和私玥文件,私玥存本地,不告诉其他人。把公钥放到需要认证的服务器。然后通过ssh登录,会进行公私钥认证。匹配成功即实现无密码登录。

  • 本机生成ssh key 命令:

// 一路 ‘回车‘ 到生成即可
ssh-keygen -t rsa  -C "xxxxx@xxx.com"  (xxxx 为自己在git中注册的邮箱)
  • 如何快速将本地生成的id_rsa.pub(公钥) 拷贝到远程服务器指定键值内

本地通过 cmd 命令行:

// ~ : 表示公钥路径, 直接这么写就行, 系统会识别并查找到这个路径
// root:为你远程服务器登录名
// @xxxxx:后面的xxx 为你远程服务器的对公IPscp ~/.ssh/id_rsa.pub root@47.98.154.75:/root/.ssh/authorized_keys

如上命令输入回车后,如果成功通过ssh 连接远程服务器发现不在提示输入密码, 直接连接成功。(如: ssh root@xx.xx.xxx.xxx )

图3: 拷贝公钥至远程服务器

通过pm2 在项目根目录下生成 ecosystem.config 部署相关配置文件

  • cmd 定位到项目根下 输入(请确保已全局安装了 pm2):
pm2 ecosystem

根目录下自动创建 ecosystem.config.js 文件。
内容如下:

module.exports = {apps : [{name: 'package.json 对应name', //也可自己起一个script: 'public',  // 这里你的build 输出目录// Options reference: https://pm2.io/doc/en/runtime/reference/ecosystem-file/// 环境变量env: {  NODE_ENV: 'development'},env_production: {NODE_ENV: 'production'}}],// 重点deploy : {production : {user : 'root',  // 远程服务器登录名host : 'xx.xx.222.131',  // 远程服务器对公 IPref  : 'origin/master', // 部署的分支repo : 'git@gitee.com:chenzhizhuo/projectName.git',  // 这里是你的ssh 仓库地址path : '/root/projects/production', // 项目部署的路径(也是git clone 路径)// 如果你需要在部署服务器上build 可以添加 & npm run build 命令 (我是本地构建好一起提交到git,减轻服务端内存不足等问题)'post-deploy' : 'npm install && pm2 reload pm2.yml --env production'  // 这里pm2 远程部署指令  (pm2.yml 为pm2的启动配置文件)}}
};

这里顺便贴一下我的 pm2.yml 文件源码:

apps:- script: ./server/server.js // 服务端启动及数据/模板生成等逻辑实现name: vue_xxxx_mobile // 这里最好对应你的package.json 中的name名称env_production:NODE_ENV: production  // 启动后服务端注入的环境变量HOST: localhost // 本地ip/localhostPORT: 7788  // 启动服务监听的端口

本地提交代码至git 仓库并通过pm2 命令实现自动部署

注: 建议通过git base 来执行pm2 部署相关命令。 其它工具部分会出现位置异常。

  • 部署前请确保你已提交了本地修改到git 仓库
  • 自动部署命令:

// 首次部署先执行该命令(拉去git 代码)
pm2 deploy ecosystem.config.js production setup //  非首次/首次上一命令已执行完 则执行改命令(真正执行 ecosystem.config中的 post-deploy命令)
//   执行命令每次部署服务器都会拉取最新git 代码然后依次执行 ecosystem.config中的 post-deploy命令
pm2 deploy ecosystem.config.js production(再次部署:执行安装及pm2启动)

注: 因为我的项目是本地打包好一起将打包文件build 到git, 所以不需要再部署服务器重新build 。

  • 自动部署过程可能遇到的错误
    错误如:git clone 没有权限; deploy Host key verification failed

    解决办法 (重点)
    此问题主要是在远程服务器中,并未将http://github.com加入known_hosts。
    在服务器端通过如下命令设置:
    如果代码是放在码云上面 则 应该将 gitee.com 加入known_host,在服务器通过如下命令设置:

ssh-keyscan -t rsa github.com >> ~/.ssh/known_hosts
ssh-keyscan -t rsa gitee.com >> ~/.ssh/known_hosts   // 码云gitHub

注: 如上两个命令在远程服务器上执行; 执行完成后可以尝试重启一下你服务器,重启后再执行一次部署命令。

图4 : 自动部署成功:

到这里pm2 自动化部署项目就告一段落了。 后续会继续分享文章开头提到的pm2 好处/有点 的其它项分享~
文章中如有错误的地方,可回复留言一起讨论。 谢谢!

最后, *如果觉得本文章对你有帮助,记得点赞支持哟! *

PM2 自动化部署项目 之 (Vue SSR)相关推荐

  1. kubectl查看node状态_全栈之路:使用pm2自动化部署node项目

    相关前三篇 全栈之路:前端工程师如何从 0 开始了解 Docker 全栈之路:vue-cli3 项目从搭建优化到docker部署 全栈之路:从零搭建docker+jenkins+node.js自动化部 ...

  2. 全能代码生成器,自动生成前后端代码、生成项目框架、生成JavaBean、生成数据库文档、自动化部署项目(TableGo v8.0.0)

    TableGo_20220801 v8.0.0 正式版发布,此次版本累计更新如下:  1.生成项目功能新增支持若依框架,可同时生成若依框架代码和所有业务表的前后端基础CRUD代码,一键搞定所有  2. ...

  3. git maven 一键部署_Jenkins Git Maven搭建自动化部署项目环境 邮件通知

    简介 折腾了两个晚上,趁着今晚比较有空,把jenkins+git+maven搭建自动化部署项目环境搭建的过程记录一下,这里我把github作为git的远程仓库(https://github.com/j ...

  4. Jenkins 之 单节点 对接GitHub搭建自动化部署项目环境 与 实战测试 (三)

    Jenkins 之 单节点 对接GitHub搭建自动化部署项目环境 与 实战测试 (三) 目录 Jenkins 之 单节点 搭建自动化部署项目环境 与 实战测试 (三) Jenkins 服务器 环境 ...

  5. ideaspringboot项目上传服务器_nuxt+pm2 自动化部署及打包后文件自动上传阿里云 oss

    在读这篇文档时,希望你对 nuxt 及 pm2,有简单的了解 nuxt pm2 前期准备 安装 pm2 及构建 nuxt $ npm i pm2 -g $ npx create-nuxt-app &l ...

  6. cd返回上一 git_使用Git实现自动化部署项目

    在开发过程中,我们不可避免的会用到版本控制.你可能对 Git 和 SVN 有所了解.一开始基本都是在用SVN,现在可能都进化到用Git了吧,因为SVN缺点比较多.这里就不过于多的介绍Git的优点了. ...

  7. vue自动化部署linux,GitHub+Vue自动化构建部署

    GitHub+Vue自动化构建 懒是第一生产力,写Vue都知道,写完了想在服务器上跑,就得npm run build,然后将生成的dist目录下的文件放到web目录下,但是每次都这样搞好像很麻烦,然后 ...

  8. jenkins+gitee 实现自动化部署项目到centos上

    目录 一 原理说明 1 流程说明 2 流程图 二 环境部署说明 三 Jenkins基本配置 1 Configure System (系统设置) 2 Configure  Global Security ...

  9. docker $PWD路径_Docker安装Jenkins+Shell脚本自动化部署项目

    本文同名博客老炮说Java:https://www.laopaojava.com/,每天更新Spring/SpringMvc/SpringBoot/实战项目等文章资料 Sentinel+Nacos 是 ...

最新文章

  1. LinuxMint13安装无密码访问git
  2. 约瑟夫问题-学习笔记
  3. MDK生成的BIN文件用DNW通过USB下载RAM中运行的问题
  4. 使用ALTER SYSTEM运行OS命令
  5. CommonJS规范(转)
  6. Tensorflow Python API 翻译(sparse_ops)
  7. tdk怎么设置_网站tdk如何正确的设置
  8. 第五章:Redis持久化-AOF持久化
  9. 关于数据准备时,自动棌番的主键,这一字段数据的注意(IT总结之五)
  10. c性能大容量cket_5千左右预算,既轻薄(高颜值)又高性能的笔记本推荐(兼顾Pr剪辑、Ps修图、CAD制图、办公游戏)...
  11. Elasticsearch面向文档
  12. 最简单的推荐系统实践
  13. Eclipse配置 eclipse Java 配置 eclipse 简单配置 Eclipse 插件 配置 推荐 eclipse插件 eclipse 必备插件
  14. 程序员表白代码php,火热的程序员表白方式,调皮弹窗表白代码,赶紧拿去试试吧...
  15. 已解决IndentationError: unindent does not match any outer indentation level
  16. linux c led 驱动程序,uclinux简单LED驱动程序
  17. Film Stocks for Mac(PS胶片模拟调色插件)
  18. 《信心——是什么?导致什么?》_司布真
  19. cad剖切线的快捷键_Auto CAD2017剖切符号快捷键是什么呢?
  20. 威联通文件传输服务器,QNAP NAS方案-------文件共享

热门文章

  1. 郝健: Linux内存管理学习笔记-第5节课
  2. 中国地质大学(北京) 研究生 数学课《机器学习》期末考试 考试范围+考试题目+参考答案 2022秋
  3. 巴西数字支付公司StoneCo美国上市 蚂蚁金服是股东
  4. Notion 上做英文阅读笔记
  5. 幻城的QQ空间伤感日志:亲爱的还幸福吗?
  6. 【牛客网】 G-大水题
  7. 英语watch手表源自wacche
  8. pebble刷android wear,Pebble智能手表刷官方中文固件教程
  9. 模为60的BCD码计数器的设计与验证
  10. 使用Pygame制作2048小游戏