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
目录
相关文章
|
3天前
|
存储 弹性计算 安全
阿里云服务器配置选择策略参考及后期使用注意事项
对于初次购买阿里云服务器的一些新手用户来说,在云服务器配置选择和后期使用过程中有一些不清楚的地方,小编分享几点阿里云服务器配置选择策略,以及后期使用注意事项,购买过程中注意好下面这些事项,能让我们选对选好阿里云服务器,购买之后,在使用过程中,注意下面这些事项,能够让我们更好、更安全的使用阿里云服务器。下面是小编分享的一份详尽的阿里云服务器配置与使用指南,以供参考和借鉴。
|
29天前
|
安全 Linux 应用服务中间件
从零开始启动、配置、保护你的云服务器并搭建一个简单的网站
本文详细介绍了如何准备原料、搭建基础环境、进行安全防护、建设网站、管理证书以及开启BBR优化网络性能。主要内容包括获取健康云服务器、配置SSH登录、创建非root用户、启用密钥认证、安装Nginx、申请TLS证书、配置HTTPS自动跳转及优化网络性能等步骤。通过本文,读者可以掌握从零开始搭建个人网站的全过程。
44 1
从零开始启动、配置、保护你的云服务器并搭建一个简单的网站
|
22天前
|
开发框架 .NET PHP
网站应用项目如何选择阿里云服务器实例规格+内存+CPU+带宽+操作系统等配置
对于使用阿里云服务器的搭建网站的用户来说,面对众多可选的实例规格和配置选项,我们应该如何做出最佳选择,以最大化业务效益并控制成本,成为大家比较关注的问题,如果实例、内存、CPU、带宽等配置选择不合适,可能会影响到自己业务在云服务器上的计算性能及后期运营状况,本文将详细解析企业在搭建网站应用项目时选购阿里云服务器应考虑的一些因素,以供参考。
|
23天前
|
Java 应用服务中间件 Docker
将基于 Spring 的 WAR 应用程序部署到 Docker:详尽指南
将基于 Spring 的 WAR 应用程序部署到 Docker:详尽指南
28 2
|
1月前
|
存储 人工智能 弹性计算
阿里云弹性计算(ECS)提供强大的AI工作负载平台,支持灵活的资源配置与高性能计算,适用于AI训练与推理
阿里云弹性计算(ECS)提供强大的AI工作负载平台,支持灵活的资源配置与高性能计算,适用于AI训练与推理。通过合理优化资源分配、利用自动伸缩及高效数据管理,ECS能显著提升AI系统的性能与效率,降低运营成本,助力科研与企业用户在AI领域取得突破。
50 6
|
29天前
|
Java Linux Docker
什么是 Docker?如何将 Spring Boot 应用程序部署到 Docker?
什么是 Docker?如何将 Spring Boot 应用程序部署到 Docker?
43 3
|
1月前
|
负载均衡 监控 应用服务中间件
配置Nginx反向代理时如何指定后端服务器的权重?
配置Nginx反向代理时如何指定后端服务器的权重?
61 4
|
1月前
|
机器学习/深度学习 数据采集 Docker
Docker容器化实战:构建并部署一个简单的Web应用
Docker容器化实战:构建并部署一个简单的Web应用
|
1月前
|
持续交付 开发者 Docker
掌握Docker容器化技术,加速软件开发与部署
掌握Docker容器化技术,加速软件开发与部署
51 0
|
16天前
|
监控 NoSQL 时序数据库
《docker高级篇(大厂进阶):7.Docker容器监控之CAdvisor+InfluxDB+Granfana》包括:原生命令、是什么、compose容器编排,一套带走
《docker高级篇(大厂进阶):7.Docker容器监控之CAdvisor+InfluxDB+Granfana》包括:原生命令、是什么、compose容器编排,一套带走
153 77