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
目录
相关文章
|
15天前
|
Java Linux
Springboot 解决linux服务器下获取不到项目Resources下资源
Springboot 解决linux服务器下获取不到项目Resources下资源
|
12天前
|
JSON 前端开发 Java
统一异常处理:让Spring Boot项目异常更优雅
统一异常处理:让Spring Boot项目异常更优雅
23 1
|
16天前
|
JSON 前端开发 Java
Springboot前后端分离项目统一封装返回结果
Springboot前后端分离项目统一封装返回结果
|
30天前
|
Ubuntu JavaScript 关系型数据库
在阿里云Ubuntu 20.04服务器中搭建一个 Ghost 博客
在阿里云Ubuntu 20.04服务器上部署Ghost博客的步骤包括创建新用户、安装Nginx、MySQL和Node.js 18.x。首先,通过`adduser`命令创建非root用户,然后安装Nginx和MySQL。接着,设置Node.js环境,下载Nodesource GPG密钥并安装Node.js 18.x。之后,使用`npm`安装Ghost-CLI,创建Ghost安装目录并进行安装。配置过程中需提供博客URL、数据库连接信息等。最后,测试访问前台首页和后台管理页面。确保DNS设置正确,并根据提示完成Ghost博客的配置。
在阿里云Ubuntu 20.04服务器中搭建一个 Ghost 博客
|
1月前
|
存储 弹性计算 数据可视化
要将ECS中的文件直接传输到阿里云网盘与相册(
【2月更文挑战第31天】要将ECS中的文件直接传输到阿里云网盘与相册(
417 4
|
1月前
|
SQL 弹性计算 安全
购买阿里云活动内云服务器之后设置密码、安全组、增加带宽、挂载云盘教程
当我们通过阿里云的活动购买完云服务器之后,并不是立马就能使用了,还需要我们设置云服务器密码,配置安全组等基本操作之后才能使用,有的用户还需要购买并挂载数据盘到云服务器上,很多新手用户由于是初次使用阿里云服务器,因此并不知道这些设置的操作流程,下面给大家介绍下这些设置的具体操作流程。
购买阿里云活动内云服务器之后设置密码、安全组、增加带宽、挂载云盘教程
|
19天前
|
弹性计算
阿里云ECS使用体验
在申请高校学生免费体验阿里云ECS云服务器后的一些使用体验和感受。
|
1月前
|
弹性计算
阿里云3M带宽云服务器并发多大?阿里云3M带宽云服务器测评参考
在探讨云服务器3M带宽能支持多大并发这一问题时,我们首先要明白一个关键点:并发量并非仅由带宽决定,还与网站本身的大小密切相关。一般来说,一个优化良好的普通网站页面大小可能只有几K,为便于计算,我们可以暂且假定每个页面大小为50K。
819 1
|
1天前
|
弹性计算
阿里云ECS的使用心得
本文主要讲述了我是如何了解到ECS,使用ECS的一些经验,以及自己的感悟心得
|
9天前
|
弹性计算 运维 安全
阿里云ecs使用体验
整了台服务器部署项目上线

热门文章

最新文章