在 ECS(Elastic Compute Service,阿里云的云服务器)上启动多个 Spring Boot 项目,可以通过以下几种方式实现:
✅ 方法一:不同端口运行多个 Spring Boot 应用
步骤:
-
将每个 Spring Boot 项目打包为独立的 jar 包
mvn clean package -
修改配置文件
application.yml或application.properties中的 server.port- 例如:
- 项目 A 使用
server.port=8080 - 项目 B 使用
server.port=8081 - 项目 C 使用
server.port=8082
- 项目 A 使用
- 例如:
-
通过命令行分别启动
java -jar projectA.jar & java -jar projectB.jar & java -jar projectC.jar &注意:使用
&表示后台运行。你也可以使用nohup或者写成脚本。 -
查看运行状态
ps aux | grep java netstat -tuln | grep 808
✅ 方法二:使用 Nginx 做反向X_X(可选)
如果你希望通过域名访问不同的服务,可以使用 Nginx 反向X_X到不同的端口。
示例配置 (/etc/nginx/conf.d/multi-springboot.conf):
server {
listen 80;
location /projectA/ {
proxy_pass http://localhost:8080/;
}
location /projectB/ {
proxy_pass http://localhost:8081/;
}
}
注意:Spring Boot 需要设置
server.servlet.context-path来匹配路径。
✅ 方法三:使用 Docker 容器化部署(推荐)
Docker 是管理多个 Spring Boot 应用的最佳实践之一。
步骤:
-
为每个 Spring Boot 项目编写 Dockerfile
FROM openjdk:17-jdk-alpine COPY *.jar app.jar ENTRYPOINT ["java", "-jar", "app.jar"] -
构建镜像
docker build -t springboot-a . docker build -t springboot-b . -
运行容器并映射不同端口
docker run -d -p 8080:8080 --name a springboot-a docker run -d -p 8081:8081 --name b springboot-b -
(可选)使用 Docker Compose 管理多个容器:
version: '3' services: service-a: image: springboot-a ports: - "8080:8080" service-b: image: springboot-b ports: - "8081:8081"
✅ 方法四:使用 systemd 管理服务(适用于生产环境)
你可以为每个 Spring Boot 应用创建一个 systemd 服务单元文件。
示例:/etc/systemd/system/projectA.service
[Unit]
Description=Project A Spring Boot App
After=syslog.target
[Service]
User=root
ExecStart=/usr/bin/java -jar /root/projectA.jar
SuccessExitStatus=143
StandardOutput=file:/var/log/projectA.log
StandardError=file:/var/log/projectA.err
[Install]
WantedBy=multi-user.target
然后执行:
systemctl daemon-reload
systemctl enable projectA
systemctl start projectA
🧠 小贴士
| 方式 | 是否推荐 | 说明 |
|---|---|---|
| 多端口启动 | ✅ | 简单快速,适合测试环境 |
| Nginx 反代 | ✅✅ | 适合对外提供统一入口 |
| Docker | ✅✅✅ | 推荐用于生产,易于扩展和维护 |
| systemd | ✅✅ | 适合长期运行的服务 |
❓常见问题
Q1:如何防止端口冲突?
- 检查端口是否被占用:
lsof -i :8080 netstat -tulnp | grep 8080
Q2:如何开机自启?
- 使用
nohup+ 开机脚本/etc/rc.local,或使用systemd。
Q3:如何日志分离?
- 启动时重定向输出:
nohup java -jar projectA.jar > projectA.log 2>&1 &
如需我帮你生成某个具体项目的启动脚本或 Docker 配置,请告诉我你的项目数量、端口、目录结构等信息。
云计算导航