当前位置: 首页 > news >正文

Linux/麒麟系统上部署Vue+SpringBoot前后端分离项目

目录

1. 前端准备工作

        1.1 在项目根目录创建两份环境配置文件

        1.2 环境配置

2. 后端准备工作

        2.1 在项目resources目录创建两份环境配置文件

        2.2 环境配置

3. 前后端打包

        3.1 前端打包

        3.2 后端打包

4、服务器前后端配置及部署

        4.1 下载、安装、启动Nginx

        4.2 前端项目部署到Nginx

        4.3 后端配置


1. 前端准备工作

1.1 在项目根目录创建两份环境配置文件

1.2 环境配置

.env.development

# 开发环境
NODE_ENV = 'development'# 指定项目的API请求URL
VUE_APP_BASE_TARGET='http://127.0.0.1:8888'# 指定项目启动地址
VUE_APP_BASE_HOST='127.0.0.1'# 指定项目启动端口
VUE_APP_BASE_PORT=8080

.env.production

# 正式环境
NODE_ENV = 'production'# 指定项目的API请求URL
VUE_APP_BASE_TARGET='http://127.0.0.1:8889'# 指定项目启动地址
VUE_APP_BASE_HOST='127.0.0.1'# 指定项目启动端口
VUE_APP_BASE_PORT=8081
# 指定项目的API请求URL
VUE_APP_BASE_TARGET='http://127.0.0.1:8889'

说明:这边的地址要与后端启动地址和端口保持一致

vue.config.js

module.exports = defineConfig({//其他配置……// 代理配置(解决跨域问题)devServer: {//启动地址host: process.env.VUE_APP_BASE_HOST,//启动端口port: process.env.VUE_APP_BASE_PORT,proxy: {// 代理http://host:port/api/后的所有路由'/api': {// 目标地址 --> 服务器地址target: process.env.VUE_APP_BASE_TARGET,// 允许跨域changeOrigin: true,// 重写地址pathRewrite: {}}}}
});

说明:使用process.env. 获取到配置文件中定义的变量

 package.json

 "scripts": {"serve": "vue-cli-service serve --mode development","build": "vue-cli-service build --mode production","lint": "vue-cli-service lint"},

说明:

 --mode development 表示启动的时候采用本地环境配置(.env.development)
 --mode production    表示编译打包的时候采用生产环境配置(.env.production)

这边的 --mode  xxx,xxx来源于环境配置文件中的名称

# 正式环境
NODE_ENV = 'production'

2.后端准备工作

2.1 在项目resources目录创建两份环境配置文件

2.2 环境配置

application.properties

server.port=8880#多环境配置
spring.profiles.active=prod

说明:指定默认启动端口,默认启动生产环境配置

application-dev.properties

server.port=8888

application-prod.properties

server.port=8889

3.前后端打包

3.1 前端打包

依据自身使用的包管理工具,对应命令打包(这边我使用的是yarn)

yarn build

打包生成dist文件夹

3.2 后端打包

打包后生成target文件夹,找到jar包

这边我们打包方式采用jar包,方便后面启动。如果在pom.xml文件中没有配置war打包方式,那么默认就是jar。

扩展:war包和jar包区别

Spring Boot可以打包成WAR包,并且默认包含了Tomcat。在打包过程中,Spring Boot会自动检测是否存在Tomcat,如果存在则将其包含在WAR包中。如果不希望包含Tomcat,可以通过设置spring.embedded.tomcat.enabled属性为false来禁用Tomcat。但即使WAR包内置了Tomcat,也不能像JAR包一样直接通过命令启动。WAR包是用于部署在Web服务器或应用服务器上的文件格式,它必须被部署到一个支持Servlet容器(如Tomcat)的服务器上,并通过该服务器来运行应用程序。

虽然WAR包内置了Tomcat,但它并不包含整个Tomcat服务器,而只是包含了您的应用程序本身和所需的依赖项。因此,您不能直接通过命令启动WAR包,而是需要将其部署到一个Tomcat服务器上,并使用该服务器的命令来启动应用程序。

Spring Boot可以打包成可执行的JAR包,并且默认内置了Tomcat服务器。因此,您可以通过命令直接启动Spring Boot应用程序,而不需要将其部署到一个独立的Tomcat服务器上。如果您希望以可执行JAR包的方式运行您的Spring Boot应用程序,可以使用Spring Boot的JAR打包插件来创建一个包含所有依赖项和应用程序本身的可执行JAR包。

