如何在Azure部署多模块SpringBoot Maven项目
同一Azure服务器部署多端口多模块SpringBoot项目的方案
方案一:Azure虚拟机(VM)手动部署
完全掌控服务器环境,适合需要自定义配置的场景:
- 打包项目:在本地Maven项目根目录执行
mvn clean package -DskipTests,Customer、Shop模块会在各自的target目录生成可执行JAR包。 - 配置Azure VM:创建Ubuntu/CentOS系统的VM,在Azure网络安全组(NSG)中添加入站规则,放行Customer、Shop需要的端口(如8080、8081)。
- 上传JAR包:用SCP或Azure CLI将两个JAR包传到VM指定目录,示例命令:
scp target/customer-0.0.1-SNAPSHOT.jar azureuser@<vm公网IP>:/home/azureuser/apps/ - 托管应用进程:
- 临时启动:用
nohup让应用后台运行,示例:nohup java -jar /home/azureuser/apps/customer-0.0.1-SNAPSHOT.jar --server.port=8080 & nohup java -jar /home/azureuser/apps/shop-0.0.1-SNAPSHOT.jar --server.port=8081 & - 持久化运行:用
systemd创建服务实现开机自启,示例Customer服务配置文件/etc/systemd/system/customer.service:
执行以下命令生效:[Unit] Description=Customer SpringBoot Application After=network.target [Service] User=azureuser ExecStart=/usr/bin/java -jar /home/azureuser/apps/customer-0.0.1-SNAPSHOT.jar --server.port=8080 Restart=always [Install] WantedBy=multi-user.target
同理配置Shop的systemctl daemon-reload && systemctl enable --now customer.servicesystemd服务。
- 临时启动:用
方案二:Azure App Service 容器化部署
将两个应用打包为Docker镜像,通过多容器方式部署到同一App Service:
- 编写Dockerfile:为Customer、Shop分别编写Dockerfile,示例Customer的Dockerfile:
Shop的Dockerfile仅需修改端口为8081。FROM openjdk:17-jdk-slim WORKDIR /app COPY target/customer-0.0.1-SNAPSHOT.jar app.jar EXPOSE 8080 CMD ["java", "-jar", "app.jar", "--server.port=8080"] - 推送镜像到Azure容器注册表(ACR):
- 创建ACR实例后,构建并推送镜像:
重复上述命令完成Shop镜像的推送。docker build -t myacr.azurecr.io/customer-app:v1 . docker login myacr.azurecr.io docker push myacr.azurecr.io/customer-app:v1
- 创建ACR实例后,构建并推送镜像:
- 配置多容器App Service:
在Azure门户创建App Service,选择「Docker容器」类型,切换到「多容器」模式,用Docker Compose配置:
填写ACR访问凭据后完成部署,最后在App Service的「配置」中添加入站端口规则放行8080、8081。version: '3.8' services: customer: image: myacr.azurecr.io/customer-app:v1 ports: - "8080:8080" shop: image: myacr.azurecr.io/shop-app:v1 ports: - "8081:8081"
方案三:Azure Spring Apps 托管部署
针对Spring生态优化的托管服务,简化SpringBoot应用的部署与运维:
- 打包项目:执行
mvn clean package -DskipTests生成两个应用的JAR包。 - 创建Azure Spring Apps实例:在Azure门户创建实例,选择支持多应用部署的服务层级。
- 部署应用:用Azure CLI命令分别部署两个应用:
可通过实例公网IP加对应端口访问应用,也可配置自定义域名实现路径转发。az spring app deploy --name customer-app --artifact-path target/customer-0.0.1-SNAPSHOT.jar --env server.port=8080 az spring app deploy --name shop-app --artifact-path target/shop-0.0.1-SNAPSHOT.jar --env server.port=8081
关键注意事项
- 依赖处理:Library模块已被Customer、Shop模块打包到各自的JAR中,部署时无需单独处理Library。
- 端口放行:所有方案都需确保Azure网络安全组或App Service网络配置放行目标端口,否则外部无法访问。
- 监控运维:可配置Azure Application Insights、Log Analytics工具,实现应用状态监控与日志排查。
内容的提问来源于stack exchange,提问作者Ahmed Ajmine Nehal
相关产品推荐
相关产品推荐

