打包部署微服务项目

系统管理员 2022-10-06 01:59 363阅读 0赞

随着 Spring Boot、Spring Cloud 的流行,越来越多的公司和企业开始使用微服务分布式架构,大家也都在学习相关知识;在自己做项目的时候,面对庞大的项目文件和繁杂的逻辑关系,有些同学就不知如何部署自己的项目了,下面我将介绍通用型的微服务项目部署方式。

一、项目分析

在打包部署之前我们先来简单的分析一下项目结构,这里我拿出最近部署的一个项目作为例子,该项目使用的阿里的 Nacos 服务,没有使用 Eureka 服务注册中心,所以少了一个模块。

20210610202706334.png_pic_center
这个项目文件里包含了前端和后端的代码,还有一些文本文件;这里我们不关心与后端无关的,先列举出后端模块(图中可以看出文件夹右下角带有蓝色正方形的就是后端模块):

  • business:业务模块,提供主要的业务逻辑接口
  • file:文件模块,提供文件的上传下载接口
  • gateway:网关模块,请求的必经之路,负责拦截请求
  • generator:代码生成模块,负责生成重复性代码
  • server:一些实体类、工具类、枚举类等
  • system:系统模块,提供用户相关的接口

这些模块中只有部分需要打包,最简单的判别方法就是,有 主启动类 的模块需要打包,其余的不需要打包。

watermark_type_ZmFuZ3poZW5naGVpdGk_shadow_10_text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L3dlaXhpbl80Mzk0MTM2NA_size_16_color_FFFFFF_t_70_pic_center
如上图所示,business 模块就需要打包,同样有启动类的模块还有:filegatewaysystem

所指本项目只有这四个模块需要打包。

二、打包项目

打包项目肯定是使用最流行的 maven 了,不过在执行 install 之前需要先修改配置文件,确保和下面的一样:

2.1、父 pom 文件

  1. <?xml version="1.0" encoding="UTF-8"?>
  2. <project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 https://maven.apache.org/xsd/maven-4.0.0.xsd">
  3. <modelVersion>4.0.0</modelVersion>
  4. <groupId>com.lsu</groupId>
  5. <artifactId>online-course</artifactId>
  6. <packaging>pom</packaging>
  7. <version>1.0.0</version>
  8. <modules>
  9. <module>system</module>
  10. <module>gateway</module>
  11. <module>server</module>
  12. <module>business</module>
  13. <module>generator</module>
  14. <module>file</module>
  15. </modules>
  16. <name>online-course</name>
  17. <description>在线视频课程系统</description>
  18. <properties>
  19. <java.version>1.8</java.version>
  20. <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
  21. <project.reporting.outputEncoding>UTF-8</project.reporting.outputEncoding>
  22. ···
  23. </properties>
  24. <dependencyManagement>
  25. <dependencies>
  26. ···
  27. </dependencies>
  28. </dependencyManagement>
  29. <build>
  30. <plugins>
  31. <plugin>
  32. ···
  33. </plugin>
  34. <plugin>
  35. <groupId>org.apache.maven.plugins</groupId>
  36. <artifactId>maven-compiler-plugin</artifactId>
  37. <version>3.1</version>
  38. <configuration>
  39. <source>${java.version}</source>
  40. <target>${java.version}</target>
  41. </configuration>
  42. </plugin>
  43. <plugin>
  44. <groupId>org.apache.maven.plugins</groupId>
  45. <artifactId>maven-surefire-plugin</artifactId>
  46. <version>2.19.1</version>
  47. <configuration>
  48. <!-- 默认关掉单元测试,不用手动关闭了 -->
  49. <skipTests>true</skipTests>
  50. </configuration>
  51. </plugin>
  52. </plugins>
  53. </build>
  54. </project>
  • pom 中一定要指定 maven-compiler-pluginmaven-surefire-plugin 插件。
  • <packaging>pom</packaging> 打包类型写 pom 包。

2.2、子 pom 文件

这里以 business 模块的 pom 文件为例,其余的模块也类似。

  1. <?xml version="1.0" encoding="UTF-8"?>
  2. <project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
  3. <parent>
  4. <artifactId>online-course</artifactId>
  5. <groupId>com.lsu</groupId>
  6. <version>1.0.0</version>
  7. </parent>
  8. <modelVersion>4.0.0</modelVersion>
  9. <packaging>jar</packaging>
  10. <artifactId>business</artifactId>
  11. <dependencies>
  12. ···
  13. </dependencies>
  14. <build>
  15. <plugins>
  16. <plugin>
  17. <groupId>org.springframework.boot</groupId>
  18. <artifactId>spring-boot-maven-plugin</artifactId>
  19. <configuration>
  20. <!-- 指定该 Main Class 为全局的唯一入口 -->
  21. <mainClass>com.lsu.business.BusinessMainApplication</mainClass>
  22. <layout>ZIP</layout>
  23. </configuration>
  24. <executions>
  25. <execution>
  26. <goals>
  27. <!-- 将依赖到的包都放进去 -->
  28. <goal>repackage</goal>
  29. </goals>
  30. </execution>
  31. </executions>
  32. </plugin>
  33. </plugins>
  34. </build>
  35. </project>

