ecs部署多个springboot项目?

在阿里云ECS(Elastic Compute Service)上部署多个 Spring Boot 项目是完全可行的。以下是详细的部署方案和步骤,帮助你实现多 Spring Boot 应用共存于一台 ECS 实例。


✅ 一、部署思路

一台 ECS 实例可以运行多个 Spring Boot 应用,常见方式有:

  1. 每个应用独立运行(推荐)

    • 每个 Spring Boot 打成独立的 JAR 包
    • 使用不同端口启动
    • 使用 systemdsupervisor 管理进程
    • 使用 Nginx 做反向(统一 80/443 端口)
  2. 使用 Docker 容器化部署(更推荐)

    • 每个 Spring Boot 项目构建为 Docker 镜像
    • 使用 docker-compose 管理多个容器
    • 端口隔离、环境隔离、易于维护

✅ 二、方式一:直接部署 JAR(无 Docker)

1. 准备工作

  • ECS 已安装 JDK(建议 OpenJDK 8/11/17)
  • 上传多个 Spring Boot 的 JAR 文件(如 app1.jar, app2.jar

2. 配置不同端口

确保每个 Spring Boot 应用使用不同端口,例如:

  • app1.jarserver.port=8081
  • app2.jarserver.port=8082

可以在启动时通过命令行指定:

java -jar app1.jar --server.port=8081
java -jar app2.jar --server.port=8082

3. 使用 systemd 管理服务(推荐)

创建 systemd 服务文件,实现开机自启、自动重启。

示例:创建 app1.service

sudo vim /etc/systemd/system/app1.service

内容:

[Unit]
Description=Spring Boot App1
After=network.target

[Service]
Type=simple
User=root
ExecStart=/usr/bin/java -jar /opt/app1/app1.jar --server.port=8081
Restart=always

[Install]
WantedBy=multi-user.target

同理创建 app2.service,端口改为 8082。

启动服务:

sudo systemctl daemon-reexec
sudo systemctl enable app1.service
sudo systemctl start app1.service
sudo systemctl status app1.service

4. 使用 Nginx 反向(可选)

安装 Nginx:

sudo yum install nginx -y  # CentOS
sudo systemctl start nginx

配置 Nginx 转发请求:

server {
    listen 80;
    server_name app1.yourdomain.com;

    location / {
        proxy_pass http://127.0.0.1:8081;
        proxy_set_header Host $host;
        proxy_set_header X-Real-IP $remote_addr;
        proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
    }
}

server {
    listen 80;
    server_name app2.yourdomain.com;

    location / {
        proxy_pass http://127.0.0.1:8082;
        proxy_set_header Host $host;
        proxy_set_header X-Real-IP $remote_addr;
        proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
    }
}

然后重启 Nginx:

sudo nginx -t
sudo systemctl reload nginx

✅ 三、方式二:使用 Docker 部署(更推荐)

1. 安装 Docker

curl -fsSL https://get.docker.com | bash -s docker --mirror Aliyun
sudo systemctl start docker
sudo systemctl enable docker

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

# Dockerfile
FROM openjdk:11-jre-slim
COPY app1.jar /app.jar
EXPOSE 8081
ENTRYPOINT ["java", "-jar", "/app.jar"]

构建镜像:

docker build -t springboot-app1 .

3. 使用 docker-compose.yml 统一管理

# docker-compose.yml
version: '3.8'

services:
  app1:
    image: springboot-app1
    ports:
      - "8081:8081"
    restart: unless-stopped

  app2:
    image: springboot-app2
    ports:
      - "8082:8082"
    restart: unless-stopped

  nginx:
    image: nginx:alpine
    ports:
      - "80:80"
    volumes:
      - ./nginx.conf:/etc/nginx/nginx.conf
    depends_on:
      - app1
      - app2
    restart: unless-stopped

配合 Nginx 配置做反向。


✅ 四、注意事项

项目 建议
端口冲突 每个应用使用不同端口
内存分配 根据 ECS 配置合理分配 -Xmx 参数
日志管理 将日志输出到文件 /var/log/app1.log
监控 使用 topjstat、Prometheus + Grafana
安全 开启安全组端口,只暴露 80/443,关闭不必要的端口

✅ 五、总结

方式 优点 缺点
直接运行 JAR 简单,适合小项目 环境依赖、管理麻烦
Docker 部署 隔离性好,易维护,适合多项目 学习成本略高

👉 推荐使用 Docker + Nginx 方式部署多个 Spring Boot 项目,便于扩展和维护。


如果你提供具体项目数量、端口、域名需求,我可以帮你生成完整的 docker-compose.yml 或 Nginx 配置模板。欢迎继续提问!

未经允许不得转载:ECLOUD博客 » ecs部署多个springboot项目?