在阿里云ECS(Elastic Compute Service)上部署多个 Spring Boot 项目是完全可行的。以下是详细的部署方案和步骤,帮助你实现多 Spring Boot 应用共存于一台 ECS 实例。
✅ 一、部署思路
一台 ECS 实例可以运行多个 Spring Boot 应用,常见方式有:
-
每个应用独立运行(推荐)
- 每个 Spring Boot 打成独立的 JAR 包
- 使用不同端口启动
- 使用
systemd或supervisor管理进程 - 使用 Nginx 做反向(统一 80/443 端口)
-
使用 Docker 容器化部署(更推荐)
- 每个 Spring Boot 项目构建为 Docker 镜像
- 使用
docker-compose管理多个容器 - 端口隔离、环境隔离、易于维护
✅ 二、方式一:直接部署 JAR(无 Docker)
1. 准备工作
- ECS 已安装 JDK(建议 OpenJDK 8/11/17)
- 上传多个 Spring Boot 的 JAR 文件(如
app1.jar,app2.jar)
2. 配置不同端口
确保每个 Spring Boot 应用使用不同端口,例如:
app1.jar:server.port=8081app2.jar:server.port=8082
可以在启动时通过命令行指定:
java -jar app1.jar --server.port=8081
java -jar app2.jar --server.port=8082
3. 使用 systemd 管理服务(推荐)
创建 systemd 服务文件,实现开机自启、自动重启。
示例:创建 app1.service
sudo vim /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=8081
Restart=always
[Install]
WantedBy=multi-user.target
同理创建 app2.service,端口改为 8082。
启动服务:
sudo systemctl daemon-reexec
sudo systemctl enable app1.service
sudo systemctl start app1.service
sudo systemctl status app1.service
4. 使用 Nginx 反向(可选)
安装 Nginx:
sudo yum install nginx -y # CentOS
sudo systemctl start nginx
配置 Nginx 转发请求:
server {
listen 80;
server_name app1.yourdomain.com;
location / {
proxy_pass http://127.0.0.1:8081;
proxy_set_header Host $host;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
}
}
server {
listen 80;
server_name app2.yourdomain.com;
location / {
proxy_pass http://127.0.0.1:8082;
proxy_set_header Host $host;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
}
}
然后重启 Nginx:
sudo nginx -t
sudo systemctl reload nginx
✅ 三、方式二:使用 Docker 部署(更推荐)
1. 安装 Docker
curl -fsSL https://get.docker.com | bash -s docker --mirror Aliyun
sudo systemctl start docker
sudo systemctl enable docker
2. 为每个 Spring Boot 项目编写 Dockerfile
# Dockerfile
FROM openjdk:11-jre-slim
COPY app1.jar /app.jar
EXPOSE 8081
ENTRYPOINT ["java", "-jar", "/app.jar"]
构建镜像:
docker build -t springboot-app1 .
3. 使用 docker-compose.yml 统一管理
# docker-compose.yml
version: '3.8'
services:
app1:
image: springboot-app1
ports:
- "8081:8081"
restart: unless-stopped
app2:
image: springboot-app2
ports:
- "8082:8082"
restart: unless-stopped
nginx:
image: nginx:alpine
ports:
- "80:80"
volumes:
- ./nginx.conf:/etc/nginx/nginx.conf
depends_on:
- app1
- app2
restart: unless-stopped
配合 Nginx 配置做反向。
✅ 四、注意事项
| 项目 | 建议 |
|---|---|
| 端口冲突 | 每个应用使用不同端口 |
| 内存分配 | 根据 ECS 配置合理分配 -Xmx 参数 |
| 日志管理 | 将日志输出到文件 /var/log/app1.log |
| 监控 | 使用 top、jstat、Prometheus + Grafana |
| 安全 | 开启安全组端口,只暴露 80/443,关闭不必要的端口 |
✅ 五、总结
| 方式 | 优点 | 缺点 |
|---|---|---|
| 直接运行 JAR | 简单,适合小项目 | 环境依赖、管理麻烦 |
| Docker 部署 | 隔离性好,易维护,适合多项目 | 学习成本略高 |
👉 推荐使用 Docker + Nginx 方式部署多个 Spring Boot 项目,便于扩展和维护。
如果你提供具体项目数量、端口、域名需求,我可以帮你生成完整的 docker-compose.yml 或 Nginx 配置模板。欢迎继续提问!
ECLOUD博客