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

相关实践学习
通义万相文本绘图与人像美化
本解决方案展示了如何利用自研的通义万相AIGC技术在Web服务中实现先进的图像生成。
7天玩转云服务器
云服务器ECS(Elastic Compute Service)是一种弹性可伸缩的计算服务,可降低 IT 成本,提升运维效率。本课程手把手带你了解ECS、掌握基本操作、动手实操快照管理、镜像管理等。了解产品详情:&nbsp;https://www.aliyun.com/product/ecs
目录
相关文章
|
2月前
|
NoSQL 算法 Redis
【Docker】(3)学习Docker中 镜像与容器数据卷、映射关系!手把手带你安装 MySql主从同步 和 Redis三主三从集群!并且进行主从切换与扩容操作,还有分析 哈希分区 等知识点!
Union文件系统(UnionFS)是一种**分层、轻量级并且高性能的文件系统**,它支持对文件系统的修改作为一次提交来一层层的叠加,同时可以将不同目录挂载到同一个虚拟文件系统下(unite several directories into a single virtual filesystem) Union 文件系统是 Docker 镜像的基础。 镜像可以通过分层来进行继承,基于基础镜像(没有父镜像),可以制作各种具体的应用镜像。
356 5
|
2月前
|
监控 Linux 调度
【赵渝强老师】Docker容器的资源管理机制
本文介绍了Linux CGroup技术及其在Docker资源管理中的应用。通过实例演示了如何利用CGroup限制应用程序的CPU、内存和I/O带宽使用,实现系统资源的精细化控制,帮助理解Docker底层资源限制机制。
185 6
|
2月前
|
XML Java 应用服务中间件
【SpringBoot(一)】Spring的认知、容器功能讲解与自动装配原理的入门,带你熟悉Springboot中基本的注解使用
SpringBoot专栏开篇第一章,讲述认识SpringBoot、Bean容器功能的讲解、自动装配原理的入门,还有其他常用的Springboot注解!如果想要了解SpringBoot,那么就进来看看吧!
382 2
|
4月前
|
Kubernetes Docker Python
Docker 与 Kubernetes 容器化部署核心技术及企业级应用实践全方案解析
本文详解Docker与Kubernetes容器化技术,涵盖概念原理、环境搭建、镜像构建、应用部署及监控扩展,助你掌握企业级容器化方案,提升应用开发与运维效率。
797 108
|
5月前
|
存储 监控 测试技术
如何将现有的应用程序迁移到Docker容器中?
如何将现有的应用程序迁移到Docker容器中?
424 57
|
2月前
|
监控 Kubernetes 安全
还没搞懂Docker? Docker容器技术实战指南 ! 从入门到企业级应用 !
蒋星熠Jaxonic,技术探索者,以代码为笔,在二进制星河中书写极客诗篇。专注Docker与容器化实践,分享从入门到企业级应用的深度经验,助力开发者乘风破浪,驶向云原生新世界。
还没搞懂Docker? Docker容器技术实战指南 ! 从入门到企业级应用 !
|
5月前
|
存储 监控 Java
如何对迁移到Docker容器中的应用进行性能优化?
如何对迁移到Docker容器中的应用进行性能优化?
353 59

热门文章

最新文章