pm2 部署vue

1、为什么要使用pm2运行vue项目

        为什么!!!我们一般是将打出来的DIST目录上传到服务器发布即可,为啥我会使用PM2来运行部署呢?

        前提:vue2+mysql+express不使用中间服务器,即不要后端人员开发接口服务,而是项目中直接与mysql交互!怎么实现后期的教程会一步一步教你撸。一个人搞定前端、后端!当然你得会sql及后端的逻辑,如果不会,还是需要有人协助你搞。

原因其一:有个朋友他要开发一套简易版本的考勤管理系统,我用了两天时间将其开发出来,他的情况是:他不想购买服务器,只想部署在他的办公电脑上他自己使用!我也没有精力说服他去买个服务器!那怎么办呢?我本想着给他安装node.js、vscode、mysql,按照我开发过程中运行系统的方式让他运行,等我开发完成后,我才发现这样的操作体验就是一场灾难,他上班后每天就是开机,打开vscode点击run dev,然后去执行脚本运行node写的服务!这样的使用体验真的是一场灾难!

原因其二:npm run dev运行关闭终端后,WEB项目便无法打开,用户无法流畅的正常使用,增加了使用难度。

        既然已经开发出来了,那怎么让他使用很舒服呢?这时就想到了进程守护的东西,一翻查找,看到了pm2这个东西,相当的好用!

        来看看我的项目目录:

        绿框就是服务端mysql相关的操作红框就是我们WEB前端,使用VUE开发

 定义的相关接口,本质是读写数据库,见下方图文。

 数据库查询:

 整体完成开发并测试通过后,就是部署的问题。

2、安装PM2

全局安装::

npm install pm2 -g
//或
yarn global add pm2

PM2相关命令,只熟悉查阅即可,与本次部署无关。直接到第3步。

启动

pm2 start app.js                //启动app.js应用
pm2 start app.js --name demo    //启动应用并设置name
pm2 start app.sh                //脚本启动

停止

pm2 stop all              //停止所有应用
pm2 stop [AppName]        //根据应用名停止指定应用
pm2 stop [ID]            //根据应用id停止指定应用

删除

pm2 delete all              //关闭并删除应用
pm2 delete [AppName]        //根据应用名关闭并删除应用
pm2 delete [ID]            //根据应用ID关闭并删除应用

创建开机自启动

pm2 startup

更新PM2

pm2 updatePM2
pm2 update

监听模式

pm2 start app.js --watch    //当文件发生变化,自动重启

静态服务器

pm2 serve ./dist 9090        //将目录dist作为静态服务器根目录,端口为9090

启用群集模式(自动负载均衡)

//max 表示PM2将自动检测可用CPU的数量并运行尽可能多的进程
//max可以自定义,如果是4核CPU,设置为2者占用2个
pm2 start app.js -i max

重新启动

pm2 restart app.js   //同时杀死并重启所有进程。短时间内服务不可用。生成环境推荐使用reload

0秒停机重新加载

pm2 reload app.js        //重新启动所有进程,始终保持至少一个进程在运行
pm2 gracefulReload all  //优雅地以群集模式重新加载所有应用程序

查看启动列表

pm2 list

查看每个应用程序占用情况

pm2 monit

显示应用程序所有信息 

pm2 show [Name]      //根据name查看
pm2 show [ID]        //根据id查看

日志查看

pm2 logs            //查看所有应用日志
pm2 logs [Name]    //根据指定应用名查看应用日志
pm2 logs [ID]      //根据指定应用ID查看应用日志

保存当前应用列表

pm2 save

重启保存的应用列表

pm2 resurrect

清除保存的应用列表

pm2 cleardump

保存并恢复PM2进程

pm2 update

 3、项目配置准备

在你的项目根目录创建一个名为:ecosystem.config.js的文件!

其内容为:

module.exports = {apps: [{name: "oaOffice",script: "./node_modules/@vue/cli-service/bin/vue-cli-service.js",args: "serve",instances: "1",autorestart: true,watch: true,max_memory_restart: "1G",env: {NODE_ENV: "production",},},],
};

name:服务名,你随便给。

script:项目脚手架脚本,因为我项目使用的是Vue_cli创建的,所以,我指向VUE的脚本。

args:你项目终端运行的命令参数,如果是npm run dev这里就是dev,如果是npm run serve这里就是serve,你自己根据实际填写 。

注意:这里env参数里面我没有没给指定dist目录,默认为同级目录生成的dist静态页面。你可以自己指定。

