ecs启动多个springboot项目?

在 ECS(Elastic Compute Service,阿里云的云服务器)上启动多个 Spring Boot 项目,可以通过以下几种方式实现:


✅ 方法一:不同端口运行多个 Spring Boot 应用

步骤:

  1. 将每个 Spring Boot 项目打包为独立的 jar 包

    mvn clean package
  2. 修改配置文件 application.ymlapplication.properties 中的 server.port

    • 例如:
      • 项目 A 使用 server.port=8080
      • 项目 B 使用 server.port=8081
      • 项目 C 使用 server.port=8082
  3. 通过命令行分别启动

    java -jar projectA.jar &
    java -jar projectB.jar &
    java -jar projectC.jar &

    注意:使用 & 表示后台运行。你也可以使用 nohup 或者写成脚本。

  4. 查看运行状态

    ps aux | grep java
    netstat -tuln | grep 808

✅ 方法二:使用 Nginx 做反向X_X(可选)

如果你希望通过域名访问不同的服务,可以使用 Nginx 反向X_X到不同的端口。

示例配置 (/etc/nginx/conf.d/multi-springboot.conf):

server {
    listen 80;

    location /projectA/ {
        proxy_pass http://localhost:8080/;
    }

    location /projectB/ {
        proxy_pass http://localhost:8081/;
    }
}

注意:Spring Boot 需要设置 server.servlet.context-path 来匹配路径。


✅ 方法三:使用 Docker 容器化部署(推荐)

Docker 是管理多个 Spring Boot 应用的最佳实践之一。

步骤:

  1. 为每个 Spring Boot 项目编写 Dockerfile

    FROM openjdk:17-jdk-alpine
    COPY *.jar app.jar
    ENTRYPOINT ["java", "-jar", "app.jar"]
  2. 构建镜像

    docker build -t springboot-a .
    docker build -t springboot-b .
  3. 运行容器并映射不同端口

    docker run -d -p 8080:8080 --name a springboot-a
    docker run -d -p 8081:8081 --name b springboot-b
  4. (可选)使用 Docker Compose 管理多个容器:

    version: '3'
    services:
      service-a:
        image: springboot-a
        ports:
          - "8080:8080"
      service-b:
        image: springboot-b
        ports:
          - "8081:8081"

✅ 方法四:使用 systemd 管理服务(适用于生产环境)

你可以为每个 Spring Boot 应用创建一个 systemd 服务单元文件。

示例:/etc/systemd/system/projectA.service

[Unit]
Description=Project A Spring Boot App
After=syslog.target

[Service]
User=root
ExecStart=/usr/bin/java -jar /root/projectA.jar
SuccessExitStatus=143
StandardOutput=file:/var/log/projectA.log
StandardError=file:/var/log/projectA.err

[Install]
WantedBy=multi-user.target

然后执行:

systemctl daemon-reload
systemctl enable projectA
systemctl start projectA

🧠 小贴士

方式 是否推荐 说明
多端口启动 简单快速,适合测试环境
Nginx 反代 ✅✅ 适合对外提供统一入口
Docker ✅✅✅ 推荐用于生产,易于扩展和维护
systemd ✅✅ 适合长期运行的服务

❓常见问题

Q1:如何防止端口冲突?

  • 检查端口是否被占用:
    lsof -i :8080
    netstat -tulnp | grep 8080

Q2:如何开机自启?

  • 使用 nohup + 开机脚本 /etc/rc.local,或使用 systemd

Q3:如何日志分离?

  • 启动时重定向输出:
    nohup java -jar projectA.jar > projectA.log 2>&1 &

如需我帮你生成某个具体项目的启动脚本或 Docker 配置,请告诉我你的项目数量、端口、目录结构等信息。

未经允许不得转载:云计算导航 » ecs启动多个springboot项目?