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

本文涉及的产品
云服务器 ECS,每月免费额度200元 3个月
云服务器ECS,u1 2核4GB 1个月
简介: 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

相关实践学习
一小时快速掌握 SQL 语法
本实验带您学习SQL的基础语法,快速入门SQL。
7天玩转云服务器
云服务器ECS(Elastic Compute Service)是一种弹性可伸缩的计算服务,可降低 IT 成本,提升运维效率。本课程手把手带你了解ECS、掌握基本操作、动手实操快照管理、镜像管理等。了解产品详情:&nbsp;https://www.aliyun.com/product/ecs
目录
相关文章
|
29天前
|
Docker 容器
进入Docker容器中
进入Docker容器中
35 2
|
30天前
|
Java Maven 开发工具
maven导入项目出现Unable to import maven project: See logs for details
maven导入项目出现Unable to import maven project: See logs for details
11 0
maven导入项目出现Unable to import maven project: See logs for details
|
2天前
|
存储 Kubernetes Docker
Kubernetes(K8S)集群管理Docker容器(概念篇)
Kubernetes(K8S)集群管理Docker容器(概念篇)
|
2天前
|
Java Maven Kotlin
[AIGC] 请你写一遍博客介绍 “使用idea+kotinlin+springboot+maven 结合开发一个简单的接口“,输出markdown格式,用中文回答,请尽可能详细
[AIGC] 请你写一遍博客介绍 “使用idea+kotinlin+springboot+maven 结合开发一个简单的接口“,输出markdown格式,用中文回答,请尽可能详细
|
2天前
|
存储 Ubuntu 安全
Docker容器常用命令
Docker容器常用命令
11 1
|
8天前
|
存储 运维 监控
构建高效稳定的Docker容器监控体系
【4月更文挑战第18天】 在现代微服务架构中,Docker容器已成为部署和运行应用的标准环境。随之而来的挑战是如何有效监控这些容器的性能与健康状况,确保系统的稳定性和可靠性。本文将探讨构建一个高效稳定的Docker容器监控体系的关键技术和方法,包括日志管理、性能指标收集以及异常检测机制,旨在为运维人员提供实用的指导和建议。
13 0
|
17天前
|
Linux Docker 容器
docker 容器常用命令
docker 容器常用命令
13 0
|
17天前
|
Linux Shell 虚拟化
linux 部署docker容器虚拟化平台(二)--------docker 镜像制作方法
linux 部署docker容器虚拟化平台(二)--------docker 镜像制作方法
28 0
|
17天前
|
存储 Linux Shell
centos 部署docker容器 安装 、基本使用方法(一)
centos 部署docker容器 安装 、基本使用方法(一)
32 0
|
26天前
|
Kubernetes 网络协议 Docker
Docker 容器的DNS
Docker 容器的DNS
28 1