如何在阿里云服务器上部署多个Spring Boot应用
结论与核心观点
通过端口区分、Docker容器化或Nginx反向X_X,可以高效地在单台阿里云服务器上部署多个Spring Boot应用。 推荐使用Docker容器化方案,因其隔离性好、管理便捷。
部署方案
1. 端口区分部署(最基础)
- 原理:每个Spring Boot应用监听不同端口,通过
server.port配置区分。 - 步骤:
- 修改每个应用的
application.properties或application.yml:server.port=8081 # 应用1 server.port=8082 # 应用2 - 打包后分别启动:
nohup java -jar app1.jar & # 后台运行 nohup java -jar app2.jar &
- 修改每个应用的
- 优缺点:
- ✅ 简单直接,无需额外工具。
- ❌ 端口管理复杂,缺乏隔离性。
2. Docker容器化(推荐)
- 原理:每个Spring Boot应用运行在独立的Docker容器中,通过镜像隔离。
- 步骤:
- 安装Docker:
curl -fsSL https://get.docker.com | sh systemctl start docker - 为每个应用编写Dockerfile:
FROM openjdk:17 COPY target/app1.jar /app.jar EXPOSE 8080 ENTRYPOINT ["java", "-jar", "/app.jar"] - 构建镜像并运行容器:
docker build -t app1 . docker run -d -p 8081:8080 --name app1_container app1
- 安装Docker:
- 优点:
- ✅ 隔离性强,资源独立分配。
- ✅ 支持一键扩缩容(结合Docker Compose或K8s)。
3. Nginx反向X_X(域名/路径区分)
- 原理:通过Nginx将不同域名或路径转发到不同Spring Boot应用。
- 步骤:
- 安装Nginx:
yum install nginx # CentOS apt install nginx # Ubuntu - 配置
/etc/nginx/conf.d/multi-app.conf:server { listen 80; server_name app1.example.com; location / { proxy_pass http://localhost:8081; } } server { listen 80; server_name app2.example.com; location / { proxy_pass http://localhost:8082; } } - 重启Nginx:
systemctl restart nginx
- 安装Nginx:
- 适用场景:
- 需要通过域名访问不同应用。
- 隐藏后端端口,提升安全性。
方案对比
| 方案 | 隔离性 | 复杂度 | 适用场景 |
|---|---|---|---|
| 端口区分 | 低 | 简单 | 测试环境、少量应用 |
| Docker容器化 | 高 | 中等 | 生产环境、多应用隔离 |
| Nginx反向X_X | 中 | 中等 | 需域名访问的场景 |
最终建议
- 测试环境:直接使用端口区分。
- 生产环境:优先选择Docker,配合Nginx实现域名访问。
- 高并发场景:结合Kubernetes进一步扩展容器化管理。
CLOUD云枢