在阿里云 ECS(Elastic Compute Service)上部署多个 Spring Boot 项目是完全可行的。以下是详细的部署方案和建议,帮助你高效、安全地管理多个 Spring Boot 应用。
✅ 一、部署方式选择
方式1:单台 ECS 部署多个 Spring Boot 项目(常见)
- 适用场景:资源有限、项目较少、测试/开发环境。
- 原理:每个 Spring Boot 应用作为一个独立的 JAR 包运行,监听不同端口。
- 优点:成本低、部署简单。
- 缺点:资源竞争、维护复杂、故障隔离差。
方式2:多台 ECS 分布部署(推荐生产环境)
- 每个应用部署在独立的 ECS 实例上。
- 更高可用性、更好的隔离性和扩展性。
✅ 二、单台 ECS 部署多个 Spring Boot 项目的步骤
1. 准备工作
- 购买一台 ECS 实例(如 CentOS / Ubuntu)
- 安装 Java 环境:
java -version # 确保 JDK 8 或以上
2. 上传 Spring Boot JAR 包
将多个打包好的 xxx.jar 文件上传到 ECS(例如使用 scp、sftp 或宝塔面板):
scp app1.jar root@your-ecs-ip:/opt/app1/
scp app2.jar root@your-ecs-ip:/opt/app2/
3. 启动多个 Spring Boot 项目(不同端口)
示例:app1 启动在 8080,app2 在 8081
# 启动第一个应用
nohup java -jar app1.jar --server.port=8080 > app1.log 2>&1 &
# 启动第二个应用
nohup java -jar app2.jar --server.port=8081 > app2.log 2>&1 &
⚠️ 注意:确保端口不冲突,并在阿里云控制台开放对应的安全组端口。
4. 使用 systemd 管理服务(推荐)
为每个 Spring Boot 应用创建一个系统服务,实现开机自启、日志管理、状态监控。
示例:创建 /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=8080
Restart=always
StandardOutput=journal
StandardError=journal
[Install]
WantedBy=multi-user.target
保存后启用服务:
systemctl daemon-reload
systemctl start app1
systemctl enable app1
同样为 app2 创建 app2.service,使用不同路径和端口。
5. 使用 Nginx 反向X_X(推荐)
如果你希望统一通过 80/443 访问多个应用,可以用 Nginx 做反向X_X。
示例 Nginx 配置:
server {
listen 80;
server_name app1.yourdomain.com;
location / {
proxy_pass http://127.0.0.1:8080;
proxy_set_header Host $host;
proxy_set_header X-Real-IP $remote_addr;
}
}
server {
listen 80;
server_name app2.yourdomain.com;
location / {
proxy_pass http://127.0.0.1:8081;
proxy_set_header Host $host;
proxy_set_header X-Real-IP $remote_addr;
}
}
配合域名解析,即可通过不同域名访问不同 Spring Boot 项目。
✅ 三、优化建议
| 优化项 | 建议 |
|---|---|
| JVM 参数 | 启动时设置内存限制:-Xms512m -Xmx1g |
| 日志管理 | 使用 logback-spring.xml 控制日志输出,避免磁盘占满 |
| 监控 | 使用 spring-boot-actuator + Prometheus + Grafana 监控 |
| 健康检查 | /actuator/health 接口可用于负载均衡健康检测 |
| 自动部署 | 结合 Jenkins / GitHub Actions 实现 CI/CD |
✅ 四、进阶方案(推荐生产环境)
| 方案 | 说明 |
|---|---|
| Docker + Docker Compose | 每个 Spring Boot 打成镜像,用容器隔离,端口映射清晰 |
| Kubernetes (ACK) | 大规模微服务部署,自动扩缩容、服务发现 |
| 阿里云 Serverless(如函数计算 FC) | 适合轻量级 API,按需运行 |
✅ 五、常见问题
Q1:端口被占用怎么办?
netstat -tulnp | grep :8080
kill -9 <PID>
Q2:如何查看日志?
tail -f app1.log
journalctl -u app1.service -f
Q3:如何防止 OOM?
启动时限制内存:
java -Xms512m -Xmx1g -jar app.jar
✅ 总结
✅ 单台 ECS 部署多个 Spring Boot 项目是可行的,关键在于:
- 每个项目使用不同端口
- 使用
systemd或nohup稳定运行 - 配合 Nginx 实现域名路由
- 做好日志、监控、资源隔离
🔧 生产环境建议使用 Docker + Nginx + ECS 或直接上 K8s。
如果你提供具体的项目数量、访问量、是否需要 HTTPS、是否有域名等信息,我可以给出更定制化的部署方案。
PHPWP博客