Linux | 将SpringBoot+Vue项目部署到服务器上


知识目录

  • 一、写在前面
  • 二、后端部署
    • 2.1 项目打包
    • 2.2 项目运行
  • 三、通过Shell脚本自动部署项目
    • 3.1 安装Git和Maven
    • 3.2 编写Shell脚本
    • 3.2 执行脚本
  • 四、前端部署
    • 4.1 安装NGINX
    • 4.2 node.js安装
    • 4.3 npm打包项目
    • 4.4 运行项目
  • 四、总结撒花

一、写在前面

大家好,我是初心,咱们又见面了!今天想跟大家分享的内容是如何部署 SpringBoot+Vue的前后端分离项目到服务器上。

本篇文章收录于 初心 的 Linux教程 专栏。

🏠 个人主页:初心%个人主页
🧑 个人简介:大家好,我是初心,和大家共同努力
💕 座右铭:理想主义的花,终究会盛开在浪漫主义的土壤里!🍺🍺🍺
💕欢迎大家:这里是CSDN,我记录知识的地方,喜欢的话请三连,有问题请私信😘

首先,这里的项目是一个前后端分离项目,前端采用的主要技术栈是Vue,后端采用主要技术栈是SSM。

前端采用 npm 进行打包后部署到 nginx 服务器上,后端采用 maven 打包后直接使用 java -jar 运行项目。

二、后端部署

2.1 项目打包

在部署项目之前,我们要做的第一件事就是将我们编译好的代码上传到服务器上去,下面详细介绍步骤。

  • 1.使用maven打包

我们通过 Maven 提供的打包工具,对我们的SpringBoot项目进行打包。

等待打包完成,idea的Run界面就会提示打包成功。

如果打包出错了,也就是 BUILD FAILED,就要先排查问题,将问题解决之后再进行打包。

  • 2.使用Xshell和Xftp上传 jar 包

打包成功后,我们的项目 jar 包生成在了项目的 target 目录下。

将 jar 包通过 XFTP 上传到服务器上即可。

在这里插入图片描述

2.2 项目运行

要运行任何和Java项目,JDK都是必不可少的,因此我们的第一件事就是安装JDK。

  • 1.安装JDK

关于JDK的安装,我已经安装过无数遍,大家可以参考我的这篇文章完成JDK的安装(很简单的,几步就好)Hadoop集群搭建(含JDK安装)。

  • 2.运行项目

执行Java的 jar 包最简单的命令就是:

java -jar xxx.jar(jar包)

下面以我的 jar 包为例执行演示,可以看到使用这个命令已经成功启动SpringBoot项目了。

细心的朋友会发现,使用这个命令运行项目会存在一个问题,那就是我们不能再输入命令了,它占用了我们这个连接,如果通过Ctrl+C退出,那么项目也会结束运行。

有没有什么办法,可以让我们既可以运行项目,也可以继续输入其他命令完成其他工作呢?

答案是有,那就是使用 nohup 命令:

nohup java -jar xxx.jar(jar包名) &> xxx.log(日志文件) &

这个命令的意思就是,将 java -jar 执行后启动的进程挂起,不占用当前窗口,并将该进程产生的日志文件放在 xxx.log 文件当中去。

  • 3.停止项目

对于使用 java -jar 启动项目,我们使用 Ctrl + C就可以停止了!那么对于悬挂项目,我们该如何停止项目?

首先使用如下命令查找进程号:

ps -ef | grep java

可以看到如下的进程,其中圆圈内的就是我们项目运行的进程号:

接下来杀死进程,如果没有任何输出,就证明杀死进程了,也就是停止了项目:

kill -9 进程号

如果使用 kill -9 无法杀死进程,还可以使用 kill -15 结束进程。

三、通过Shell脚本自动部署项目

使用Shell脚本自动部署项目的思想是:在Linux执行脚本后,系统结束已经进行的 java -jar 进程,然后自动从远程仓库拉取代码,并使用Maven进行打包,在执行 java -jar 命令将项目运行起来。

下面是具体的环境准备与执行步骤。

3.1 安装Git和Maven

由于篇幅原因,博主专门出了一期关于 如何在Linux上安装Git和Maven的教程 ,大家可以参考我的这篇文章:Linux安装Git和Maven。

3.2 编写Shell脚本