env: {NODE_ENV: 'production',PM2_SERVE_PATH: '/path/to/your/dist',PM2_SERVE_PORT: 8080},env_production: {NODE_ENV: 'production',PM2_SERVE_PATH: '/path/to/your/dist',PM2_SERVE_PORT: 8080}

至此准备完毕。

当然你也可以参考如下更详细的配置,添加日志查看功能。

module.exports = {apps : [{name      : 'API',      //应用名script    : 'app.js',   //应用文件位置env: {PM2_SERVE_PATH: ".",    //静态服务路径PM2_SERVE_PORT: 8080,   //静态服务器访问端口NODE_ENV: 'development' //启动默认模式},env_production : {NODE_ENV: 'production'  //使用production模式 pm2 start ecosystem.config.js --env production},instances:"max",          //将应用程序分布在所有CPU核心上,可以是整数或负数watch:true,               //监听模式output: './out.log',      //指定日志标准输出文件及位置error: './error.log',     //错误输出日志文件及位置,pm2 install pm2-logrotate进行日志文件拆分merge_logs: true,         //集群情况下,可以合并日志log_type:"json",          //日志类型log_date_format: "DD-MM-YYYY",  //日志日期记录格式}],deploy : {production : {user : 'node',                      //ssh 用户host : '212.83.163.1',              //ssh 地址ref  : 'origin/master',             //GIT远程/分支repo : 'git@github.com:repo.git',   //git地址path : '/var/www/production',       //服务器文件路径post-deploy : 'npm install && pm2 reload ecosystem.config.js --env production'  //部署后的动作}}
};

4、pm2启动接口服务js及WEB项目!

打开终端cd到你的项目根目录,运行:

pm2 start ecosystem.config.js

 在终端运行pm2 ls可以看到这个服务已经正常启动!

运行后端服务,同样cd到服务的js文件,运行pm2 start app.js

 可以看到两个服务均正常运行!此时你关闭所有终端,浏览器中你的服务完全正常打开。而不像之前npm run dev关闭后,项目无法运行打开了。

后面再配合pm2的开机自启动功能,用户则不再每天去运行项目中的脚本亦可正常使用此服务系统。 

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/882684.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

Bands Page 乐队页面

“带区”页面提供了用于添加和删除带区、自定义带区设置以及更改带区和列布局的设计时工具。此页面如下图所示。 该页面说明了一个预览部分、一个用于访问所选频段设置的属性网格以及一组按钮,这些按钮提供了下面列表中描述的功能。 添加新乐队…- 创建新带。创建新…

Elasticsearch使用实战以及代码详解

Elasticsearch 是一个使用 Java 语言编写、遵守 Apache 协议、支持 RESTful 风格的分布式全文搜索和分析引擎,它基于 Lucene 库构建,并提供多种语言的 API。Elasticsearch 可以对任何类型的数据进行索引、查询和聚合分析,无论是文本、数字、地…

【论文学习与撰写】,论文word文档中出现乱码的情况,文档中显示的乱码,都是英文字母之类的,但打印预览是正常的

目录 1、问题 2、解决方法 1、问题 写论文的时候,有时会出现乱码的情况, 如下图,这种情况, 可是 在打印预览的时候,就显示的正常 如下图, 2、解决方法 既然是文档正文显示错误,显示乱码&…

【HarmonyOS NEXT】服务端向终端推送消息——获取Push Token

【需求】 获取Push Token 【文档】 https://developer.huawei.com/consumer/cn/doc/harmonyos-guides-V5/push-get-token-V5 【代码】 // EntryAbility.ets 文件 import { pushService } from kit.PushKit; export default class EntryAbility extends UIAbility {onCreat…

【详解】下载MySql安装教程(帮助数据库下载)

此版本是我下载的版本,其他版本均可以。 1.官网下载相应的版本:MYSQL:8.0.33 https://www.mysql.com/ 2.点击DOWNLOADS进入 3.在上述界面当中往下翻,找到社区版的下载界面 4.点进社区版的界面 前三个是Linux系统下的安装&a…

1.centos 镜像

centos 它有官网的下载地址:https://vault.centos.org/ 选择想要的版本,我选择 centos7.8 进入到镜像目录 isos 选择 x86_64 选择想要的版本,我选择 CentOS-7-x86_64-DVD-2003.iso 安装就正常安装就行。我选择虚拟机安装。这个参考&…

git的安装以及入门使用

文章目录 git的安装以及入门使用什么是git?git安装git官网 git初始化配置使用方式初始化配置: git的安装以及入门使用 什么是git? Git 是一个免费开源的分布式版本控制系统,使用特殊的仓库数据库记录文件变化。它记录每个文件的…

前端开发设计模式——状态模式

目录 一、状态模式的定义和特点 二、状态模式的结构与原理 1.结构: 2.原理: 三、状态模式的实现方式 四、状态模式的使用场景 1.按钮的不同状态: 2.页面加载状态: 3.用户登录状态: 五、状态模式的优点 1.提…

Matplotlib和Seaborn数据可视化

目录 Matplotlib图表绘制 准备工作 折线图line 柱状图bar 水平条形图barh 饼图pie 散点图scatter 气泡图csatter 箱线图boxplot 直方图hist 蜂巢图hexbin Seaborn图表绘制 准备数据 关系散点图scatterplot 关系散点线形图replot 分类散点图stripplot 分类小提…

Flink窗口分配器WindowAssigner

前言 Flink 数据流经过 keyBy 分组后,下一步就是 WindowAssigner。 WindowAssigner 定义了 stream 中的元素如何被分发到各个窗口,元素可以被分发到一个或多个窗口中,Flink 内置了常用的窗口分配器,包括:tumbling wi…

前缀和和差分算法

文章目录 一维前缀和一维前缀和概念一维前缀和数组的构建 二维前缀和二维前缀和概念二维前缀和数组的构建 一维差分一维差分概念一维差分数组的构建 二维差分二维差分概念二维差分数组的构建 一维前缀和 一维前缀和概念 一维前缀和是一种常用的数据预处理方法,它能…

JS事件和DOM

1. DOM 1.1 基本概念 DOM,全称 Document Object Model,即文档对象模型。它是 Web 上最常用的 API 之一,是加载在浏览器中的文档模型,可以将文档表示为节点树(或称 DOM 树),其中每个节点代表文…

【协议】IIC总线协议学习

一、IIC基本介绍 设计I2C的初衷是减少电视机等复杂电子系统内部的布线数量,同时也降低制造成本。通过使用只有两根线的通信总线,它有效地减少了器件间连接的复杂性。 IIC总线是两线制总线,仅有串行数据线SDA和串行时钟线SCL进行通信。减少…

【Python实例】Python读取并绘制tif数据

【Python实例】Python读取并绘制tiff数据 Python实例-以全球不透水面积数据为例数据准备:全球不透水面积数据基于gdal库绘制tif图基于Rasterio库绘制tif图 参考 GeoTIff 是一个标准的.tif 文件或是一个图像文件格式,它包含了一些额外的空间信息&#xff…

prompt learning

prompt learning 对于CLIP(如上图所示)而言,对其prompt构造的更改就是在zero shot应用到下游任务的时候对其输入的label text进行一定的更改,比如将“A photo of a{obj}”改为“[V1][V2]…[Vn][Class]”这样可学习的V1-Vn的token…

业务开发常见问题-并发工具类

hello,大家好,本讲我们一起聊一下常见的几个并发工具类的使用和坑! 在日常工作中,我们经常会遇到多线程并发问题,比如ThreadLocal、锁、ConcurrentHashMap、CopyOnWriteArrayList等。那么如何正常的使用呢?…

【最新通知】2024年Cisco思科认证CCNA详解

CCNA现在涵盖安全性、自动化和可编程性。该计划拥有一项涵盖IT职业基础知识的认证,包括一门考试和一门培训课程,助您做好准备。 CCNA培训课程和考试最近面向最新技术和工作岗位进行了重新调整,为您提供了向任何方向发展事业所需的基础。CCNA认…

blender分离含有多个动作的模型,并导出含有材质的fbx模型

问题背景 笔者是模型小白,需要将网络上下载的fbx模型中的动作,分离成单独的动作模型,经过3天摸爬滚打,先后使用了blender,3d max,unity,最终用blender完成,期间参考了众多网络上大佬…

【Ansiable】ansible的模块和主机清单

目录 一、介绍一些运维自动化工具 二、Ansible 概述/简介 三、Ansible 工作机制 3.1 内部工作机制 3.2 外部工作机制 四、Ansible 执行流程 五、Ansblie 安装以及日常操作模块***** 5.1 ansible 环境安装部署 5.2 ansible 命令行模块 5.2.1 command 模块 5.2.2 shel…

明源云ERP报表服务GetErpConfig.aspx接口存在敏感信息泄露

一、漏洞简介 在访问 /service/Mysoft.Report.Web.Service.Base/GetErpConfig.aspx?erpKeyerp60 路径时,返回了包含敏感信息的响应。这些信息包括但不限于数据库连接字符串、用户名、密码、加密密钥等。这些敏感信息的暴露可能导致以下风险:数据库访问…