代码打包与基本配置

首先配置一台win系统服务器,开放你前端和后端运行的端口,如80和8080

前端打包

前端使用vue3,在打包前修改项目配置文件,我使用的是vite所以是vite.config.js。

import { defineConfig } from 'vite'
import vue from '@vitejs/plugin-vue'// https://vite.dev/config/
export default defineConfig({plugins: [vue()],server: {// 开发环境不配置代理,使用axios的baseURL统一管理API地址proxy: {},// 支持Vue Router的history模式historyApiFallback: true,},// 生产环境配置build: {outDir: 'dist',assetsDir: 'assets',// 确保生产环境使用正确的API地址rollupOptions: {output: {manualChunks: {vendor: ['vue', 'vue-router', 'pinia'],},},},},// 环境变量配置define: {__VUE_PROD_DEVTOOLS__: false,},
})

对于前端项目到此已经可以打包了,具体的api在nginx代理配置中指定。在项目目录使用

npm build

即可打包你的项目,这会生成一个dist目录,我们后续需将里面的内容复制到nginx里。

后端打包

对于后端我们需要修改两个文件,一是项目配置文件application.yml,二是cors跨域请求配置类。
首先在application.yml中指定数据库链接信息和Redis配置信息(如使用),这里我们使用的是单服务器数据库,若有多服务器需求还请另行学习:

spring:application:name: hbuyb-web-consoleservlet:multipart:max-file-size: 2048MBmax-request-size: 2048MB# 数据库连接信息datasource:url: jdbc:mysql://你的数据库ip/使用的数据库名?allowMultiQueries=trueusername: 用户名password: 密码# Redis配置data:redis:host: localhostport: 6379database: 0timeout: 5000  # 链接超时时间

若考虑到安全问题,可将用户名密码等使用本地文件存储或环境变量。
注意后端服务端口要和前端api请求端口一致
后端:

# 服务器信息
server:# 端口port: 8080

前端:

稍后修改nginx.conf配置,指定为 xxxxxxx:8080

然后是跨域请求配置,需要你新建一个类在项目配置目录下(只要是和启动类同级以下能被扫描到都行)

package com.hbuyb.config;import org.springframework.context.annotation.Configuration;
import org.springframework.web.servlet.config.annotation.CorsRegistry;
import org.springframework.web.servlet.config.annotation.WebMvcConfigurer;@Configuration
public class CorsConfig implements WebMvcConfigurer {@Overridepublic void addCorsMappings(CorsRegistry registry) {registry.addMapping("/**").allowedOrigins("http://xxx.xx.xxx.xx") // 允许的前端地址.allowedMethods("GET", "POST", "PUT", "DELETE", "OPTIONS").allowCredentials(true); // 如果前端需要传递Cookie}
}

跨域请求是如何产生的
同源策略:浏览器的安全策略,要求协议、域名、端口三者完全相同才算同源。

跨域产生条件:当前端页面与后端API的以下任意一项不同时会产生跨域:
协议不同(如 http vs https)
域名不同(如 localhost vs 127.0.0.1)
端口不同(如 8080 vs 3000)
对于复杂请求,浏览器会先发送 OPTIONS 请求检查是否允许跨域
这个请求包含以下头部信息:
Origin: 请求源地址
Access-Control-Request-Method: 实际请求的方法
Access-Control-Request-Headers: 实际请求包含的自定义头部
服务器响应预检请求
服务器通过 CorsConfig 中的配置处理 OPTIONS 请求
返回相应的 CORS 头部:

Access-Control-Allow-Origin: "http://xxx.xx.xxx.xx"
Access-Control-Allow-Methods: "GET, POST, PUT, DELETE, OPTIONS"
Access-Control-Allow-Credentials: "true"

浏览器收到允许跨域的响应后,才发送实际的业务请求,因此以上类会允许指定的前端服务器地址的请求。
配置好后,我们就可以在maven生命周期中启动package进行打包。
打包好后会在target目录中生成jar包
在这里插入图片描述
后续在服务器运行jar包即可。

部署

win系统有两大好处,图形化页面和方便的部署。

前端部署

前端使用nginx,前往官网下载:
https://nginx.org/en/download.html
在这里插入图片描述
下载的是一个zip压缩包,解压即用,建议大家在本地下载再传到服务器,对于服务器我们有一个很方便的链接方式是远程桌面功能,在远程桌面连接时设置好共享的远程启驱动器,就可以访问远程资源。在这里插入图片描述
上传好压缩包后解压:
在这里插入图片描述
其中在html文件夹将前端打包的dist目录中的所有内容复制进去:
在这里插入图片描述

然后修改conf中的nginx.conf配置文件,以下是我使用的配置:

# Nginx 主配置文件
# 此文件配置了Nginx服务器的主要参数和虚拟主机设置# 指定运行Nginx的用户,默认为nobody
# 在生产环境中建议使用专门的nginx用户
#user  nobody;# 工作进程数量,通常设置为CPU核心数
# 对于单核CPU,设置为1;多核CPU可以设置为auto或具体数字
worker_processes  1;# 错误日志配置(已注释)
# 可以设置不同的日志级别:debug, info, notice, warn, error, crit, alert, emerg
#error_log  logs/error.log;
#error_log  logs/error.log  notice;
#error_log  logs/error.log  info;# 进程ID文件路径(已注释)
#pid        logs/nginx.pid;# events模块:配置Nginx处理连接的方式
events {# 每个工作进程的最大并发连接数# 这个值影响服务器的并发处理能力worker_connections  1024;
}# http模块:配置HTTP服务器的主要参数
http {# 包含MIME类型定义文件# mime.types文件定义了各种文件扩展名对应的MIME类型include       mime.types;# 默认MIME类型,当无法确定文件类型时使用default_type  application/octet-stream;# 日志格式定义(已注释)# 定义了访问日志的格式,包含客户端IP、时间、请求信息等#log_format  main  '$remote_addr - $remote_user [$time_local] "$request" '#                  '$status $body_bytes_sent "$http_referer" '#                  '"$http_user_agent" "$http_x_forwarded_for"';# 访问日志配置(已注释)#access_log  logs/access.log  main;# 启用sendfile,提高文件传输效率# 当文件大小超过指定值时,使用sendfile系统调用sendfile        on;# TCP_NOPUSH选项(已注释)# 启用后,数据包会被累积到一定大小后再发送#tcp_nopush     on;# 保持连接超时时间(已注释)#keepalive_timeout  0;# 保持连接超时时间,单位为秒# 客户端在65秒内没有新的请求,连接将被关闭keepalive_timeout  65;# Gzip压缩配置(已注释)#gzip  on;# 虚拟主机配置块server {# 监听端口,80为HTTP默认端口listen 80;# 服务器名称,可以是域名或IP地址# 这里配置为您的服务器IP地址server_name xxx.xx.xxx.xx;# 网站根目录路径# 指向包含index.html的目录,通常是Vue项目的dist文件夹# 请根据实际情况修改路径root C:/Users/Administrator/Desktop/nginx-1.28.0/html;# 默认首页文件index index.html;# 处理Vue Router的history模式路由# 这是解决Vue单页应用刷新404问题的关键配置# try_files会按顺序尝试查找文件:# 1. 先查找请求的URI对应的文件# 2. 再查找请求的URI对应的目录# 3. 最后回退到index.html(让Vue Router处理路由)location / {try_files $uri $uri/ /index.html;}# 静态资源缓存配置# 匹配所有静态资源文件(JS、CSS、图片、字体等)# 设置长期缓存以提高加载速度location ~* \.(js|css|png|jpg|jpeg|gif|ico|svg|woff|woff2|ttf|eot)$ {# 缓存1年expires 1y;# 设置缓存控制头,public表示可被所有用户缓存add_header Cache-Control "public, immutable";# 允许跨域访问add_header Access-Control-Allow-Origin *;}# HTML文件缓存配置# HTML文件不缓存,确保用户能获取到最新版本location ~* \.html$ {# 不缓存expires -1;# 强制不缓存add_header Cache-Control "no-cache, no-store, must-revalidate";# HTTP/1.0兼容的不缓存头add_header Pragma "no-cache";}# API代理配置# 将/api/开头的请求代理到后端服务器location /api/ {# 代理到后端服务器,移除/api前缀proxy_pass http://xxx.xx.xxx.xx:8080/;# 设置代理请求头proxy_set_header Host $host;proxy_set_header X-Real-IP $remote_addr;proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;proxy_set_header X-Forwarded-Proto $scheme;# 处理跨域资源共享(CORS)add_header Access-Control-Allow-Origin *;add_header Access-Control-Allow-Methods "GET, POST, PUT, DELETE, OPTIONS";add_header Access-Control-Allow-Headers "DNT,User-Agent,X-Requested-With,If-Modified-Since,Cache-Control,Content-Type,Range,Authorization";# 处理OPTIONS预检请求# 浏览器在发送复杂请求前会先发送OPTIONS请求if ($request_method = 'OPTIONS') {add_header Access-Control-Allow-Origin *;add_header Access-Control-Allow-Methods "GET, POST, PUT, DELETE, OPTIONS";add_header Access-Control-Allow-Headers "DNT,User-Agent,X-Requested-With,If-Modified-Since,Cache-Control,Content-Type,Range,Authorization";# 预检结果缓存时间(20天)add_header Access-Control-Max-Age 1728000;add_header Content-Type "text/plain; charset=utf-8";add_header Content-Length 0;# 返回204状态码(无内容)return 204;}}# 安全响应头设置# 防止点击劫持攻击add_header X-Frame-Options "SAMEORIGIN" always;# 防止MIME类型嗅探攻击add_header X-Content-Type-Options "nosniff" always;# 启用XSS保护add_header X-XSS-Protection "1; mode=block" always;# 控制Referrer信息泄露add_header Referrer-Policy "strict-origin-when-cross-origin" always;# 隐藏Nginx版本信息,提高安全性server_tokens off;# 限制客户端请求体大小,防止大文件上传攻击client_max_body_size 10M;# Gzip压缩配置# 启用Gzip压缩以减少传输数据量gzip on;# 添加Vary头,告诉浏览器响应可能因Accept-Encoding而异gzip_vary on;# 最小压缩文件大小,小于此值的文件不压缩gzip_min_length 1024;# 对代理请求启用压缩gzip_proxied any;# 压缩级别,1-9,级别越高压缩率越高但CPU消耗也越大gzip_comp_level 6;# 指定需要压缩的MIME类型gzip_typestext/plaintext/csstext/xmltext/javascriptapplication/jsonapplication/javascriptapplication/xml+rssapplication/atom+xmlimage/svg+xml;# 错误页面配置# 404错误重定向到首页,让Vue Router处理error_page 404 /index.html;# 5xx错误显示默认错误页面error_page 500 502 503 504 /50x.html;# 禁止访问隐藏文件# 防止访问以点开头的隐藏文件(如.git、.htaccess等)location ~ /\. {deny all;access_log off;log_not_found off;}# 禁止访问备份文件# 防止访问以~结尾的备份文件location ~ ~$ {deny all;access_log off;log_not_found off;}}
}

以上我们修改了代理配置和nginx服务器ip地址,前端请求 /api/users 会被代理到 http://xxx.xx.xxx.xx:8080/users,和后端端口相同。

双击nginx.exe即可启动服务器,在任务管理器可找到服务
在这里插入图片描述
这样你的前端就跑起来了,若你有域名和证书等,还请另行配置。

后端部署

安装java,和你本地开发环境版本相同并注册到环境变量,具体请参考其他文章。
上传jar包到服务器,使用

java -jar 你的jar包

来运行

end

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

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

相关文章

Springcloud-----Nacos

一、Nacos的安装 Nacos是阿里推出的一种注册中心组件,并且已经开源,目前是国内最为流行的注册中心组件。下面我们来了解一下如何安装并启动Nacos。 Nacos是一个独立的项目,我们可以去GitHub上下载其压缩包来使用,地址如下&#x…

腾讯云重保流程详解:从预案到复盘的全周期安全防护

摘要 腾讯云针对国家级重大活动(如进博会、冬奥会等)提供的网络安全保障服务(重保)是一套系统化的主动防御体系。本文从“事前准备”“事中响应”“事后复盘”三个核心阶段出发,结合民生银行等典型用户的实战案例&…

单表查询-group by rollup优化

1、group by rollup基本用法 我们有时候在项目上看到group by rollup用法,其实就是对group by分组进行合计。 下面看一下例子 select count(1),c3 from t1 group by rollup(c3); 计划从计划中解读亦是如此,另外可以从结果上进行分析第21行的count其实就是…

云网络(参考自腾讯云计算工程师认证)

计算机网络:OSI七层模型: 应用层:负责处理网络应用程序之间的通信、 表示层:负责数据的格式化和加密、 会话层:负责建立、管理和终止会话、 传输层:负责端到端的可靠传输、 网络层:负责数据的路…

【MLLM】多模态理解Ovis2.5模型和训练流程(更新中)

note 模型架构:延续 Ovis 系列创新的结构化嵌入对齐设计。 Ovis2.5 由三大组件构成:动态分辨率 ViT 高效提取视觉特征,Ovis 视觉词表模块实现视觉与文本嵌入的结构对齐,最后由强大的 Qwen3 作为语言基座,处理多模态嵌…

mysql中的通用语法及分类

MySQL 是一种广泛使用的关系型数据库管理系统(RDBMS),其语法设计遵循 SQL 标准,但也有一些特有的扩展。以下从​​通用语法规范​​和​​SQL 语句分类​​两个维度系统梳理 MySQL 的核心语法体系。一、MySQL 通用语法规范通用语法…

Linux-搭建NFS服务器

Linux-搭建NFS服务器前言一、网络配置二、在nfs服务器上安装nfs-utils软件包三、设置共享目录四、挂载NFS共享目录前言 NFS(Network File System,网络文件系统) 是一种分布式文件系统协议,最初由 Sun Microsystems 于 1984 年开发…

eslasticsearch+ik分词器+kibana

eslasticsearch 下载地址:https://www.elastic.co/cn/downloads/past-releases ik分词器 下载地址:https://release.infinilabs.com/analysis-ik/stable/ kibana 下载地址:https://www.elastic.co/cn/downloads/kibana 1、解压安装包 将下载的 zi…

SOME/IP-SD IPv4组播的通信参数由谁指定?

<摘要> 在AUTOSAR SOME/IP-SD协议中&#xff0c;组播通信参数&#xff08;地址、协议、端口&#xff09;的协商机制。其核心在于明确规定了组播流的发布者和接收者之间由谁来“指定”通信路径&#xff0c;从而确保双方能够成功会合&#xff0c;实现高效的一对多事件分发。…

新手首次操作SEO核心要点

内容概要 初次接触SEO的新手朋友们&#xff0c;面对浩瀚的网络优化知识&#xff0c;难免感到无从下手。这份2025年的零基础入门指南&#xff0c;正是为你们量身打造。它清晰地规划了学习路径&#xff0c;从最基础的网站搭建注意事项开始&#xff0c;帮助你避开常见陷阱&#xf…

AI、人工智能基础: 模型剪枝的概念与实践(PyTorch版)

胡说八道: 各位观众老爷&#xff0c;大家好&#xff0c;我是诗人啊_&#xff0c;今天和各位分享模型剪枝的相关知识和操作&#xff0c;一文速通&#xff5e; &#xff08;屏幕前的你&#xff0c;帅气低调有内涵&#xff0c;美丽大方很优雅… 所以&#xff0c;求个点赞、收藏、关…

Kubernetes 服务发现与健康检查详解

Kubernetes 提供了多种机制来管理服务发现、负载均衡和容器健康状态监控。本文将围绕以下几个方面展开&#xff1a;Service 类型&#xff1a;ClusterIP、NodePort、Headless Service、LoadBalancer&#xff08;MetallB&#xff09;Ingress 的实现原理健康检查探针&#xff1a;L…

如何规划一年、三年、五年的IP发展路线图?

‍在知识付费领域&#xff0c;规划 IP 发展路线&#xff0c;需要从短期、中期、长期不同阶段&#xff0c;系统地布局内容、运营与商业变现&#xff0c;逐步提升 IP 影响力与商业价值。一年目标&#xff1a;立足定位&#xff0c;夯实基础精准定位&#xff0c;打磨内容利用创客匠…

C++从入门到实战(二十)详细讲解C++List的使用及模拟实现

C从入门到实战&#xff08;二十&#xff09;C List的使用及模拟实现前言一、什么是List1.1 List的核心特性1.2 List与vector的核心差异1.3 List的构造、拷贝构造与析构1.3.1 常用构造函数1.3.2 析构函数1.4 List的迭代器1.4.1 迭代器类型与用法示例1&#xff1a;正向迭代器遍历…

人工智能学习:机器学习相关面试题(一)

1、 机器学习中特征的理解 def: 特征选择和降维 特征选择&#xff1a;原有特征选择出子集 &#xff0c;不改变原来的特征空间 降维&#xff1a;将原有的特征重组成为包含信息更多的特征&#xff0c; 改变了原有的特征空间降维的主要方法 Principal Component Analysis (主成…

亚马逊巴西战略升级:物流网络重构背后的生态革新与技术赋能之路

在全球电商版图中&#xff0c;拉美市场正以惊人的增长速度成为新的战略高地&#xff0c;而巴西作为其中的核心市场&#xff0c;凭借庞大的人口基数、高速发展的数字经济以及不断提升的消费能力&#xff0c;吸引着众多电商巨头争相布局。近日&#xff0c;亚马逊宣布将于2025年底…

PS自由变换

自由变换 自由变换用来对图层、选区、路径或像素内容进行灵活的像素调整。可以进行缩放、旋转、扭曲等多种操作。快捷键&#xff1a;CtrlT&#xff0c;操作完成后使用Enter键可以确认变换自由变换过程中如果出现失误&#xff0c;可以按ESC退出&#xff1b;满意可以按enter确定。…

【K8s】整体认识K8s之存储--volume

为什么要用volume&#xff1f;首先。容器崩溃或重启时&#xff0c;所有的数据都会丢失&#xff0c;我们可以把数据保存到容器的外部&#xff0c;比如硬盘nfs&#xff0c;这样&#xff0c;即使容器没了&#xff0c;数据还在&#xff1b;第二就是容器之间是隔离的。我们如果想共享…

flutter工程

安装flutter 在VSCode中安装flutter extension、flutter组件 国内源下载flutter 3.35.2的SDK&#xff0c;安装&#xff0c;官网下载不了 将flutter安装目录加入环境变量中 D:\program\flutter_sdk\flutter\bin 执行 C:\Windows\System32>flutter --version Flutter 3.35.2 •…

C/C++ 高阶数据结构 —— 二叉搜索树(二叉排序树)

​ &#x1f381;个人主页&#xff1a;工藤新一 ​ &#x1f50d;系列专栏&#xff1a;C面向对象&#xff08;类和对象篇&#xff09; ​ &#x1f31f;心中的天空之城&#xff0c;终会照亮我前方的路 ​ &#x1f389;欢迎大家点赞&#x1f44d;评论&#x1f4dd;收藏⭐文章…