下面是编写好的Shell脚本代码,文件名为RunProject.sh,大家不要盲目复制,需要修改的地方认真修改:

echo ==================

echo 停止原来的工程

APP_NAME = 要运行的项目名

tpid = `ps -ef | grep $APP_NAME | grep -v grep | grep -v kill | awk '{print $2}'`


if [ ${tpid} ] ; then
	echo 'Stop Process!'
	kill -15 $tpid
fi
sleep 2

tpid = `ps -ef | grep $APP_NAME | grep -v grep | grep -v kill | awk '{print $2}'`
if [ ${tpid} ] ; then
	echo 'Kill Process!'
	kill -9 $tpid
else 
	echo 'Stop Process!'
fi

echo 准备从Git仓库拉取最新代码
cd /opt/module/yuling

echo 开始从Git仓库拉取最新代码
git pull

echo 开始打包
output=`mvn clean package -Dmaven.test.skip=true`

cd target

echo 启动项目
nohup java -jar 项目名-1.0-SNAPSHOT.jar &> 日志文件名.log &

echo 项目启动完成

3.2 执行脚本

  • 1.为用户授予执行Shell脚本的权限

使用 chmod 为普通用户授予执行Shell脚本的权限:

chmod 777 RunProject.sh
  • 2.执行Shell脚本

因为仓库中的依赖很少,Maven会去下载相关的依赖,所以初次启动会比较慢,使用如下命令执行Shell脚本:

./runproject

至此,使用脚本进行后端SpringBoot项目部署成功。

四、前端部署

我们的前端项目部署,是将使用 npm 打包好的项目放在 nginx 服务器上运行,通过访问 nginx 对外暴露的端口即可访问到前端页面。

4.1 安装NGINX

Nginx 是是一个开源的,支持高性能、高并发的 Web 服务和代理服务软件。

在传统的Web项目中,并发量小,用户使用的少。所以在低并发的情况下,用户可以直接访问tomcat服务器,然后tomcat服务器返回消息给用户。

nginx特点是占有内存少,并发能力强,事实上nginx的并发能力确实在同类型的网页服务器中表现较好,中国大陆使用nginx网站用户有:百度、京东、新浪、网易、腾讯、淘宝等。

下面介绍如何在Centos中安装NGINX。

  • 1.官网下载 nginx 并通过XFTP上传到Linux中

这是nginx官网,可以点击这里去下载nginx安装包:nginx官方下载地址,下载成功后得到这样一个压缩包。

通过xshell加XFTP上压缩包上传到 /opt/software 目录下:

  • 2.解压与重命名

执行解压命令,将nginx解压到 /opt/module 目录下,并将文件重命名为nginx:

tar -xzvf nginx-1.20.2.tar.gz -C /opt/module/
mv nginx-1.20.2 nginx
  • 3.安装需要的软件(gcc、openssl等)

因为编译nginx需要使用 gcc 编译器,所以我们需要安装 gcc 和一些其他相关软件:

yum install -y openssl*
yum -y install ncurses-devel
yum install -y gcc-c++
  • 4.安装nginx

进入到nginx安装目录下,并执行编译和安装命令

cd /opt/module/nginx
./configure
make
make install

至此,我们的nginx就安装好了,注意,安装成功后,我们的nginx并不是在解压后的目录,而是默认在 /usr/local/ 目录下,接下来就是启动和停止nginx服务器。

进入到nginx目录:

cd /usr/local/nginx/

启动nginx:

sudo sbin/nginx

停止nginx:

sudo sbin/nginx -s stop

4.2 node.js安装

NPM是随同NodeJS一起安装的包管理工具,能解决NodeJS代码部署上的很多问题。

也就是说,我们只要安装了Node.Js,就已经按照 npm 包管理工具。


node.js的安装步骤比较简单,大家可以参考这篇文章:node.js安装教程。

有了node.js,我们可以在cmd使用如下命令进行验证是否安装成功:

node -v
npm -v

4.3 npm打包项目

首先打开cmd,进入到前端项目的根目录下,也就是vue.config.js所存在的目录下,执行安装和打包命令即可,下面是具体的步骤:

  • 1.复制前端项目路径

在这里插入图片描述

  • 2.安装项目依赖
npm install
  • 3.编译项目
npm run serve
  • 4.打包项目
npm run build

