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


二、后端部署(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.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服务:

  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堆内存 建议最大并发应用数
小型应用 512MB 4~6个
中型应用 1-2GB 2~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. 重要服务配置 集群高可用

相关推荐
程序猿DD1 小时前
OctaFuse Gateway 2.15.0:MCP 聚合、向量 Embeddings 与官方目录同步
后端·agent
余槐i3 小时前
PostgreSQL 函数索引报错 must be immutable:3种绕法与代价
数据库·后端·sql·postgresql·性能优化
需要8264 小时前
Spring Bean 生命周期:从实例化到销毁的完整钩子
java·后端·spring
遇印记4 小时前
传输层,网络层
运维·服务器·网络·windows·学习
凤山老林5 小时前
Spring Boot 接入国密 SM2/SM3/SM4 的一些实践记录
spring boot·后端·python
又見山5 小时前
Obsidian 跨平台同步实测:Nutstore Sync 在 Windows、Mac、Linux、iOS、Android 全平台综合测评
windows·macos·obsidian·obsidian同步·obsidian教程·obsidian入门·obsidian笔记库搭建
伯恩bourne6 小时前
Spring Boot Bean 注册的两种方式:@Component 家族 vs @Configuration + @Bean
java·spring boot·后端
张彦峰ZYF6 小时前
停顿短不等于延迟低:G1、ZGC 与低延迟服务的目标分野、代价账本与选型标定
后端·回收暂停、应用停止总时长·到达安全点、分配停滞·屏障吃吞吐、并发线程吃核心·并发窗口吃堆余量·分区式靠挑回收集兑现目标·染色指针式不支持压缩引用
pride.li6 小时前
第03章 Python 教程-基础语法:注释与变量
服务器·前端·后端·python·算法·计算机视觉
省钱兄--zs6 小时前
深圳24小时自助健身房软硬件解决方案实战指南与开发流程详解
java·数据仓库·spring boot·小程序·架构