是的,可以在一台 ECS(Elastic Compute Service,阿里云的云服务器)上部署两个(甚至多个)Spring Boot 服务,这是非常常见且可行的做法。以下是实现方式和注意事项:
✅ 一、实现方式
方法1:使用不同端口运行(推荐)
每个 Spring Boot 服务默认使用 8080 端口,为了避免端口冲突,可以为每个服务配置不同的端口。
步骤:
-
修改
application.yml或application.properties文件:-
服务 A:
server: port: 8080 -
服务 B:
server: port: 8081
-
-
分别打包成 JAR 文件:
# 在各自项目根目录执行 mvn clean package -
上传到 ECS 服务器并运行:
# 启动服务 A nohup java -jar service-a.jar > a.log 2>&1 & # 启动服务 B nohup java -jar service-b.jar > b.log 2>&1 & -
验证服务是否正常:
curl http://localhost:8080/health curl http://localhost:8081/health
方法2:使用 Docker 容器化部署(更推荐)
通过 Docker 隔离两个服务,避免端口、依赖、环境冲突。
步骤:
-
为每个服务编写
Dockerfile:FROM openjdk:17-jre COPY target/app.jar app.jar EXPOSE 8080 CMD ["java", "-jar", "app.jar"] -
构建镜像并运行容器:
docker build -t service-a . docker run -d -p 8080:8080 --name service-a service-a docker build -t service-b . docker run -d -p 8081:8080 --name service-b service-b -
使用
docker-compose管理更方便(可选)。
方法3:使用 Nginx 反向(生产推荐)
如果你希望通过域名或路径访问不同服务,可以用 Nginx 做反向。
例如:
api.example.com/user→ 转发到服务 A(8080)api.example.com/order→ 转发到服务 B(8081)
配置示例:
server {
listen 80;
server_name api.example.com;
location /user/ {
proxy_pass http://localhost:8080/;
}
location /order/ {
proxy_pass http://localhost:8081/;
}
}
✅ 二、注意事项
| 项目 | 说明 |
|---|---|
| 端口冲突 | 必须确保每个服务使用不同端口 |
| 资源占用 | 检查 ECS 的 CPU、内存是否足够(如 2C4G 可以跑 2 个轻量服务) |
| 日志管理 | 分别输出日志文件,便于排查问题 |
| 启动管理 | 可使用 systemd 或 supervisor 管理进程 |
| JVM 参数 | 根据内存合理设置 -Xmx,避免 OOM |
| 安全性 | 关闭不必要的端口,配置安全组 |
✅ 三、进程管理建议(使用 systemd)
创建服务文件 /etc/systemd/system/service-a.service:
[Unit]
Description=Spring Boot Service A
After=network.target
[Service]
User=root
ExecStart=/usr/bin/java -Xmx1g -jar /opt/service-a.jar
SuccessExitStatus=143
Restart=always
[Install]
WantedBy=multi-user.target
然后启用:
systemctl enable service-a
systemctl start service-a
✅ 总结
| 方式 | 适用场景 | 推荐度 |
|---|---|---|
| 不同端口直接运行 | 简单项目、测试环境 | ⭐⭐⭐ |
| Docker 部署 | 中大型项目、生产环境 | ⭐⭐⭐⭐⭐ |
| Nginx + 多服务 | 需要统一入口、API 网关 | ⭐⭐⭐⭐ |
✅ 结论:完全可以!
只要合理配置端口和资源,一台 ECS 部署多个 Spring Boot 服务是标准做法。推荐使用 Docker + Nginx 的组合,便于维护和扩展。
如需,我可以提供完整的部署脚本或 docker-compose.yml 示例。
云计算HECS