SpringBoot项目打包部署到阿里云服务器、通过Maven插件制作Docker镜像、部署项目容器、配置生产环境

简介: SpringBoot项目打包部署到阿里云服务器、通过Maven插件制作Docker镜像、部署项目容器、配置生产环境

制作通用模块jar包


通用模块不是运行的,而且要被其他模块引入的,所以该模块不能采用springboot打包方式制作jar包,否则其他模块无法引入通用模块。


1、修改通用模块,设置模块为非Springboot项目

<?xml version="1.0" encoding="UTF-8"?>
<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/maven4.0.0.xsd">
    <modelVersion>4.0.0</modelVersion>
<!--   <parent>-->
<!--       <artifactId>shopping</artifactId>-->
<!--       <groupId>com.itbaizhan</groupId>-->
<!--       <version>1.0-SNAPSHOT</version>-->
<!--   </parent>-->
    <groupId>com.itbaizhan</groupId>
    <artifactId>shopping_common</artifactId>
    <version>0.0.1-SNAPSHOT</version>
    <name>shopping_common</name>
    <description>Demo project for Spring Boot</description>
    <properties>
        <java.version>11</java.version>
        <project.build.sourceEncoding>UTF8</project.build.sourceEncoding>
        <project.reporting.outputEncoding>UTF8</project.reporting.outputEncoding>
    </properties>
    <dependencies>
<!--       <dependency>-->
<!--           
<groupId>org.springframework.boot</groupId>-->
<!--           <artifactId>spring-boot-starter</artifactId>-->
<!--       </dependency>-->
        <!-- web -->
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-bootstarter-web</artifactId>
            <version>2.7.0</version>
        </dependency>
        <!-- lombok -->
        <dependency>
            <groupId>org.projectlombok</groupId>
            <artifactId>lombok</artifactId>
            <version>1.18.24</version>
        </dependency>
        <!-- MybatisPlus -->
        <dependency>
            <groupId>com.baomidou</groupId>
            <artifactId>mybatis-plus-bootstarter</artifactId>
            <version>3.5.0</version>
        </dependency>
<!--       <dependency>-->
<!--           
<groupId>org.springframework.boot</groupId
>-->
<!--           <artifactId>spring-bootstarter-test</artifactId>-->
<!--           <scope>test</scope>-->
<!--       </dependency>-->
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-bootstarter-data-elasticsearch</artifactId>
            <version>2.7.0</version>
        </dependency>
        <!-- JWT -->
        <dependency>
            <groupId>com.auth0</groupId>
            <artifactId>javajwt</artifactId>
            <version>3.4.0</version>
        </dependency>
    </dependencies>
    <build>
<plugins>
            <!-- 公共模块不要以springboot方式打包 -->
<!--           <plugin>-->
<!--               
<groupId>org.springframework.boot</groupId
>-->
<!--               <artifactId>springboot-maven-plugin</artifactId>-->
<!--               <configuration>-->
<!--                   <excludes>-->
<!--                       <exclude>-->
<!--                           <groupId>org.projectlombok</groupId>-->
<!--                           <artifactId>lombok</artifactId>-->
<!--                       </exclude>-->
<!--                   </excludes>-->
<!--               </configuration>-->
<!--           </plugin>-->
        </plugins>
    </build>
</project>


2、修改shopping父工程的pom文件,通用模块不是父工程的子模块

<!-- 子模块 -->
<modules>
    <!-- 通用模块,包含实体类、服务接口、工具类等-->
    <!--       <module>shopping_common</module>-->
    <!-- 商品服务 -->
  <module>shopping_goods_service</module>
</modules>


3、使用Maven工具发布通用模块


运行成功后,生成以下文件


在父工程添加制作Docker镜像的Maven插件

