在一台 ECS(弹性计算服务) 上部署两个 Spring Boot 服务是完全可行的,只要你的 ECS 实例资源配置足够支持运行这两个服务。以下是详细的步骤和注意事项:
✅ 一、前提条件
- 你有一台阿里云 ECS 实例(或其他厂商的服务器)
- 安装了 Java 环境(JDK8/11/17 等 Spring Boot 支持的版本)
- 可通过 SSH 登录到该服务器
- 每个 Spring Boot 项目已经打包为可执行的 jar 文件
🛠 二、部署方式
方法一:使用不同端口启动两个 Spring Boot 应用(推荐)
步骤如下:
-
上传两个 Spring Boot 的 jar 包
- 假设你的两个应用分别是:
app1.jar(默认端口 8080)app2.jar(默认端口 8081)
- 假设你的两个应用分别是:
-
修改配置文件或指定端口启动
你可以通过以下两种方式让两个服务监听不同的端口:
方式 A:修改
application.properties或application.yml# application.properties server.port=8081或者
# application.yml server: port: 8081方式 B:命令行参数指定端口启动(更灵活)
java -jar app1.jar --server.port=8080 java -jar app2.jar --server.port=8081 -
后台运行 Spring Boot 应用
使用
nohup或screen让应用在后台运行:nohup java -jar app1.jar --server.port=8080 > app1.log 2>&1 & nohup java -jar app2.jar --server.port=8081 > app2.log 2>&1 & -
检查是否启动成功
查看日志文件或使用
ps和netstat命令确认:ps aux | grep java netstat -tuln | grep 8080 netstat -tuln | grep 8081 -
开放安全组端口
在阿里云控制台中,确保你的 ECS 实例的安全组规则允许访问
8080和8081端口。
🔄 三、其他高级方法(可选)
方法二:使用 Nginx 反向X_X(适合统一入口)
如果你希望通过域名访问两个服务,可以使用 Nginx 做反向X_X,比如:
# /etc/nginx/conf.d/app.conf
server {
listen 80;
server_name app1.example.com;
location / {
proxy_pass http://localhost:8080;
}
}
server {
listen 80;
server_name app2.example.com;
location / {
proxy_pass http://localhost:8081;
}
}
然后重启 Nginx:
systemctl restart nginx
方法三:使用 systemd 管理服务(生产环境推荐)
创建两个 systemd 单元文件来管理你的 Spring Boot 应用:
示例:/etc/systemd/system/app1.service
[Unit]
Description=App1 Spring Boot Application
After=syslog.target
[Service]
User=youruser
ExecStart=/usr/bin/java -jar /path/to/app1.jar --server.port=8080
SuccessExitStatus=143
[Install]
WantedBy=multi-user.target
类似地创建 app2.service 监听 8081。
然后启用并启动服务:
systemctl daemon-reload
systemctl enable app1
systemctl start app1
🔒 四、注意事项
| 注意事项 | 说明 |
|---|---|
| 内存限制 | 两个 Spring Boot 应用可能占用较多内存,注意 JVM 参数设置(如 -Xms, -Xmx) |
| 日志管理 | 建议分别输出日志文件,便于排查问题 |
| 端口冲突 | 确保两个服务监听不同的端口 |
| 性能监控 | 使用 top、htop、jstat 等工具监控系统资源 |
| 防火墙 | 安全组要放行对应端口 |
✅ 五、总结
你可以在同一台 ECS 上部署多个 Spring Boot 应用,关键点在于:
- 给每个应用分配不同的端口
- 合理管理内存和资源
- 使用合适的后台运行机制(如 nohup、systemd)
- 如需对外提供服务,配置好反向X_X和域名映射
如果你有具体的 Spring Boot 项目结构、部署脚本或想使用 Docker 来部署,也可以告诉我,我可以进一步帮你定制方案。
ECLOUD博客