注意:

  • 子 pom 文件中一定要指定 spring-boot-maven-plugin 插件和主启动类的 全类名
  • <packaging>jar</packaging> 打包类型写 Jar 包。

其中 <goal>repackage</goal>,我写到了他会将依赖到的包都打进去,具体如下图:
watermark_type_ZmFuZ3poZW5naGVpdGk_shadow_10_text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L3dlaXhpbl80Mzk0MTM2NA_size_16_color_FFFFFF_t_70
他会将依赖到的包都放到 BOOT-INF 文件夹下面的 lib 中:

  • 优点是后续不用担心依赖找不到的问题,高可移植性;
  • 缺点是会导致 jar 包体积很大,例图中的包有 60M 大小,如果不将依赖放进去以 KB 为单位。

2.3、执行打包

然后我们通过 IDEA 自带的 maven 插件打包就行了,或者键入 “ mvn package ” 命令。

watermark_type_ZmFuZ3poZW5naGVpdGk_shadow_10_text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L3dlaXhpbl80Mzk0MTM2NA_size_16_color_FFFFFF_t_70_pic_center 1
注意这里只需要点击父工程的 package 命令,不需要管其他的子工程,因为打包父工程会自动打包所有的子模块,我们之前设定了父工程的打包方式为 pom

打包完成以后的 jar 包会出现在模块各自的 target 目录下。

watermark_type_ZmFuZ3poZW5naGVpdGk_shadow_10_text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L3dlaXhpbl80Mzk0MTM2NA_size_16_color_FFFFFF_t_70_pic_center 2
进入到该目录下,输入命令 java -jar business-1.0.0.jar 即可启动项目。

三、部署项目

打包好了以后就可以部署了,我这里是部署到了 windows server 2012 系统上面了,该系统已经有 java 的环境,所以直接远程连接,将 jar 文件复制过去,然后使用 java 命令启动即可。Linux 系统也是一样的,可以使用 XShell 工具先将文件传到服务器上面,再启动。

由于该项目为前后端分离项目,下面介绍一下前端部分的打包部署步骤。

watermark_type_ZmFuZ3poZW5naGVpdGk_shadow_10_text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L3dlaXhpbl80Mzk0MTM2NA_size_16_color_FFFFFF_t_70_pic_center 3
前端我使用了多环境配置,这里一直用的是 .env.dev 文件,看一下文件内容。

  1. NODE_ENV=development
  2. VUE_APP_SERVER=http://10.10.3.*:9100

这里的 ip 地址要填写部署的服务器地址,端口为网关模块的地址。

package.json 文件中定义脚本文件,末尾加上参数 --mode dev,代表以 dev 模式启动:

watermark_type_ZmFuZ3poZW5naGVpdGk_shadow_10_text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L3dlaXhpbl80Mzk0MTM2NA_size_16_color_FFFFFF_t_70_pic_center 4
watermark_type_ZmFuZ3poZW5naGVpdGk_shadow_10_text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L3dlaXhpbl80Mzk0MTM2NA_size_16_color_FFFFFF_t_70_pic_center 5
使用命令执行以后,就会打包前端项目,在根目录下生成 dist 目录,我们要做的就是拿走 dist 目录,放到服务器上面。

然后怎么执行呢,这里有多种方式,最方便的是使用 nginx 启动,最简单的使用 http-server 启动,这里就以后者为例。

  1. // 如果没有 cnpm 就使用 npm 安装
  2. 1cnpm install http-server -g
  3. 2、进入到 dist 目录,然后执行 http-server 即可

窗口中会打印出访问地址,复制到浏览器中即可访问页面,届时前后端项目都已经完成部署。

发表评论

表情:
评论列表 (有 0 条评论,363人围观)

还没有评论,来说两句吧...

相关阅读

    相关 服务Docker打包

    > 现在的微服务时代,你的代码没个微服务、分布式人家都会觉得低端,当然!对于我们开发人员来说,掌握这些技术意味着涨薪。 我们项目中用到了多个微服务,我们上一节课程打包用的是手

    相关 打包部署服务项目

    随着 Spring Boot、Spring Cloud 的流行,越来越多的公司和企业开始使用微服务分布式架构,大家也都在学习相关知识;在自己做项目的时候,面对庞大的项目文件和繁

    相关 Docker打包服务

    关于Docker,知其然还要知其所以然,这里安利一篇很不错的文章。        [10张图带你深入理解Docker容器和镜像][10_Docker] 阅读完以上文章,

    相关 Java服务项目部署

    项目部署 步骤一 安装Linux系统(如果是购买的服务器就不用安装系统) 步骤二 修改文件源(修改加速器) 步骤三 安装docker-compose和do