一台服务器可以部署多个Spring Boot项目吗?

是的,一台服务器可以部署多个 Spring Boot 项目。这是非常常见和推荐的做法,尤其在资源有限或需要集中管理服务的场景中。

以下是实现方式和注意事项:


✅ 实现方式

1. 独立运行(推荐)

每个 Spring Boot 项目打包成一个独立的 JAR 文件,通过不同的端口启动。

  • 示例:

    java -jar project1.jar --server.port=8080
    java -jar project2.jar --server.port=8081
    java -jar project3.jar --server.port=8082
  • 优点:

    • 各项目相互隔离,互不影响。
    • 可独立更新、重启、监控。
    • 易于使用进程管理工具(如 systemdsupervisor)管理。

2. 使用 Nginx 做反向

将多个 Spring Boot 应用通过不同端口暴露,然后用 Nginx 根据路径或域名转发请求。

  • 示例配置(Nginx):

    server {
        listen 80;
    
        location /api/project1/ {
            proxy_pass http://localhost:8080/;
        }
    
        location /api/project2/ {
            proxy_pass http://localhost:8081/;
        }
    }

    或者按域名区分:

    server {
        server_name project1.example.com;
        location / {
            proxy_pass http://localhost:8080;
        }
    }
    
    server {
        server_name project2.example.com;
        location / {
            proxy_pass http://localhost:8081;
        }
    }
  • 优点:

    • 对外统一入口,更安全。
    • 支持负载均衡、HTTPS、缓存等高级功能。

3. 使用 Docker 容器化部署

每个 Spring Boot 项目打包成一个 Docker 镜像,运行在独立容器中,通过 Docker Compose 管理。

  • 示例 docker-compose.yml

    version: '3'
    services:
      app1:
        image: my-springboot-app1
        ports:
          - "8080:8080"
      app2:
        image: my-springboot-app2
        ports:
          - "8081:8081"
  • 优点:

    • 环境隔离,依赖不冲突。
    • 部署灵活,易于扩展。

⚠️ 注意事项

  1. 端口冲突

    • 每个 Spring Boot 应用必须使用不同的端口(server.port)。
    • 避免数据库、Redis 等中间件端口冲突。
  2. 资源占用

    • 多个 JVM 进程会消耗更多内存(每个应用都有自己的堆内存)。
    • 建议根据服务器配置合理分配内存(使用 -Xms, -Xmx 参数)。
  3. 日志管理

    • 建议每个项目有独立的日志文件目录,便于排查问题。
  4. 进程管理

    • 使用 systemdsupervisornohup 等工具确保进程后台运行并自动重启。
  5. 安全性

    • 多个项目共用服务器时,注意权限隔离,避免一个项目被攻破影响其他项目。

✅ 总结

方式 是否可行 推荐程度 说明
多 JAR 独立运行 ✅ 是 ⭐⭐⭐⭐☆ 简单直接,适合中小型项目
Nginx 反向 ✅ 是 ⭐⭐⭐⭐⭐ 推荐用于生产环境
Docker 部署 ✅ 是 ⭐⭐⭐⭐⭐ 最佳实践,适合微服务架构

结论:完全可以!
只要合理规划端口、资源和部署方式,一台服务器部署多个 Spring Boot 项目不仅可行,而且高效实用。