Windows Server部署Vue3+Spring Boot项目
在Windows Server 上部署Vue3 + Spring Boot前后端分离项目的详细步骤如下:
一、环境准备
-
安装JDK 17+
-
下载JDK MSI安装包(如Oracle JDK 或 OpenJDK)
-
双击安装,配置环境变量:
-
JAVA_HOME
:JDK安装路径(如C:\Program Files\Java\jdk-17
) -
添加
%JAVA_HOME%\bin
到Path
-
-
-
安装Node.js
-
下载Node.js LTS版
-
默认安装,验证安装成功:
bash
复制
下载
node -v npm -v
-
-
安装Nginx
-
下载Windows版Nginx
-
解压到目录(如
C:\nginx
)
-
二、后端部署(Spring Boot)
-
打包项目
bash
复制
下载
# 在Spring Boot项目根目录执行 mvn clean package -DskipTests
-
生成
target/项目名.jar
(如myapp-0.0.1-SNAPSHOT.jar
)
-
-
上传文件到服务器
-
将JAR包放到服务器目录(如
C:\app\backend
)
-
-
启动Spring Boot
bash
复制
下载
java -jar C:\app\backend\myapp-0.0.1-SNAPSHOT.jar
-
后台运行(推荐使用批处理):
batch
复制
下载
@echo off start javaw -jar C:\app\backend\myapp-0.0.1-SNAPSHOT.jar exit
保存为
run-backend.bat
并双击运行。
-
-
验证后端
-
访问
http://localhost:8080/api/test
(按实际API路径)
-
三、前端部署(Vue3)
-
打包项目
bash
复制
下载
npm run build
-
生成
dist
文件夹(包含静态文件)
-
-
上传文件到服务器
-
将
dist
文件夹内容放到Nginx目录(如C:\nginx\html\frontend
)
-
-
配置Nginx反向代理
-
编辑
C:\nginx\conf\nginx.conf
:nginx
复制
下载
server {listen 80;server_name your-domain.com; # 替换为域名或IP# 前端静态资源location / {root html/frontend;index index.html;try_files $uri $uri/ /index.html; # 支持Vue Router history模式}# 后端API代理location /api {proxy_pass http://localhost:8080;proxy_set_header Host $host;proxy_set_header X-Real-IP $remote_addr;} }
-
-
启动Nginx
bash
复制
下载
# 命令行进入nginx目录 start nginx
四、防火墙配置
-
开放端口(管理员PowerShell):
powershell
复制
下载
New-NetFirewallRule -DisplayName "Allow HTTP" -Direction Inbound -Protocol TCP -LocalPort 80 -Action Allow New-NetFirewallRule -DisplayName "Allow Spring Boot" -Direction Inbound -Protocol TCP -LocalPort 8080 -Action Allow
五、设置开机自启动
-
Spring Boot
-
创建批处理文件
start-backend.bat
(内容同上) -
将快捷方式放入启动文件夹:
复制
下载
C:\ProgramData\Microsoft\Windows\Start Menu\Programs\StartUp
-
-
Nginx
-
创建批处理文件
start-nginx.bat
:batch
复制
下载
@echo off C:\nginx\nginx.exe
-
同样将快捷方式放入启动文件夹。
-
六、验证部署
-
访问前端页面:
复制
下载
http://服务器IP或域名/
-
检查API请求:
-
前端页面调用
/api/xxx
应正常返回后端数据
-
常见问题解决
-
端口冲突:
-
修改Spring Boot端口:
application.properties
中添加server.port=9090
-
或关闭占用端口的进程(如IIS默认占用80端口):
bash
复制
下载
net stop http /y
-
-
Nginx代理404:
-
确保
proxy_pass
地址与Spring Boot运行地址一致 -
检查后端API路径前缀(如
/api/v1
需在Nginx中匹配)
-
-
静态资源加载失败:
-
检查Nginx
root
路径是否正确 -
Vue打包时设置公共路径(
vue.config.js
):js
复制
下载
module.exports = {publicPath: process.env.NODE_ENV === 'production' ? '/frontend/' : '/' }
-
关键提示:
生产环境建议使用 PM2 管理Node进程(但Vue是静态资源无需Node运行时)
数据库等依赖服务需独立部署并配置连接信息
使用HTTPS可配置Nginx SSL证书(Let's Encrypt)
通过以上步骤,即可完成全栈项目在Windows Server 的部署。
在同一台Windows Server 服务器上完全可以同时运行多个JAR包。这是企业级部署的常见场景(如微服务架构)。以下是具体实现方法和注意事项:
✅ 关键实现步骤
1. 端口分配
为每个JAR分配不同端口(避免冲突):
-
修改Spring Boot的
application.properties
:properties
复制
下载
# 应用1 server.port=8080 # 应用2 server.port=8081
-
或启动时指定端口:
bash
复制
下载
java -jar app1.jar --server.port=8080 java -jar app2.jar --server.port=8081
2. 独立目录部署
为每个应用创建独立目录:
复制
下载
C:\apps ├─app1 │ ├─app1.jar │ └─config/ # 配置文件 ├─app2 │ ├─app2.jar │ └─config/
3. 批处理脚本启动
创建多个启动脚本(如 start-app1.bat
, start-app2.bat
):
batch
复制
下载
:: start-app1.bat @echo off cd /d C:\apps\app1 start javaw -Xmx512m -jar app1.jar --spring.config.location=config/application.properties exit
关键参数:
javaw
:无控制台窗口的后台运行
-Xmx512m
:限制内存用量
--spring.config.location
:指定配置文件路径
4. Nginx反向代理配置
统一入口转发到不同应用:
nginx
复制
下载
server {listen 80;# 应用1代理location /app1 {proxy_pass http://localhost:8080;proxy_set_header Host $host;}# 应用2代理location /app2 {proxy_pass http://localhost:8081;proxy_set_header Host $host;} }
⚠️ 注意事项
1. 资源监控
-
检查服务器资源占用:
powershell
复制
下载
# 查看内存/CPU使用 Get-Process javaw | Format-Table Name, CPU, WorkingSet
-
建议配置JVM内存限制(避免OOM):
bash
复制
下载
java -Xms256m -Xmx1024m -jar app.jar
2. 进程管理
-
查看所有Java进程:
bash
复制
下载
tasklist | findstr "javaw"
-
停止特定应用:
bash
复制
下载
taskkill /PID <进程ID> /F
3. 日志分离
为每个应用配置独立日志文件:
properties
复制
下载
# application.properties logging.file.name=logs/app1.log
4. 服务化部署(推荐)
使用 NSSM 将每个JAR注册为Windows服务:
-
下载 nssm.exe
-
创建服务:
powershell
复制
下载
# 注册应用1服务 nssm install App1_Service "C:\Program Files\Java\jdk-17\bin\java.exe" nssm set App1_Service AppParameters "-jar C:\apps\app1\app1.jar" nssm set App1_Service AppDirectory "C:\apps\app1"# 启动服务 nssm start App1_Service
-
服务管理:
services.msc
-
📊 资源分配建议
应用规模 | JVM堆内存 | 建议最大并发应用数 |
---|---|---|
小型应用 | 512MB | 4~6个 |
中型应用 | 1-2GB | 2~3个 |
大型应用 | 4GB+ | 1个(独占服务器) |
经验值:预留至少1GB内存给操作系统和Nginx
🔧 故障排查技巧
-
端口冲突:
powershell
复制
下载
netstat -ano | findstr ":8080"
-
查看特定应用日志:
bash
复制
下载
tail -f C:\apps\app1\logs\application.log
-
内存泄漏检测:
bash
复制
下载
jcmd <PID> GC.heap_info
通过以上方案,您可以稳定运行多个Spring Boot应用。对于生产环境,建议:
-
使用 Docker容器化部署(需Windows Server 2016+)
-
配置 APM监控(如SkyWalking)
-
重要服务配置 集群高可用
相关文章:
Windows Server部署Vue3+Spring Boot项目
在Windows Server 上部署Vue3 Spring Boot前后端分离项目的详细步骤如下: 一、环境准备 安装JDK 17 下载JDK MSI安装包(如Oracle JDK 或 OpenJDK) 双击安装,配置环境变量: JAVA_HOME:JDK安装路径…...
malloc 是如何分配内存的?——C 语言内存分配详解
文章目录 malloc是如何分配内存的?——C语言内存分配详解一、引言二、内存分配的基本概念1. 虚拟内存与物理内存2. 进程内存布局 三、malloc函数详解1. 函数原型与功能2. 关键特性 四、malloc的底层实现机制1. 内存分配器的角色2. 分配策略3. 内存碎片问题 五、glib…...
Opencl
**OpenCL(Open Computing Language)**是一种用于异构平台(包括CPU、GPU、FPGA、DSP等)上的并行计算框架和编程标准。它由Khronos Group制定,旨在提供一种跨平台、统一的编程接口,使开发者可以利用不同硬件设…...

如何在 HTML 中添加按钮
原文:如何在 HTML 中添加按钮 | w3cschool笔记 (请勿将文章标记为付费!!!!) 在网页开发中,按钮是用户界面中不可或缺的元素之一。无论是用于提交表单、触发动作还是导航࿰…...
【优秀三方库研读】quill 开源库中的命名空间为什么要用宏封装
将命名空间封装成宏的作用与优势 QUILL_BEGIN_NAMESPACE 和 QUILL_END_NAMESPACE 这种宏封装是 C++ 库开发中的常见技巧,主要解决以下问题并提供显著优势: 1. 解决核心问题:命名空间嵌套与版本控制 问题场景: 库需要支持多版本共存(如 quill::v1, quill::v2),但希望默认…...
AlphaFold3运行错误及解决方法(1)
1. chemical_component_sets.pickle 运行alphafold3遇到下面的问题: FileNotFoundError: [Errno 2] No such file or directory: /xxx/xxx/anaconda3/envs/alphafold3/lib/python3.11/site-packages/alphafold3/constants/converters/chemical_component_sets.pickle搜索你的系…...

Linux--进程的程序替换
问题导入: 前面我们知道了,fork之后,子进程会继承父进程的代码和“数据”(写实拷贝)。 那么如果我们需要子进程完全去完成一个自己的程序怎么办呢? 进程的程序替换来完成这个功能! 1.替换原理…...

调教 DeepSeek - 输出精致的 HTML MARKDOWN
【序言】 不知道是不是我闲的蛋疼,对百度AI 和 DeepSeek 的回答都不太满意。 DeepSeek 回答句子的引用链接,始终无法准确定位。有时链接只是一个域名,有时它给的链接是搜索串如: baidu.com/?q"搜索内容"。 百度AI 回答句子的引用…...

【笔记】Windows系统部署suna基于 MSYS2的Poetry 虚拟环境backedn后端包编译失败处理
基于 MSYS2(MINGW64)中 Python 的 Poetry 虚拟环境包编译失败处理笔记 一、背景 在基于 MSYS2(MINGW64)中 Python 创建的 Poetry 虚拟环境里,安装 Suna 开源项目相关包时编译失败,阻碍项目正常部署。 后端…...
GQA(Grouped Query Attention):分组注意力机制的原理与实践《一》
GQA(Grouped Query Attention)是近年来在大语言模型中广泛应用的一种注意力机制优化方法,最初由 Google 在 2023 年提出。它是对 Multi-Query Attention (MQA) 的扩展,旨在平衡模型性能与计算效率。 🌟 GQA 是什么&…...

【深度学习优化算法】02:凸性
【作者主页】Francek Chen 【专栏介绍】 ⌈ ⌈ ⌈PyTorch深度学习 ⌋ ⌋ ⌋ 深度学习 (DL, Deep Learning) 特指基于深层神经网络模型和方法的机器学习。它是在统计机器学习、人工神经网络等算法模型基础上,结合当代大数据和大算力的发展而发展出来的。深度学习最重…...
JAVA国际版一对一视频交友视频聊天系统源码支持H5+APP
全球畅连无界社交:JAVA国际版一对一视频交友系统源码(H5APP双端覆盖) 在全球化社交需求激增的今天,构建一个支持多语言、适配国际支付且功能丰富的视频交友平台,成为出海创业者和企业的核心诉求。JAVA国际版一对一视频…...

策略公开了:年化494%,夏普比率5.86,最大回撤7% | 大模型查询akshare,附代码
原创内容第907篇,专注智能量化投资、个人成长与财富自由。 这位兄弟的策略公开了,年化494%,夏普比率5.86,最大回撤7%,欢迎大家前往围观: http://www.ailabx.com/strategy/683ed10bdabe146c4c0b2293 系统代…...
【C++】string类的模拟实现(详解)
文章目录 上文链接一、整体框架二、构造函数1. default2. copy3. range 三、析构函数四、拷贝构造(1) 传统写法(2) 现代写法 五、赋值重载(1) 传统写法(2) 现代写法 六、获取元素1. operator[ ] 七、迭代器1. begin2. end 八、容量相关1. size2. reserve3. clear 九、修改操作1…...
业界宽松内存模型的不统一而导致的软件问题, gcc, linux kernel, JVM
当不同CPU厂商未能就统一的宽松内存模型(Relaxed Memory Model)达成一致,很多软件的可移植性会收到限制或损害,主要体现在以下几个方面: 1. 可能的理论限制 1.1. 并发程序的行为不一致 现象上,同一段多线程…...

多模态大语言模型arxiv论文略读(101)
ML-Mamba: Efficient Multi-Modal Large Language Model Utilizing Mamba-2 ➡️ 论文标题:ML-Mamba: Efficient Multi-Modal Large Language Model Utilizing Mamba-2 ➡️ 论文作者:Wenjun Huang, Jiakai Pan, Jiahao Tang, Yanyu Ding, Yifei Xing, …...
量化Quantization初步之--带量化(QAT)的XOR异或pyTorch版250501
量化(Quantization)这词儿听着玄,经常和量化交易Quantitative Trading (量化交易)混淆。 其实机器学习(深度学习)领域的量化Quantization是和节约内存、提高运算效率相关的概念(因大模型的普及,这个量化问题尤为迫切)。 揭秘机器…...
Linux Maven Install
在 CentOS(例如 CentOS 7 或 CentOS 8)中安装 Maven(Apache Maven)的方法主要有两种:使用包管理器(简单但可能版本较旧),或者手动安装(推荐,可获得最新版&…...
#Java篇:学习node后端之sql常用操作
学习路线 1、javascript基础; 2、nodejs核心模块 fs: 文件系统操作 path: 路径处理 http / https: 创建服务器或发起请求 events: 事件机制(EventEmitter) stream: 流式数据处理 buffer: 处理二进制数据 os: 获取操作系统信息 util: 工具方…...

电网“逆流”怎么办?如何实现分布式光伏发电全部自发自用?
2024年10月9日,国家能源局综合司发布了《分布式光伏发电开发建设管理办法(征求意见稿)》,意见稿规定了户用分布式光伏、一般工商业分布式光伏以及大型工商业分布式光伏的发电上网模式,当选择全部自发自用模式时&#x…...

如何查看电脑电池性能
检查电脑电池性能的方法如下: 按下winR键,输入cmd回车,进入命令行窗口 在命令行窗口输入powercfg /batteryreport 桌面双击此电脑,把刚刚复制的路径粘贴到文件路径栏,然后回车 回车后会自动用浏览器打开该报告 红…...

kubernetes》》k8s》》kubectl proxy 命令后面加一个
命令后面加一个& 在Linux终端中,如果在命令的末尾加上一个&符号,这表示将这个任务放到后台去执行 kubectl proxy 官网资料 是 Kubernetes 提供的一个命令行工具,用于在本地和 Kubernetes API Server 之间创建一个安全的代理通道。…...
深入理解Linux系统进程切换
目录 引言 一、什么是进程切换? 二、进程切换的触发条件 三、进程切换的详细步骤 1、保存当前进程上下文: 2、更新进程控制块(PCB): 3、选择下一个进程: 4、恢复新进程上下文: 5、切换地址空间: 6…...

网络安全运维实训室建设方案
一、网络安全运维人才需求与实训困境 在数字化时代,网络安全已成为国家安全、社会稳定和经济发展的重要基石。随着信息技术的飞速发展,网络安全威胁日益复杂多样,从个人隐私泄露到企业商业机密被盗,从关键基础设施遭受攻击到社会…...

DBeaver 连接mysql报错:CLIENT_PLUGIN_AUTH is required
DBeaver 连接mysql报错:CLIENT_PLUGIN_AUTH is required 一、必须要看这个 >> :参考文献 二、补充 2.1 说明 MySQL5、6这些版本比较老,而DBeaver默认下载的是MySQL8的连接库,所以连接旧版本mysql报错:CLIEN…...
联通专线赋能,亿林网络裸金属服务器:中小企业 IT 架构升级优选方案
在当今数字化飞速发展的时代,中小企业面临着日益增长的业务需求与复杂多变的市场竞争环境。如何构建高效、稳定且具性价比的 IT 架构,成为众多企业突破发展瓶颈的关键所在。而亿林网络推出的 24 核 32G 裸金属服务器,搭配联通专线的千兆共享带…...

Web3时代的数据保护挑战与应对策略
随着互联网技术的飞速发展,我们正步入Web3时代,这是一个以去中心化、用户主权和数据隐私为核心的新时代。然而,Web3时代也带来了前所未有的数据保护挑战。本文将探讨这些挑战,并提出相应的应对策略。 数据隐私挑战 在Web3时代&a…...

Qwen3与MCP协议:重塑大气科学的智能研究范式
在气象研究领域,从海量数据的解析到复杂气候模型的构建,科研人员长期面临效率低、门槛高、易出错的挑战。而阿里云推出的Qwen3大模型与MCP协议的结合,正通过混合推理模式与标准化协同机制,为大气科学注入全新活力。本文将深入解析…...

CppCon 2015 学习:Benchmarking C++ Code
关于性能问题与调试传统 bug(如段错误)之间差异的分析。以下是对这一页内容的详细解释: 主题:传统问题(如段错误)调试流程清晰 问题类型:段错误(Segmentation Fault) …...
URL 结构说明+路由(接口)的认识
一、URL 结构说明 以这个为例:http://127.0.0.1:5000/zhouleifeng 1.组成部分: http://:协议 127.0.0.1:主机(本地地址) :5000:端口号(Flask 默认 5000) /zhouleifeng:…...