前端Vue项目和后端Spring Boot项目能否部署在同一台服务器上?

可以,前端 Vue 项目和后端 Spring Boot 项目完全可以部署在同一台服务器上,这是生产环境中非常常见且成熟的架构方案。

核心思路

将 Vue 项目构建为静态资源(HTML/CSS/JS),由 Spring Boot 作为后端服务统一提供这些静态文件,实现前后端一体化部署。


✅ 推荐方案:Spring Boot 托管 Vue 静态资源

1. Vue 项目构建

# 在 Vue 项目中执行
npm run build
# 生成 dist/ 目录,包含 index.html、js/css 等静态文件

2. Spring Boot 配置

dist 目录复制到 Spring Boot 项目的 src/main/resources/static/public/ 目录下:

your-project/
├── src/
│   └── main/
│       ├── resources/
│       │   ├── static/          # 放 Vue 构建后的 dist 内容
│       │   └── application.yml
│       └── java/...
└── pom.xml

3. 关键配置(application.yml)

spring:
  web:
    resources:
      static-locations: classpath:/static/  # 默认已包含 public/ 和 static/

✅ Spring Boot 启动后会自动从 classpath:/static/ 提供静态资源
✅ API 请求(如 /api/*)由 Controller 处理,其他路径返回 Vue 的 index.html

4. 路由支持(防止刷新 404)

由于 Vue Router 使用 History 模式时依赖后端重定向,需在 Spring Boot 中添加拦截器或自定义规则:

方式一:添加全局异常处理 + 默认返回 index.html

@Controller
public class StaticResourceController {

    @RequestMapping(value = "/{path:[^\.]*}", method = RequestMethod.GET)
    public String forward() {
        return "forward:/"; // 转发到 /index.html
    }
}

方式二:在 application.properties 中启用默认欢迎页

spring.web.resources.add-mappings=true
spring.mvc.view.prefix=/
spring.mvc.view.suffix=.html

🔒 注意事项

问题 解决方案
跨域(CORS) 若前后端同源部署(同一域名+端口),无需 CORS;否则需配置 @CrossOrigin 或全局 CORS 策略
环境变量差异 Vue 中使用 .env.production 配置 API 地址(如 VITE_API_BASE_URL=/api),避免硬编码
Nginx 反向X_X(可选) 如需更灵活的路由控制,可用 Nginx 做反向X_X:
location /api { proxy_pass http://localhost:8080; }
location / { try_files $uri $uri/ /index.html; }
安全考虑 确保 dist 不包含敏感信息;API 接口做好权限校验(Spring Security)

🚀 部署示例命令

# 1. 构建 Vue
cd vue-app && npm install && npm run build

# 2. 复制静态资源到 Spring Boot
cp -r vue-app/dist/* spring-boot-app/src/main/resources/static/

# 3. 打包并运行 Spring Boot
cd spring-boot-app && mvn clean package
java -jar target/your-app.jar

访问 http://服务器IP:8080 即可同时加载前端页面和调用后端 API。


⚠️ 何时不建议同服部署?

  • 高并发场景下希望独立扩展前后端节点
  • 前端需要 CDN 提速(此时可分离部署,通过 Nginx X_X)
  • 多团队协作,前端团队独立 CI/CD

但绝大多数中小型项目,同服部署是简单、高效、低成本的首选方案

未经允许不得转载:CLOUD云枢 » 前端Vue项目和后端Spring Boot项目能否部署在同一台服务器上?