将微服务部署到云服务器是微服务架构中的常见操作,以下是三种常见的部署方式:使用 Spring Boot 内嵌 Tomcat、Docker 容器化、和 外部 Tomcat 部署。
1. 使用 Spring Boot 内嵌 Tomcat 部署
这是 Spring Boot 微服务最常用、也是最简单的部署方式。Spring Boot 项目内置了 Tomcat 容器,打包后的应用可以直接运行,无需依赖外部的应用服务器。
1.1 步骤
1.1.1 打包为 JAR 文件
使用 maven
或 gradle
打包 Spring Boot 项目,生成一个 .jar
文件。
mvn clean package
1.1.2 上传 JAR 文件到云服务器
将打包后的 .jar
文件上传到云服务器的指定目录,通常使用 scp
或通过云服务器提供的文件上传工具。
1.1.3 配置环境
- 确保云服务器上安装了合适的 Java 环境(如 JDK 11 或更高版本)。
- 通过命令检查 Java 是否已经安装:
java -version
1.1.4 运行 Spring Boot 应用
在云服务器上,进入到 JAR 文件所在的目录,使用以下命令运行 Spring Boot 应用:
java -jar myapp.jar
应用启动后,Spring Boot 内嵌的 Tomcat 容器将自动启动并监听配置文件中指定的端口(默认 8080)。
1.1.5 后台运行和监控
如果希望应用在后台运行,可以使用 nohup
命令:
nohup java -jar myapp.jar > log.txt 2>&1 &
1.2 适用场景
- 简单部署:适用于需要快速将微服务部署到服务器并运行的场景,特别是开发环境和小规模微服务。
- 独立服务:每个微服务可以独立运行,服务之间相互隔离。
- 易维护:Spring Boot 内嵌 Tomcat 自动管理 Web 容器的启动和停止,简化了运维操作。
2. 使用 Docker 容器部署
使用 Docker 是现代微服务架构中非常流行的部署方式,特别适合需要快速扩展和跨平台运行的场景。将 Spring Boot 应用容器化,可以保证一致的运行环境,便于快速部署和管理。
2.1 步骤
2.1.1 编写 Dockerfile
在 Spring Boot 项目根目录下创建一个 Dockerfile
,定义应用如何容器化。
# 基于官方的 OpenJDK 镜像
FROM openjdk:11-jre-slim
# 将 jar 文件复制到容器中
COPY target/myapp.jar /app.jar
# 暴露应用的端口
EXPOSE 8080
# 运行 jar 文件
ENTRYPOINT ["java", "-jar", "/app.jar"]
2.1.2 构建 Docker 镜像
使用 docker build
命令构建 Docker 镜像:
docker build -t myapp .
2.1.3 上传 Docker 镜像到云服务器
可以直接将镜像文件复制到云服务器。
2.1.4 在云服务器上运行容器
在云服务器上运行 Docker 容器:
docker run -d -p 8080:8080 myapp
此命令将容器中的 8080 端口映射到主机的 8080 端口,并在后台运行容器。
2.1.5 容器管理
可以使用 docker ps 查看正在运行的容器,使用 docker logs 查看日志。
docker ps
docker logs <container_id>
2.2 适用场景
- 跨平台部署:Docker 容器可以在任意支持 Docker 的平台上运行,保证了环境一致性。
- 弹性扩展:适合微服务集群,通过容器编排工具(如 Kubernetes 或 Docker Swarm)可以快速扩展微服务。
- 自动化运维:通过 CI/CD 管道将 Docker 镜像集成到持续交付中,自动化部署过程。
3. 使用外部 Tomcat 部署
将 Spring Boot 项目打包成 WAR 文件,部署到外部的 Tomcat 容器中。这是较为传统的部署方式,适合一些需要统一管理多个 Web 应用的场景。
3.1 步骤
3.1.1 修改 Spring Boot 项目支持 WAR 打包
在 pom.xml
文件中修改打包类型为 war
:
<packaging>war</packaging>
确保 spring-boot-starter-tomcat
依赖设置为 provided
,以便让外部 Tomcat 管理 Web 容器:
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-tomcat</artifactId>
<scope>provided</scope>
</dependency>
3.1.2 打包成 WAR 文件
运行 mvn clean package
,将 Spring Boot 项目打包成 WAR 文件:
mvn clean package
3.1.3 上传 WAR 文件到云服务器
将 myapp.war
文件上传到云服务器的 Tomcat 安装目录 webapps
文件夹中。
3.1.4 启动 Tomcat
在云服务器上启动 Tomcat,Tomcat 会自动解压 myapp
.war
文件并部署应用:
3.1.5 访问应用
Tomcat 启动后,可以通过浏览器访问应用(如 http://cloudserver:8080/myapp)
3.2 适用场景
- 传统架构:适合已经有外部 Tomcat 服务器并希望统一管理多个应用的场景。
- 多应用管理:如果你的服务器上运行多个 WAR 应用,使用外部 Tomcat 可以统一管理这些应用,便于配置和运维。
4. 三种方法对比
5. 总结
- 对于 微服务架构,推荐使用 内嵌 Tomcat 部署 或 Docker 容器化部署。
- Docker 容器化 更适合大规模应用和集群部署,特别是在云原生环境中(如 Kubernetes)。
- 外部 Tomcat 部署 适合传统的 Web 应用和需要统一管理多个应用的环境。