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 可以对任何类型的数据进行索引、查询和聚合分析,无论是文本、数字、地…

C++学习,标准库 <ctime>

C 标准库提供了丰富的功能&#xff0c;其中 <ctime> 是处理时间和日期的标准库之一。它提供了一组函数&#xff0c;用于获取当前时间、日期以及执行时间相关的计算。<ctime> 库定义了一组与时间相关的函数和类型&#xff0c;这些函数和类型允许程序员在程序中处理时…

四、Linux 基本命令全攻略

Linux 基本命令全攻略 在 Linux 系统的世界里&#xff0c;掌握基本命令是至关重要的。不同的 Linux 发行版虽然在某些方面可能有所差异&#xff0c;但大部分基本命令是通用的。下面将按不同的系统分类&#xff0c;为大家详细介绍一些常用的 Linux 基本命令及其含义。 一、Ubu…

DeepSpeed性能调优与常见问题解决方案

1. 引言 什么是DeepSpeed&#xff1f; DeepSpeed是由微软开源的深度学习训练优化库&#xff0c;旨在帮助研究人员和工程师高效地训练大规模深度学习模型。基于PyTorch框架&#xff0c;DeepSpeed提供了一系列先进的技术&#xff0c;如ZeRO&#xff08;Zero Redundancy Optimiz…

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

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

JAVA集合知识总结(六)

文章目录 JAVA集合知识总结(六)Queue1. Queue 接口2. Queue 常用方法3. Queue 的实现类介绍3.1 LinkedList3.2 PriorityQueue3.3 阻塞队列&#xff08;BlockingQueue&#xff09;3.4 Deque&#xff08;双端队列&#xff09; 4. 应用场景总结 JAVA集合知识总结(六) Queue Queue…

【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…

vue实现html转化pdf功能,pdf文件可以复制文字

之前使用 html2canvas 和 jsPDF 实现html转pdf&#xff0c;但是客户说不能复制pdf中的文字&#xff0c;要改一下&#xff0c;先说不能复制的方法&#xff0c;再说可以复制的方法 一&#xff0c;html2canvas 和 jsPDF&#xff08;图片插入pdf不可复制&#xff09; 创建pdf.js文…

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

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

Mysql索引失效的原因有哪些?

&#x1f4da; 避免索引失效是一种常见的SQL优化 MySQL是一种关系型数据库&#xff0c;它可以通过建立索引来提高查询效率。索引是一种数据结构&#xff0c;它可以让数据库快速地找到满足条件的记录&#xff0c;而不需要扫描整张表。但是&#xff0c;并不是所有的查询都能利用索…

1.centos 镜像

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

git的安装以及入门使用

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

⭐ Unity Pico PXR_SDK转场淡入淡出

PXR_ScreenFade 脚本&#xff1a;官方SDK 脚本实现了屏幕的淡入淡出功能&#xff0c;封装了 CloseEyes 和 OpenEyes 方法&#xff0c;可以通过传入 Action 执行淡入淡出完成后的逻辑。 FadeController 脚本&#xff1a; 通过 GetComponent 获取 PXR_ScreenFade 组件&#xff0…

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

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

Matplotlib和Seaborn数据可视化

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

代码随想录算法训练营第五天| 哈希表理论基础 242.有效的字母异位词 349. 两个数组的交集 202. 快乐数 1. 两数之和

哈希表基础课程笔记 1. 什么是哈希表 哈希表&#xff08;Hash Table&#xff09;又称为散列表&#xff0c;是一种基于关键码&#xff08;Key&#xff09;直接进行访问的数据结构。简单理解&#xff0c;数组其实也是一种哈希表。哈希表通过关键码映射到数组的索引&#xff0c;…

Flink窗口分配器WindowAssigner

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

前缀和和差分算法

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

JS事件和DOM

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