<build>
    <plugins>
        <plugin>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-mavenplugin</artifactId>
        </plugin>
        <!-- 打包时跳过测试 -->
        <plugin>
            <groupId>org.apache.maven.plugins</groupId>
            <artifactId>maven-surefireplugin</artifactId>
            <version>2.22.2</version>
            <configuration>
                <skipTests>true</skipTests>
            </configuration>
        </plugin>
        <!-- docker-maven-plugin-->
        <plugin>
            <groupId>com.spotify</groupId>
            <artifactId>docker-mavenplugin</artifactId>
            <version>1.2.2</version>
            <configuration>
                <!-- Docker路径 -->
                <dockerHost>http://192.168.0.80:2375</dockerHost>
                <!-- Dockerfile定义 -->
              <baseImage>openjdk:11</baseImage>
                <!-- 作者 -->
              <maintainer>ittxc</maintainer>
                <resources>
                    <resource>
                        <!-- 复制jar包到docker容器指定目录 -->
                        <targetPath>/</targetPath>
                        <!-- 从哪个包拷贝文件,target包 -->
                      <directory>${project.build.directory}</directory>
                     <!-- 拷贝哪个文件 -->
                      <include>${project.build.finalName}.jar</include>
                    </resource>
                </resources>
                <workdir>/</workdir>
                <!-- 运行jar包的命令时,设置运行环境为prod生产环境,会自动读取applicationprod.yml配置文件 -->
                <entryPoint>["java", "-jar","${project.build.finalName}.jar","--spring.profiles.active=prod"]
                </entryPoint>
                <forceTags>true</forceTags>
                <!-- 镜像名 -->
              <imageName>${project.artifactId}</imageName>
                <!-- 镜像版本 -->
                <imageTags>
                  <imageTag>${project.version}</imageTag>
                </imageTags>
            </configuration>
        </plugin>
    </plugins>
</build>


部署项目容器


我们学习过程中,使用的只有一台个人主机,而每一个模块在 部署时都会启动一个容器,将20多台容器部署到同一台虚拟机 中是不现实的,个人电脑也无法支持这么多容器部署 在一起。在工作中我们会有很多服务器部署分布式项目。


1、给广告服务的提供者编写配置文件 application-prod.yml ,该文件进行生产环境配置。

# 端口号
server:
 port: 9004
# 日志格式
logging:
 pattern:
   console: '%d{HH:mm:ss.SSS} %clr(%-5level) --- [%-15thread] %cyan(%-50logger{50}):%msg%n'
# 配置Mybatis-plus
mybatis-plus:
 global-config:
   db-config:
      # 表名前缀
     table-prefix: bz_
      # 主键生成策略为自增
     id-type: auto
 configuration:
    # 关闭列名自动驼峰命名映射规则
   map-underscore-to-camel-case: false
   log-impl: org.apache.ibatis.logging.stdout.StdOutImpl # 开启sql日志
spring:
  # 数据源
 datasource:
   driver-class-name: com.mysql.cj.jdbc.Driver
   url: jdbc:mysql://192.168.0.176:3306/baizhanshopping?serverTimezone=UTC
   username: root
   password: root
  # redis
 redis:
   host: 192.168.0.176
   port: 6379
   timeout: 30000
   jedis:
     pool:
       max-idle: 8
       max-wait: -1
       max-active: 8
       min-idle: 0
dubbo:
 application:
   name: shopping_category_service # 项目名
 registry:
    address: zookeeper://192.168.0.176 #注册中心地址
   port: 2181 # 注册中心端口号
   timeout: 10000 # 注册到zk上超市时间,ms
 protocol:
   name: dubbo # dubbo使用的协议
   port: -1 # 自动分配端口
 scan:
   base-packages: com.itbaizhan.shopping_category_service.service # 包扫描


2、给广告服务的消费者编写配置文件 application-prod.yml ,该文件进行生产环境配置。

# 端口号
server:
 port: 8002
# 日志格式
logging:
 pattern:
   console: '%d{HH:mm:ss.SSS} %clr(%-5level) --- [%-15thread] %cyan(%-50logger{50}):%msg%n'
dubbo:
 application:
   name: shopping_category_customer_api #项目名
 registry:
   address: zookeeper://192.168.0.176 #注册中心地址
   port: 2181 # 注册中心端口号
   timeout: 10000 # 注册到zk上超市时间,ms
 protocol:
   name: dubbo # dubbo使用的协议
   port: -1 # 自动分配端口


3、将广告服务的提供者和消费者打包,并生成Docker镜像


4、启动广告服务的提供者和消费者容器

docker run -d -p 9004:9004 shopping_category_service
docker run -d -p 8002:8002 shopping_category_customer_api


5、测试查询所有广告功能:ip地址:8002/user/category/all