如果一路顺风,那么会提示打包成功,并在根目录下生成dist目录,这个目录就是编译好的项目。如果中途出现什么报错,大家要耐心解决哦!

4.4 运行项目

  • 1.上传dist目录

将前端打包生成的dist目录,上传到Linux系统中的一个目录即可,这里我是放在了 /opt/software 目录下:

  • 2.修改nginx的配置文件 nginx.conf

首先还是进入到nginx目录下的conf目录:

cd /usr/local/nginx/conf/

编辑nginx.conf文件,将dist目录路径放在root后面即可:

vim nginx.conf

启动nginx:

/usr/local/nginx/sbin/nginx

现在,我们就可以通过 主机ip+nginx端口访问我们的前端页面了!

至此,前端部署也完成了!

四、总结撒花

😎本文主要讲解了如何将SpringBoot+Vue项目分别部署到Tomcat服务器和Nginx服务器上,希望对大家有所帮助,如果还有不懂的地方,欢迎大家给我留言交流哦!😊

这就是今天要分享给大家的全部内容了,我们下期再见!😊

🏠 本文由初心原创,首发于CSDN博客, 博客主页:初心%🏠

🏠 我在CSDN等你哦!😍

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

AlmaLinux 9.2 正式版发布 - RHEL 兼容免费发行版

AlmaLinux 9.2 正式版发布 - RHEL 兼容免费发行版 由社区提供的免费 Linux 操作系统,RHEL 兼容发行版。 请访问原文链接:https://sysin.org/blog/almalinux-9/,查看最新版。原创作品,转载请保留出处。 作者主页:sys…

K8s(Kubernetes)学习(一):k8s概念及组件

Kubernetes中文文档:https://kubernetes.io/zh-cn/docs/home/ Kubernetes源码地址:https://github.com/kubernetes/kubernetes 一:Kubernetes是什么 首先要了解应用程序部署经历了以下几个时代: 传统部署时代:在物理服务器上运…

ChatGPT学习研究总结

目录 ChatGPT研究总结 一、程序接入用途不大 二、思考:如何构建一个类似ChatGPT的自定义模型 一些ChatGPT研究学习资料(来源网络) (1)一文读懂ChatGPT模型原理 (2)MATLAB科研图像处理——…

DHCP+链路聚合+NAT+ACL小型实验

实验要求: 1.按照拓扑图上标识规划网络。 2.使用0SPF协议进程100实现ISP互通。 3.私网内PC属于VLAN1O, FTP Server属于VLAN2O,网关分 别为所连接的接入交换机,其中PC要求通过DHCP动态获取 4:私网内部所有交换机都为三层交换机,请合理规划VLAN&#…

带你深入学习k8s--(四) 控制器(k8s核心)

目录 一、概念 1、什么是控制器 2、控制器执行流程 3、控制器类型 二、控制器的使用 1、ReplicaSet 2、Deployment 1、版本迭代 2、回滚 3、修改滚动更新策略 4、暂停与恢复 3、daemonset 4、job 5、cronjob 前言: 上一章我们说到,pod有…

VScode添加右键运行、并设置每次运行前都清屏即去除之前的输出

一、添加右键运行 下载安装运行插件即可 二、运行前清屏 在运行插件中设置 找到Code-runner: Clear Previous Output,把√打上即可

【Linux Network】传输层协议——TCP

目录 TCP协议 TCP协议段格式 确认应答(ACK)机制 超时重传机制 连接管理机制 理解TIME_WAIT状态 解决TIME_WAIT状态引起的bind失败的方法 理解 CLOSE_WAIT 状态 滑动窗口 流量控制 拥塞控制 延迟应答 捎带应答 面向字节流 粘包问题 TCP异常情况 TCP小结 基于TCP应用层协议 TCP/U…

Pytroch nn.Unfold() 与 nn.Fold()图码详解

文章目录 Unfold()与Fold()的用途nn.Unfold()Unfold()与Fold() 变化模式图解 nn.Fold()单通道 滑动窗口无重叠模拟图片数据(b,3,9,9),通道数 C 为3,滑动窗口无重叠。单通道 滑动窗口有重叠。 卷积等价于:Unfold Matri…

【滤波专题-第7篇】“类EMD”算法分解后要怎样使用(3)——EMD降噪方法及MATLAB代码实现