4、服务器前后端配置及部署

工具准备:xftp

作用:传输打包文件到虚拟机

4.1 下载、安装、启动Nginx

Linux 部署 nginx(下载、安装、启动)

4.2 前端项目部署到Nginx

将打包后的dist文件夹放入nginx根目录下

/usr/local/nginx

② 重命名dist文件夹为项目名字,便于阅读(下方为bx)

/usr/local/nginx/conf   中找到nginx.conf配置文件,开始配置:

#user  nobody;
user root;

说明:指的linux中的用户,会涉及到nginx操作目录或文件的一些权限,默认为nobody,改为root

server {listen       8081;server_name  127.0.0.1;location / {root   bx;index  index.html index.htm;}location /api {proxy_pass  http://127.0.0.1:8889}
}

说明:如果配置多个项目,只需要在server同级下再创建一个相同的server{} 修改配置即可。

③ 重启nginx

至此访问127.0.0.1:8081,前端页面已经可以展示。但是因为后端没有启动,没有数据。

扩展如果后端接口不带有/api,但是前端为了某些需要,加上了/api开头。

this.$axios.get("/api/xxx/xxxx")

此时代理中若不对地址进行重写,是访问不到正确的后端接口。需要配置两个地方:

 vue.config.js

  // 代理配置(解决跨域问题)devServer: {//启动地址host: process.env.VUE_APP_BASE_HOST,//启动端口port: process.env.VUE_APP_BASE_PORT,proxy: {// 代理http://host:port/api/后的所有路由'/api': {// 目标地址 --> 服务器地址target: process.env.VUE_APP_BASE_TARGET,// 允许跨域changeOrigin: true,// 重写地址pathRewrite: {'^/api': ''}}}}

nginx.conf

server {listen       8081;server_name  127.0.0.1;location / {root   bx;index  index.html index.htm;}location /api {proxy_pass  http://127.0.0.1:8889#添加下面这行rewrite "^/api/(.*)$" /$1 break;}
}       

4.3 后端配置

由于我们上述将springboot项目打包成了jar包,自带完整的tomcat服务器,所以只需要将打包好的jar包上传到虚拟机项目文件夹中,通过命令启动:

java -jar yourproject.jar

至此,前后端已经全部部署完毕,已经可以通过127.0.0.1:8081正常访问项目了。
 

http://www.lryc.cn/news/233862.html

相关文章:

  • STM32在FreeRTOS下的us延时
  • 软件测试/人工智能丨深入人工智能软件测试:PyTorch引领新时代
  • Android 当中的 Fragment 协作解耦方式
  • 城市网吧视频智能监控方案,实现视频远程集中监控
  • C#WPF视频播放器实例
  • 【uniapp】Google Maps
  • C语言变量与常量
  • AI创作系统ChatGPT网站源码/支持DALL-E3文生图/支持最新GPT-4-Turbo模型+Prompt应用
  • 二维码智慧门牌管理系统升级,异常门牌聚合解决方案助力高效管理
  • 【XTDrone Ubuntu20.04】XTDrone+ Ubuntu20.04 + PX4安装
  • 河北大学选择ZStack Cube超融合一体机打造实训云平台
  • IDEA远程一键部署SpringBoot到Docker
  • 索引三星结构
  • rust 笔记 高级错误处理
  • python+Django 使用apscheduler实现定时任务 管理调度
  • Java编程中,异步操作流程中,最终一致性以及重试补偿的设计与实现
  • 吴恩达《机器学习》8-7:多元分类
  • Postman批量运行用例
  • 20个Golang最佳实践
  • Java 类之 java.lang.System
  • 认识Modbus通信协议(笔记)
  • 【算法】距离(最近公共祖先节点)
  • 基于SpringBoot的SSMP整合案例(消息一致性处理与表现层开发)
  • c#之反射详解
  • synchronized jvm实现思考
  • 【hive基础】hive常见操作速查
  • 2024年山东省职业院校技能大赛中职组“网络安全”赛项竞赛试题-A
  • 基于51单片机电子钟温度计数码显示设计( proteus仿真+程序+设计报告+讲解视频)
  • jenkins+centos7上传发布net6+gitlab
  • python趣味编程-5分钟实现一个F1 赛车公路游戏(含源码、步骤讲解)