一台ecs上部署两个springboot服务?

是的,可以在一台ECS(云服务器)上部署两个(甚至多个)Spring Boot服务,这是非常常见且可行的部署方式。以下是实现方法和注意事项:


✅ 实现方式

1. 确保端口不冲突

每个 Spring Boot 服务默认使用 8080 端口,因此需要修改其中一个或两个服务的端口。

修改方式:

application.ymlapplication.properties 中设置:

# 服务1
server:
  port: 8080
# 服务2
server:
  port: 8081

或者使用 application.properties

# 服务1
server.port=8080

# 服务2
server.port=8081

2. 部署方式

方式一:直接运行 jar 包(推荐新手)

将两个 Spring Boot 项目分别打包为 jar 文件,上传到 ECS,然后使用 java -jar 启动。

# 启动服务1
java -jar service1.jar &

# 启动服务2
java -jar service2.jar &

使用 & 可以后台运行,但建议使用 nohupsystemd 管理进程。

方式二:使用 nohup 持久运行
nohup java -jar service1.jar > service1.log 2>&1 &
nohup java -jar service2.jar > service2.log 2>&1 &
方式三:使用 systemd 服务管理(生产推荐)

创建两个 .service 文件,实现开机自启、日志管理、自动重启等。

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

[Unit]
Description=Spring Boot Service 1
After=network.target

[Service]
User=root
ExecStart=/usr/bin/java -jar /opt/service1/service1.jar
SuccessExitStatus=143
Restart=always
RestartSec=10

[Install]
WantedBy=multi-user.target

然后启用:

systemctl daemon-reexec
systemctl enable service1.service
systemctl start service1.service

service2 做类似操作,注意端口和路径区分。


3. 资源分配与监控

  • 检查 ECS 的 CPU、内存是否足够运行两个服务。
  • 可通过启动时限制 JVM 内存,避免 OOM:
java -Xms512m -Xmx1024m -jar service1.jar

4. 使用 Nginx 反向X_X(可选)

如果两个服务需要通过 80/443 端口对外提供服务,可以使用 Nginx 进行反向X_X。

例如:

server {
    listen 80;
    server_name api1.example.com;

    location / {
        proxy_pass http://localhost:8080;
        proxy_set_header Host $host;
    }
}

server {
    listen 80;
    server_name api2.example.com;

    location / {
        proxy_pass http://localhost:8081;
        proxy_set_header Host $host;
    }
}

⚠️ 注意事项

项目 建议
端口冲突 必须为每个服务分配不同端口
JVM 内存 根据 ECS 内存合理分配 -Xmx,避免内存溢出
日志管理 分开日志文件,便于排查问题
进程管理 使用 systemdsupervisor 管理服务生命周期
安全性 避免使用 root 用户运行服务,创建专用用户

✅ 总结

✅ 完全可以在一台 ECS 上部署多个 Spring Boot 服务,只需:

  1. 修改每个服务的 server.port
  2. 分别启动,避免端口冲突
  3. 使用 systemdnohup 管理进程
  4. 合理分配系统资源(CPU、内存)
  5. (可选)使用 Nginx 做反向X_X统一出口

如果你提供具体的部署环境(如阿里云ECS配置、Spring Boot版本、是否已有Nginx等),我可以给出更详细的部署脚本或配置。