使用EMD分解(以及其他“类EMD”分解方法,以下为了简便统称EMD)做信号降噪,是EMD的一个比较重要的应用方向。EMD可以将复杂的信号分解为一系列的固有模态函数(IMFs),每一个IMF都包含了信号的一部…

ChatGPT:2. 使用OpenAI创建自己的AI网站:1. 初探API

使用OpenAI创建自己的AI网站 如果你还是一个OpenAI的小白,有OpenAI的账号,但想调用OpenAI的API搞一些有意思的事,那么这一系列的教程将仔细的为你讲解如何使用OpenAI的API制作属于自己的AI网站。博主只能利用下班时间更新,进度慢…

【利用AI刷面试题】AI:十道不常见的TypeScript面试题

文章目录 前言😏以下是关于 TypeScript 的一些偏僻的面试题😝1. 泛型约束中的 "extends" 关键字有哪些用法和含义?2. 什么是交叉类型(Intersection Types)?如何在 TypeScript 中定义和使用它们&a…

第N2周:中文文本分类-Pytorch实现

目录 一、前言二、准备工作三、数据预处理1.加载数据2.构建词典3.生成数据批次和迭代器 三、模型构建1. 搭建模型2. 初始化模型3. 定义训练与评估函数 四、训练模型1. 拆分数据集并运行模型 一、前言 🍨 本文为🔗365天深度学习训练营 中的学习记录博客 …

不愧是腾讯 ,问的贼细

腾讯软件测试岗位的面试流程可能会因个人经验和公司而异,但通常情况下,腾讯软件测试的面试分为初试、二面、三面和四面。以下是每一轮面试可能涉及到的问题: 初试: 请介绍一下自己,以及为什么想要加入腾讯软件测试团…

时序预测 | MATLAB实现BO-CNN-LSTM贝叶斯优化卷积神经网络-长短期记忆网络时间序列预测

时序预测 | MATLAB实现BO-CNN-LSTM贝叶斯优化卷积神经网络-长短期记忆网络时间序列预测 目录 时序预测 | MATLAB实现BO-CNN-LSTM贝叶斯优化卷积神经网络-长短期记忆网络时间序列预测效果一览基本介绍模型搭建程序设计参考资料 效果一览 基本介绍 MATLAB实现BO-CNN-LSTM贝叶斯优…

操作系统实验二 进程(线程)同步

前言 实验二相比实验一难度有所提升,首先得先掌握好相应的理论知识(读者-写者问题和消费者-生产者问题),才能在实验中得心应手。任务二的代码编写可以借鉴源码,所以我们要先读懂源码。 1.实验目的 掌握Linux环境下&a…

浅谈Redis

一、Redis的简介 1.开源免费的缓存中间件,性能高,读可达110000次/s,写可达81000次/s。 2.redis的单线程讨论: V4.0之前:是单线程的,所有任务处理都在一个线程内完成. V4.0:引入多线程,异步线程用于处理一些耗…

Linux三种网络模式 | 仅主机、桥接、NAT

💗wei_shuo的个人主页 💫wei_shuo的学习社区 🌐Hello World ! Linux三种网络模式 仅主机模式:虚拟机只能访问物理机,不能上网 桥接模式:虚拟机和物理机连接同一网络,虚拟机和物理机…

Docker的四种网络模式

1.Host 模式 通常来讲,启动新的Docker容器,都会分配独立的Network Namespace隔离子系统,如果在运行是指定为host模式,那么Docker容器将不会获得一个独立的Network Namespace,而是和宿主机共用一个Network Namespace子…

山东专升本计算机第六章-数据库技术

数据库技术 SQL数据库与NOSQL数据库的区别 数据库管理系统 考点 6 数据库管理系统的组成和功能 组成 • 模式翻译 • 应用程序的翻译 • 交互式查询 • 数据的组织和存取 • 事务运行管理 • 数据库的维护 功能 • 数据定义功能 • 数据存取功能 • 数据库运行管理…

【图像基础知识】常见图像格式

文章目录 1 简介2 RGB3 BGR4 YUV4.1 YUV常见格式4.2 YUV420详解4.3 NV12 5 Gray6 图像格式之间的转换7 参考链接 原文来自于地平线开发者社区,未来会持续发布深度学习、板端部署的相关优质文章与视频,如果文章对您有帮助,麻烦给点个赞&#x…