是的,可以在一台ECS(云服务器)上部署两个(甚至多个)Spring Boot服务,这是非常常见且可行的部署方式。以下是实现方法和注意事项:
✅ 实现方式
1. 确保端口不冲突
每个 Spring Boot 服务默认使用 8080 端口,因此需要修改其中一个或两个服务的端口。
修改方式:
在 application.yml 或 application.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 &
使用
&可以后台运行,但建议使用nohup或systemd管理进程。
方式二:使用 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,避免内存溢出 |
| 日志管理 | 分开日志文件,便于排查问题 |
| 进程管理 | 使用 systemd 或 supervisor 管理服务生命周期 |
| 安全性 | 避免使用 root 用户运行服务,创建专用用户 |
✅ 总结
✅ 完全可以在一台 ECS 上部署多个 Spring Boot 服务,只需:
- 修改每个服务的
server.port - 分别启动,避免端口冲突
- 使用
systemd或nohup管理进程 - 合理分配系统资源(CPU、内存)
- (可选)使用 Nginx 做反向X_X统一出口
如果你提供具体的部署环境(如阿里云ECS配置、Spring Boot版本、是否已有Nginx等),我可以给出更详细的部署脚本或配置。
CLOUD云