Windows Server部署Vue3+Spring Boot项目

在Windows Server 上部署Vue3 + Spring Boot前后端分离项目的详细步骤如下:


一、环境准备

  1. 安装JDK 17+

    • 下载JDK MSI安装包(如Oracle JDK 或 OpenJDK)

    • 双击安装,配置环境变量:

      • JAVA_HOME:JDK安装路径(如 C:\Program Files\Java\jdk-17

      • 添加 %JAVA_HOME%\bin 到 Path

  2. 安装Node.js

    • 下载Node.js LTS版

    • 默认安装,验证安装成功:

      bash

      复制

      下载

      node -v
      npm -v
  3. 安装Nginx

    • 下载Windows版Nginx

    • 解压到目录(如 C:\nginx


二、后端部署(Spring Boot)

  1. 打包项目

    bash

    复制

    下载

    # 在Spring Boot项目根目录执行
    mvn clean package -DskipTests
    • 生成 target/项目名.jar(如 myapp-0.0.1-SNAPSHOT.jar

  2. 上传文件到服务器

    • 将JAR包放到服务器目录(如 C:\app\backend

  3. 启动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 并双击运行。

  4. 验证后端

    • 访问 http://localhost:8080/api/test(按实际API路径)


三、前端部署(Vue3)

  1. 打包项目

    bash

    复制

    下载

    npm run build
    • 生成 dist 文件夹(包含静态文件)

  2. 上传文件到服务器

    • 将 dist 文件夹内容放到Nginx目录(如 C:\nginx\html\frontend

  3. 配置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;}
      }
  4. 启动Nginx

    bash

    复制

    下载

    # 命令行进入nginx目录
    start nginx

四、防火墙配置

  1. 开放端口(管理员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

五、设置开机自启动

  1. Spring Boot

    • 创建批处理文件 start-backend.bat(内容同上)

    • 将快捷方式放入启动文件夹:

      复制

      下载

      C:\ProgramData\Microsoft\Windows\Start Menu\Programs\StartUp
  2. Nginx

    • 创建批处理文件 start-nginx.bat

      batch

      复制

      下载

      @echo off
      C:\nginx\nginx.exe
    • 同样将快捷方式放入启动文件夹。


六、验证部署

  1. 访问前端页面:

    复制

    下载

    http://服务器IP或域名/
  2. 检查API请求:

    • 前端页面调用 /api/xxx 应正常返回后端数据


常见问题解决

  1. 端口冲突

    • 修改Spring Boot端口:application.properties 中添加 server.port=9090

    • 或关闭占用端口的进程(如IIS默认占用80端口):

      bash

      复制

      下载

      net stop http /y
  2. Nginx代理404

    • 确保 proxy_pass 地址与Spring Boot运行地址一致

    • 检查后端API路径前缀(如 /api/v1 需在Nginx中匹配)

  3. 静态资源加载失败

    • 检查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.batstart-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服务:

  1. 下载 nssm.exe

  2. 创建服务:

    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堆内存建议最大并发应用数
小型应用512MB4~6个
中型应用1-2GB2~3个
大型应用4GB+1个(独占服务器)

经验值:预留至少1GB内存给操作系统和Nginx


🔧 故障排查技巧

  1. 端口冲突

    powershell

    复制

    下载

    netstat -ano | findstr ":8080"
  2. 查看特定应用日志

    bash

    复制

    下载

    tail -f C:\apps\app1\logs\application.log
  3. 内存泄漏检测

    bash

    复制

    下载

    jcmd <PID> GC.heap_info

通过以上方案,您可以稳定运行多个Spring Boot应用。对于生产环境,建议:

  1. 使用 Docker容器化部署(需Windows Server 2016+)

  2. 配置 APM监控(如SkyWalking)

  3. 重要服务配置 集群高可用

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

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

相关文章

CCF CSP 第37次(2025.03)(3_模板展开_C++)(哈希表+stringstream)

CCF CSP 第37次&#xff08;2025.03&#xff09;&#xff08;3_模板展开_C&#xff09; 解题思路&#xff1a;思路一&#xff08;哈希表stringstream&#xff09;&#xff1a; 代码实现代码实现&#xff08;思路一&#xff08;哈希表stringstream&#xff09;&#xff09;&…

数据安全管理进阶:81页 2024数据安全典型场景案例集【附全文阅读】

《2024 数据安全典型场景案例集》聚焦政务数据安全&#xff0c;覆盖数据细粒度治理、授权运营、接口安全、系统接入、批量数据共享、使用侧监管、风险监测、账号管控、第三方人员管理、密码应用等十大典型场景&#xff0c;剖析各场景风险并提供技术方案&#xff0c;如基于 AI 的…

Leetcode 261. 以图判树

1.题目基本信息 1.1.题目描述 给定编号从 0 到 n - 1 的 n 个结点。给定一个整数 n 和一个 edges 列表&#xff0c;其中 edges[i] [ai, bi] 表示图中节点 ai 和 bi 之间存在一条无向边。 如果这些边能够形成一个合法有效的树结构&#xff0c;则返回 true &#xff0c;否则返…

【ISAQB大纲解读】LG 1-8:区分显性陈述和隐性假设(R1)

软件架构师&#xff1a; 应明确提出假设或先决条件&#xff0c;从而防止隐性假设 知道隐性假设可能会导致利益相关方之间的潜在误解 1. 应明确提出假设或先决条件&#xff0c;防止隐性假设 为什么重要&#xff1f; 隐性假设是架构风险的温床 例如&#xff1a;假设“所有服务都…

IT运维工具的选择标准有哪些?

选择IT运维工具时&#xff0c;可参考以下标准&#xff0c;确保工具适配业务需求且高效易用&#xff1a; 1. 明确业务需求与场景 • 核心目标&#xff1a;根据运维场景&#xff08;如监控、自动化、安全等&#xff09;匹配工具功能。例如&#xff0c;监控大规模集群选Promethe…

MySQL 核心知识整理【一】

一、MySQL存储引擎对比&#xff1a;InnoDB vs MyISAM 在使用MySQL时&#xff0c;选择合适的存储引擎对性能影响很大。最常见的两个引擎是 InnoDB 和 MyISAM&#xff0c;它们各自的设计目标不同&#xff0c;适用场景也不一样。 事务与数据安全性方面&#xff0c;InnoDB 支持事…

人工智能在智能制造业中的创新应用与未来趋势

随着工业4.0和智能制造的快速发展&#xff0c;人工智能&#xff08;AI&#xff09;技术正在深刻改变制造业的各个环节。从生产自动化到质量检测&#xff0c;从供应链优化到设备维护&#xff0c;AI的应用不仅提高了生产效率&#xff0c;还提升了产品质量和企业竞争力。本文将探讨…

arc3.2语言sort的时候报错:(sort < `(2 9 3 7 5 1)) 需要写成这种:(sort > (pair (list 3 2)))

arc语言sort的时候报错&#xff1a;(sort < (2 9 3 7 5 1)) arc> (sort < (2 9 3 7 5 1)) Error: "set-car!: expected argument of type <pair>; given: 9609216" arc> (sort < (2 9 3 )) Error: "Function call on inappropriate object…

Ubuntu 24.04 LTS Chrome 中文输入法(搜狗等)失效?一行命令解决

Ubuntu 24.04 LTS Chrome 中文输入法&#xff08;搜狗等&#xff09;失效&#xff1f;一行命令解决 在 Ubuntu 24.04 LTS 中&#xff0c;如果你发现 Chrome 浏览器用不了搜狗输入法或其他 Fcitx5 中文输入法&#xff0c;可以试试下面的方法。 直接上解决方案&#xff1a; 打…

大模型前处理-CPU

前处理包含哪些流程 分词 tokenizationembedding CPU可以做哪些优化 分词 分词在做什么&#xff1f; 什么是词元化&#xff1f; 词元化&#xff08;Tokenization&#xff09;是把一段自然语言文本拆分成更小的单元&#xff08;称为“词元”&#xff0c;即 Token&#xff0…

Kafka数据怎么保障不丢失

在分布式消息系统中&#xff0c;数据不丢失是核心可靠性需求之一。Apache Kafka 通过生产者配置、副本机制、持久化策略、消费者偏移量管理等多层机制保障数据可靠性。以下从不同维度解析 Kafka 数据不丢失的核心策略&#xff0c;并附示意图辅助理解。 一、生产者端&#xff1a…

图像处理篇---face_recognition库实现人脸检测

以下是使用face_recognition库实现人脸检测的详细步骤、实例代码及解释&#xff1a; 一、环境准备 1. 安装依赖库 pip install face_recognition opencv-python # 核心库 pip install matplotlib # 用于显示图像&#xff08;可选&#xff09;2. 依赖说明 face_recognitio…

vb.net oledb-Access 数据库本身不支持命名参数,赋值必须和参数顺序一致才行

参数顺序问题&#xff1a;OleDb 通常依赖参数添加的顺序而非名称,为什么顺序要一样? OleDbParameter 顺序依赖性的原因 OleDb 数据提供程序依赖参数添加顺序而非名称&#xff0c;这是由 OLE DB 规范和 Access 数据库的工作机制共同决定的。理解这个问题需要从数据库底层通信…

Syslog 全面介绍及在 C 语言中的应用

Syslog 概述 Syslog 是一种工业标准的日志记录协议&#xff0c;用于在网络设备之间传递日志消息。它最早由 Eric Allman 在 1980 年代为 BSD Unix 开发&#xff0c;现在已成为系统和网络管理的重要组成部分。Syslog 协议允许设备将事件消息发送到中央服务器&#xff08;称为 sy…

HackMyVM-Art

信息搜集 主机发现 ┌──(kali㉿kali)-[~] └─$ nmap -sn 192.168.43.0/24 Starting Nmap 7.95 ( https://nmap.org ) at 2025-05-31 03:00 EDT Nmap scan report for 192.168.43.1 Host is up (0.0047s latency). MAC Address: C6:45:66:05:91:88 (Unknown) Nmap scan rep…

[paddle]paddle2onnx无法转换Paddle3.0.0的json格式paddle inference模型

使用PDX 3.0rc1 训练时序缺陷检测后导出的模型无法转换 Informations (please complete the following information): Inference engine for deployment: PD INFERENCE 3.0-->onnxruntime Why convert to onnx&#xff1a;在端侧设备上部署 Paddle2ONNX Version: 1.3.1 解…

DOCKER使用记录

1、拉取镜像 直接使用docker pull <image>&#xff0c;大概率会出现下面的报错信息&#xff1a; (base) jetsonyahboom:~$ docker pull ubuntu:18.04 Error response from daemon: Get "https://registry-1.docker.io/v2/": net/http: request canceled while …

Java实习面试题

一、理想汽车一面 1、总结你这个人擅长什么&#xff0c;你的优势是什么&#xff1f; 2、挑一个项目详细讲讲&#xff0c;重点讲下你怎么设计的&#xff0c;你的思路是什么&#xff0c;你做的过程中遇到什么难点&#xff0c;怎么克服这些难点&#xff1f; 3、使用RabbitMQ处理…

单元测试报错

报错信息如下所示&#xff1a; 五月 30, 2025 5:35:44 下午 org.junit.vintage.engine.descriptor.RunnerTestDescriptor warnAboutUnfilterableRunner 警告: Runner org.junit.internal.runners.ErrorReportingRunner (used on class redis.demo.RedisTemplateTest) does not…

00 QEMU源码分析中文注释与架构讲解(v8.2.4版本)

QEMU-v8.2.4源码中文注释与架构讲解 文档会不定期更新 注释作者将狼才鲸创建日期2025-05-30更新日期2025-06-02 CSDN阅读地址&#xff1a;QEMU源码中文注释与架构讲解Gitee源码仓库地址&#xff1a;才鲸嵌入式/qemu 一、前言 其它参考教程的网址&#xff1a; QEMU 源码目录…