相关实践学习
2分钟自动化部署人生模拟器
本场景将带你借助云效流水线Flow实现人生模拟器小游戏的自动化部署
7天玩转云服务器
云服务器ECS(Elastic Compute Service)是一种弹性可伸缩的计算服务,可降低 IT 成本,提升运维效率。本课程手把手带你了解ECS、掌握基本操作、动手实操快照管理、镜像管理等。了解产品详情:&nbsp;https://www.aliyun.com/product/ecs
目录
相关文章
|
27天前
|
Java 编译器 测试技术
全面理解Maven Compiler Plugin-Maven编译插件
【10月更文挑战第16天】
157 1
|
1月前
|
网络安全 Docker 容器
VScode远程服务器之远程 远程容器 进行开发(五)
VScode远程服务器之远程 远程容器 进行开发(五)
27 1
|
1月前
|
前端开发 Docker 容器
主机host服务器和Docker容器之间的文件互传方法汇总
Docker 成为前端工具,可实现跨设备兼容。本文介绍主机与 Docker 容器/镜像间文件传输的三种方法:1. 构建镜像时使用 `COPY` 或 `ADD` 指令;2. 启动容器时使用 `-v` 挂载卷;3. 运行时使用 `docker cp` 命令。每种方法适用于不同场景,如静态文件打包、开发时文件同步及临时文件传输。注意权限问题、容器停止后的文件传输及性能影响。
131 0
|
2月前
|
SQL XML Java
springboot整合mybatis-plus及mybatis-plus分页插件的使用
这篇文章介绍了如何在Spring Boot项目中整合MyBatis-Plus及其分页插件,包括依赖引入、配置文件编写、SQL表创建、Mapper层、Service层、Controller层的创建,以及分页插件的使用和数据展示HTML页面的编写。
springboot整合mybatis-plus及mybatis-plus分页插件的使用
|
1月前
|
监控 Java Maven
springboot学习二:springboot 初创建 web 项目、修改banner、热部署插件、切换运行环境、springboot参数配置,打包项目并测试成功
这篇文章介绍了如何快速创建Spring Boot项目,包括项目的初始化、结构、打包部署、修改启动Banner、热部署、环境切换和参数配置等基础操作。
126 0
|
3月前
|
Kubernetes 应用服务中间件 nginx
基于容器化的Web服务器管理
【8月更文第28天】随着云原生技术的发展,容器化已经成为部署和管理应用程序的标准方式之一。Docker 和 Kubernetes 等工具提供了强大的容器管理和编排能力,使得开发者能够轻松地部署、扩展和维护 Web 服务器。本文将详细介绍如何使用 Docker 和 Kubernetes 实现 Web 服务器的容器化部署,并提供详细的步骤和代码示例。
104 1
|
3月前
|
Java Maven Spring
Maven重打包问题之maven-shade-plugin插件对于重复的class文件会如何处理
Maven重打包问题之maven-shade-plugin插件对于重复的class文件会如何处理
|
3月前
|
JavaScript 前端开发 Java
SpringBoot 引入 smart-doc 接口文档管理插件,以及统一接口返回,最后推送到 Torna,进行统一管理
本文介绍了如何在SpringBoot项目中整合smart-doc接口文档管理插件,实现接口文档的生成和统一管理,并展示了如何将文档推送到Torna接口文档管理系统进行进一步的集中管理。
233 0
SpringBoot 引入 smart-doc 接口文档管理插件,以及统一接口返回,最后推送到 Torna,进行统一管理
|
3月前
|
弹性计算 Kubernetes 开发者
利用容器化服务实现游戏服务器的动态资源配置
【8月更文第12天】在游戏行业中,用户基数的变化往往呈现出明显的波动性,特别是在推广活动期间,用户基数会显著增加,而在非推广期则会有所下降。为了应对这种变化,游戏开发者需要一种能够根据用户基数动态调整服务器资源的解决方案,以确保用户体验的同时最大限度地节省成本。容器化服务因其灵活的资源管理和成本控制能力,成为了理想的解决方案。
62 2
|
3月前
|
Java jenkins 持续交付
jenkins学习笔记之十七:使用插件及maven上传制品到nexus
jenkins学习笔记之十七:使用插件及maven上传制品到nexus