Windows Server部署Vue3+Spring Boot项目

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


一、环境准备

  1. 安装JDK 17+

    • 下载JDK MSI安装包(如Oracle JDKOpenJDK

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

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

      • 添加 %JAVA_HOME%\binPath

  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. 重要服务配置 集群高可用

相关推荐
前端付豪19 分钟前
17、自动化才是正义:用 Python 接管你的日常琐事
后端·python
我是一只代码狗23 分钟前
springboot中使用线程池
java·spring boot·后端
hello早上好36 分钟前
JDK 代理原理
java·spring boot·spring
PanZonghui39 分钟前
Centos项目部署之安装数据库MySQL8
linux·后端·mysql
PanZonghui41 分钟前
Centos项目部署之运行SpringBoot打包后的jar文件
linux·spring boot
Victor35642 分钟前
MySQL(119)如何加密存储敏感数据?
后端
用户3966144687191 小时前
TypeScript 系统入门到项目实战-慕课网
后端
guojl1 小时前
Dubbo SPI原理与设计精要
后端
Lemon程序馆1 小时前
搞懂 GO 的垃圾回收机制
后端·go