大觅网之业务部署(Business deployment of Da Mi Network)

news2024/10/1 15:26:20

💝💝💝欢迎来到我的博客,很高兴能够在这里和您见面!希望您在这里可以感受到一份轻松愉快的氛围,不仅可以获得有趣的内容和知识,也可以畅所欲言、分享您的想法和见解。

本人主要分享计算机核心技术:系统维护、数据库、网络安全、自动化运维、容器技术、云计算、人工智能、运维开发、算法结构、物联网、JAVA 、Python、PHP、C、C++等。
不同类型针对性训练,提升逻辑思维,剑指大厂,非常期待和您一起在这个小小的网络世界里共同探索、学习和成长。

大觅网之业务部署

技能目标:
-
熟练使用 Jenkins 拉取代码、构建 maven 项目
-
掌握 Tengine 配合 Lua 图片裁剪的搭建

2.1 案例分析

2.1.1 案例概述

某公司最近开发了一套大型票务类电商网站,被命名为大觅网。大觅网为用户提供了通
Web 界面购票的服务,主要功能包括:商品搜索、用户注册登录、商品详情、选座、下
单等功能。大觅网的整个部署过程会用到云计算的相关知识,包括 OpenStack 的多节点部
署、 OpenStack 网络路由创建和云主机创建;也会用到 Docker 容器的相关知识,包括
Dockerfile 制作镜像、 Docker Compose 多容器关联制作等;还会用到 Jenkins 自动构建发
布大觅网项目。整个项目采用多知识相结合,共同协调配合来完成部署。本案例主要介绍大
觅网的业务部署。

2.1.2 案例前置知识点

1. 什么是 Tengine

Tengine 是由淘宝网发起的 Web 服务器项目。针对网站访问量大的需求,它基于开源
软件 Nginx 进行了优化,添加了很多高级功能和特性。 Tengine 的性能和稳定性已经在淘宝
网、天猫商城等大型网站得到了很好的检验。它的最终目标是打造一个高效、稳定、安全、
易用的 Web 平台。从 2011 12 月开始, Tengine 成为一个开源项目。 Tengine 团队在积
极地开发和维护这个项目,其团队的核心成员来自于淘宝、搜狗等互联网企业,它是社区合
作的成果。

2. 什么是 Nexus

Nexus Maven 仓库管理器,也可以叫 Maven 私服。它功能强大,极大地简化了自
己内部仓库的维护和外部仓库的访问。利用 Nexus 只在一个地方就能够完全控制访问和部
署仓库中的每个 Artifact Nexus 是一套 开箱即用 的系统,不需要数据库,它使用文件系
统和 Lucene 组织数据。
Nexus 不是 Maven 的核心概念,它仅仅是一种衍生出来的特殊的 Maven 仓库。对于
Maven 来说,仓库分为三种:本地仓库、远程仓库和中央仓库。本地仓库就是在 Maven
setting.xml 文件中配置的本地仓库地址。由于最原始的本地仓库是空的,因此, Maven
须知道至少一个可用的远程仓库,才能在执行 Maven 命令的时候下载到需要的构件。中央
仓库是 Maven 默认的远程仓库。私服是架设在局域网的一种特殊的远程仓库,目的是代理
远程仓库及部署第三方构件。有了私服之后,当 Maven 需要下载构件时,直接请求私服。
如果私服上存在,则下载到本地仓库;否则,私服请求外部的远程仓库,将构件下载到私服,
再提供给本地仓库下载。

3. 什么是 Sonar

Sonar 是一个用于代码质量管理的开放平台。通过插件机制, Sonar 可以集成不同的
测试工具、代码分析工具以及持续集成工具。与持续集成工具(例如 Hudson/Jenkins 等)
不同, Sonar 并不是简单地把不同的代码检查工具结果直接显示在 Web 页面上,而是通
过不同的插件对这些结果进行再加工处理。通过量化的方式度量代码质量的变化,从而可以
方便地对不同规模和种类的工程进行代码质量管理。
在对其他工具的支持方面, Sonar 不仅提供了对 IDE 的支持,还可以在 Eclipse
IntelliJ IDEA 这些工具里联机查看结果;同时 Sonar 对大量的持续集成工具提供了接口支
持,可以很方便地在持续集成中使用 Sonar 。此外, Sonar 的插件还可以对 Java 以外的
其他编程语言提供支持,对国际化以及报告文档化也有良好的支持。

4. 什么是 Mycat

MyCat 是一个开源的,面向企业应用开发的大数据库集群。它是目前最流行的基于 java
语言编写的数据库中间件,是一个实现了 MySQL 协议的服务器。前端用户可以把它看作
是一个数据库代理,用 MySQL 客户端工具和命令行访问,而其后端可以用 MySQL 原生协
议与多个 MySQL 服务器通信,也可以用 JDBC 协议与大多数主流数据库服务器通信,其
核心功能是分库分表。配合数据库的主从模式还可实现读写分离。
MyCat 是基于阿里开源的 Cobar 产品而研发, Cobar 的稳定性、可靠性、优秀的架构
和性能以及众多成熟的使用案例使得 MyCat 变得非常的强大。 MyCat 发展到目前的版本,
已经不是一个单纯的 MySQL 代理了,它的后端可以支持 MySQL SQL Server Oracle
DB2 PostgreSQL 等主流数据库,也支持 MongoDB 这种新型 NoSQL 方式的存储,未来
还会支持更多类型的存储。而在最终用户看来,无论是那种存储方式,在 MyCat 里,都是
一个传统的数据库表,支持标准的 SQL 语句进行数据的操作。对前端业务来说,可以大幅
降低开发难度,提升开发速度。

2.1.3 案例环境

1. 本案例实验环境

本案例基于教材《 OpenStack 云平台实战》第三、四章中 OpenStack 多节点部署和云
主机创建。在 OpenStack 上创建两台虚拟云主机作为实验环境,具体云主机环境配置如表
2-1 所示。
2-1 大觅网搭建环境
主机操作系统主机名/IP 地址主要软件
虚拟云主机CentOS 7.3-x86_64damiwang/192.168.9.18OpenStackDocker
虚拟云主机CentOS 7.3-x86_64gitlab/192.168.9.13Gitlab
2. 案例架构
技术架构用来描述大觅网整体业务实现采用的具体技术。大觅网的技术架构如图 2.1
示。
2.1 大觅网技术架构图
大觅网整体采用 Docker 的方式进行项目环境搭建和配置。
采用 MySQL 作为大觅网数据库,并采用集群方式进行配置和部署。
为了能满足数据库灵活扩展的要求,采用 MyCat 数据库中间件管理数据库集群。
为了满足商品数据的查询性能和精准搜索的功能性需求,大觅网使用 Elasticsearch
群实现商品信息的存储和搜索。
为了更好地满足性能要求,将部分常用数据缓存在 Redis 中。
采用 Spring Cloud 微服务架构实现微服务治理,将应用拆分为提供者、消费者、网关
及注册中心。
在提供者和消费者的具体实现上,采用 Spring Cloud 整套解决方案,包括使用 Fegin
进行接口管理、使用 Hystrix 进行容错和监控、使用 Ribbon 实现负载均衡等。
项目采用前后端分离技术,将数据的业务逻辑处理和展示分开,将数据展示独立为前端
项目。前后端采用 Nginx 反向代理实现接口访问。
为了节省项目部署时间,项目整体采用 Jenkins 实现程序的自动发版,实现持续集成,
也可简写为 CI Continuous Integration )。
大觅网应用架构是采用基于微服务设计思想的模块化开发,针对不同的业务配置了相应
的数据库,大觅网的数据库结构组成如图 2.2 所示。
2.2 数据库架构图
大觅网数据库包括 6 个独立的数据库,分别为基础库、节目库、订单库、支付库、排
期库和用户库。
大觅网数据库在设计过程中采用 MyCat 实现水平分库,将订单库做进一步的拆分,拆
分后的三个子订单库分别为订单库 1 、订单库 2 、订单库 3 ,三个子订单库的结构相同。

3. 案例环境用到的用户名和密码

2-2 是大觅网案例中预设的用户及密码。
2-2 案例中使用到的用户名和密码
类型用户名密码
Gitlabroot bdqn123456
MySQLroot123456
Jenkinsadmin123456
Nexusadmin
admin123

4. 案例需求

本案例的需求如下:
1 )创建 Gitlab 仓库,用于存放大觅网后端 Java 程序源码。
2 )使用 Docker 创建 Base 基础软件包环境。
3 )通过 Jenkins 构建生成大觅网程序 jar 包并发布。

5. 案例实现思路

本案例的实现思路如下:
1 )部署 Gitlab 代码仓库。
2 )通过 Docker 部署 Tomcat JDK CentOS-ssh 三个基础镜像。
3 )部署 Shipyard 容器管理工具。
4 )通过 Docker 部署 Redis Tengine ELK Kafka Nexus MySQL Sonar RabbitMQ
Mycat Jenkins 基础镜像。
5 )配置 MySQL 数据库权限,导入数据库的表结构。
6 )通过 Jenkins 自动化工具构建业务 jar 包并发布。
7 )通过浏览器访问测试大觅网。

2.2 案例实施

2.2.1 使用 Jenkins 构建业务类项目

1. 凭据的创建

首先创建一个 凭据 ,这个 凭据 的作用是为 Jenkins 拉取 Gitlab 项目代码时,提供身
份认证功能。如果没有配置 凭据 或者配置的不对,就会出现报错,最终导致拉取不到
Gitlab 项目。在 Jenkins 首页左侧菜单栏中单击 凭据 后,即可进入凭据默认页,如图 2.3
所示。
2.3 凭据默认页
单击图 2.3 中间的 全局 ,进入全局凭据页面,如图 2.4 所示。
图 2.4 全局凭据页面
本案例使用全局凭据对业务项目进行验证。单击左侧菜单栏的 添加凭据 链接,进入添
加新凭据页面,如图 2.5 所示。
图 2.5 凭据的创建
在图 2.5 中, 类型 选用默认的 “Username with password” 范围 选择 全局 用户
密码 填写访问 Gitlab 仓库的权限(可参考案例环境中的权限表格)、 “ID” 是通过任务
或配置定义的内部唯一 ID (默认留空即可,在创建的过程中会自动生成)、 描述 内填写凭
据的具体用途(是备注说明)。填写完成后,单击 确定 按钮完成凭据的创建。

2. common 项目的构建

common 项目属于基础项目,包含若干子项目,该项目存在的目的就是在 Jenkins 构建

时将生成的包文件上传到私有仓库 Nexus 内,以供后续项目编译构建使用。
在构建 common 项目之前需确保在 Jenkins 容器内访问 nexus.local.com 地址可以指向
Nexus 私有仓库,即在 Jenkins 容器内的 /etc/hosts 文件中写入域名 nexus.local.com IP
地址解析。该域名解析默认已经在 /home/px2/envdm/docker-compose.yml 文件内进行了定
义,在基础服务部署过程中已经集成进了容器,可通过如下命令查看核实。
[root@damiwang envdm]# docker-compose exec jenkins bash
// 注意所在目录
[root@676bae0eb20a webapps]# cat /etc/hosts | grep nexus
192.168.10.13
nexus.local.com
// 确认 hosts 文件内包含 nexus.local.com 解析
在环境部署时,通过 docker-compose.yml 启动众多基础服务后,各容器的 IP 地址已
经固定,因为在 docker-compose.yml 配置文件内已经给各容器分配了固定 IP 地址。查看
容器 IP 的方法为 docker inspect 容器 ID/ 容器名字。此过程中,有几个容器的 IP 地址要注
意下: Jenkins 容器的 IP 192.168.10.12 Tengine 容器的 IP 192.168.10.13 Nexus
容器的 IP 192.168.10.7
此外, Tengine 容器内 /etc/nginx/nginx.conf 配置文件还需要包含 Nexus 跳转内容,将
域名 nexus.local.com 指向 Nexus 容器 IP 。该内容在通过 Dockerfile 构建 Tengine 容器时
已经包含进去了,这里只需检查确认。
#nexus.local.com
server {
listen
80;
server_name nexus.local.com;
location / {
proxy_set_header Host $host;
proxy_set_header X-Real-IP $remote_addr;
proxy_pass http://192.168.10.7:8081;
}
error_page
500 502 503 504 /50x.html;
location = /50x.html {
root
html;
index index.html index.htm index.jsp index.action default.html;
}
}
之所以进行上面域名解析和 Nginx 配置的检查,是因为 common 项目源码程序内 Nexus
仓库地址配置的是域名 nexus.local.com ,无法通过 IP 地址访问到 Nexus 仓库。在 Jenkins
上编译该项目时,解析 nexus.local.com 域名,就会先到 hosts 内查找对应的 IP 地址, IP
地址指向了 Tengine ,在 Tengine 配置文件内又定义跳转到 Nexus 容器仓库的 8081 端口上,
这样即可完成 Nexus 仓库的访问。
上述配置完成后,开始在 Jenkins 上创建 common 项目。在 Jenkins 首页单击 新建任
,设置项目名称为 “common” ,并选择 构建一个 maven 项目 ,然后单击 确定 ,如图 2.6
所示。
图 2.6 common 项目的创建
注意 :在创建 Jenkins 项目时,如果没有出现 构建一个 maven 项目 选项,是因为 Maven
插件没有正确安装,需要检查插件是否安装成功。如果安装成功还无法显示,请尝试重启
Jenkins 服务。
进入 common 项目的详细配置页面后,在 源码管理 选项块内选择 “Git” “Repository
URL” 填写 common 项目地址 “http://192.168.9.13/root/common.git” “Credentials” 选择之前
添加的 daimiwang 凭据, 指定分支 保持默认值,是因为项目放到了代码仓库的 master
干下,如图 2.7 所示。
图 2.7 源码管理配置
接下来,在 “Build” 选项块,填写项目的 pom.xml 文件地址和要执行的 Maven 命令。
Root
POM” 配 置 的 值 是 “dm-common/pom.xml” , 填 写 时 主 要 考 虑 pom.xml 文 件 在 项 目 内
dm-common 目录下。 “Goals and options” 填写 “clean deploy -Dmaven.test.skip=true” ,这
maven 编译构建时需要的命令,如图 2.8 所示。
图 2.8 Maven 编译相关命令
注意 :这里的 Root POM 路径有默认前缀,默认前缀就是 /root/.jenkins/workspace/
Jenkins 通过 Git 命令 clone 项目后保存到 Jenkins 容器内的目录,默认前缀不需要填写,
只需要填写 “dm-common/pom.xml” 。最后单击左下角的 保存 按钮。
在正式开始构建 common 项目之前,还需要手动上传 Alipay Jms 相关包。这两个程
序在发布包的路径为 大觅网 \ 大觅私服 nexus 手动上传包 目录下。
手动上传 Alipay Jms 的过程如下:
浏览器访问私有仓库地址 http://192.168.9.18:8081 。单击右上角的 “Log In” ,默认用户
名密码为 “admin/admin123” ,输入后进入 Nexus ,如图 2.9 所示。
图 2.9 Nexus 登录界面
进入主界面后,单击左侧菜单栏的 “Repositories” ,如图 2.10 所示。
图 2.10 Nexus 仓库界面
Alipay 包上传为例,在中间仓库区域找到 “3rd party” ,左键单击 “3rd party” ,在下方
各属性的最右侧单击的 “Artifact Upload” 选项。
GAV Definition” 选择 “From POM” ,下方 “POM
Filename” 通过 “Select POM to Upload” 选择对应的 pom 文件,该文件在发布包内的路径为:
大 觅 网 \ 大 觅 私 服 nexus 手 动 上 传 包 \cn\itrip\alipay\itrip-alipay-pc\1.0\itrip-alipay-pc-1.0.pom。 另外,“Select Artifact(s for Upload” 下的 “Filename” 选择对应的 itrip-alipay-pc-1.0.jar
jar 包跟上面 pom 文件在同目录下,如图 2.11 所示。
图 2.11 上传包到 nexus
这里有一个地方容易忽略,导致上传失败,如图 2.12 所示。
图 2.12 添加 Artifact
Jar 文件选择完成后,一定要单击下左侧的 “Add Artifact” 按钮,将文件送入 “Artifacts”
框内。如图 2.13 所示。
图 2.13 Artifacts 选入
最后,单击最下方的 “Upload Artifact(s)” 按钮进行上传。
另一个 Jms 包上传方法跟 Alipay 包的上传方法一样,在同样的位置进行上传。 pom
jar 文件在发布包的路径为:大觅网 \ 大觅私服 nexus 手动上传包 \javax\jms\jms\1.1 。这两个
文件分别为: jms-1.1.pom jms-1.1.jar 。添加完文件后,单击最下方的 “Upload Artifact(s)”
按钮上传。
Alipay Jms 相关包上传完成后,如果实验使用的 IP 地址与本案例不同的 IP 地址,
还需要检查下 Jenkins 容器内 /root/.m2/settings.xml 文件,将 “192.168.9.18” 变更为自己的
IP 地址。可通过如下命令实现。
[root@damiwang envdm]# docker-compose exec jenkins bash
// 注意所在目录
[root@676bae0eb20a webapps]# grep 192.168.9 /root/.m2/settings.xml
<url>http://192.168.9.18:8081/content/groups/public/</url>
[root@676bae0eb20a webapps]# sed -i 's/192.168.9.18/192.168.9.x/' /root/.m2/settings.xml
// x 代替实际 IP
如果实验使用到的 IP 地址是 192.168.9.18 ,上面步骤可以不用执行。
完成以上内容后,就可以开始构建 common 项目。单击首页的 common 项目,然后单
击左侧的 立即构建 ,实现代码的编译构建,完成向 Nexus 仓库提交资源包,如图 2.14
示。
图 2.14 构建 common 项目
可以切换到控制台输出,观察输出内容,首次构建需要的时间较长,需要耐心等待。可
通过 “Build History” 进入 控制台输出 。在图 2.15 中,将鼠标移动到 “#1” 后,后面会出现一
个下拉三角,单击三角就会出现如图 2.16 所示情况,选择 控制台输出 就切换到了控制台
输出页面。
图 2.15 编译历史
图 2.16 进入控制台输出
等编译结束后,会有 “SUCCESS” 提示,如下所示。
[INFO] ------------------------------------------------------------------------
[INFO] Reactor Summary for dm-common 1.0-SNAPSHOT:
[INFO]
[INFO] dm-common .......................................... SUCCESS [01:45 min]
[INFO] dm-common-dto ...................................... SUCCESS [08:24 min]
[INFO] dm-common-module ................................... SUCCESS [ 2.415 s]
[INFO] dm-common-dao ...................................... SUCCESS [01:35 min]
[INFO] dm-common-utils .................................... SUCCESS [01:08 min]
[INFO] dm-common-client ................................... SUCCESS [09:13 min]
[INFO] dm-common-ext-utils ................................ SUCCESS [ 37.881 s]
[INFO] ------------------------------------------------------------------------
[INFO] BUILD SUCCESS
[INFO] ------------------------------------------------------------------------
[INFO] Total time: 22:58 min
[INFO] Finished at: 2020-05-17T13:15:59Z
[INFO] ------------------------------------------------------------------------
Waiting for Jenkins to finish collecting data
[JENKINS]
Archiving
/root/.jenkins/workspace/common/dm-common/dm-common-utils/pom.xml
to
cn.dm/dm-common-utils/1.0-SNAPSHOT/dm-common-utils-1.0-SNAPSHOT.pom
[JENKINS]
Archiving
/root/.jenkins/workspace/common/dm-common/dm-common-utils/target/dm-common-utils-1.0-SNAPSHOT.jar
to
cn.dm/dm-common-utils/1.0-20200517.130604-1/dm-common-utils-1.0-20200517.130604-1.jar
[JENKINS]
Archiving
/root/.jenkins/workspace/common/dm-common/pom.xml
to
cn.dm/dm-common/1.0-SNAPSHOT/dm-common-1.0-SNAPSHOT.pom
[JENKINS]
Archiving
/root/.jenkins/workspace/common/dm-common/dm-common-dto/pom.xml
to
cn.dm/dm-common-dto/1.0-SNAPSHOT/dm-common-dto-1.0-SNAPSHOT.pom
[JENKINS]
Archiving
/root/.jenkins/workspace/common/dm-common/dm-common-dto/target/dm-common-dto-1.0-SNAPSHOT.jar
to
cn.dm/dm-common-dto/1.0-20200517.130315-1/dm-common-dto-1.0-20200517.130315-1.jar
[JENKINS]
Archiving
/root/.jenkins/workspace/common/dm-common/dm-common-dao/pom.xml
to
cn.dm/dm-common-dao/1.0-SNAPSHOT/dm-common-dao-1.0-SNAPSHOT.pom
[JENKINS]
Archiving
/root/.jenkins/workspace/common/dm-common/dm-common-dao/target/dm-common-dao-1.0-SNAPSHOT.jar
to
cn.dm/dm-common-dao/1.0-20200517.130455-1/dm-common-dao-1.0-20200517.130455-1.jar
[JENKINS]
Archiving
/root/.jenkins/workspace/common/dm-common/dm-common-client/pom.xml
to
cn.dm/dm-common-client/1.0-SNAPSHOT/dm-common-client-1.0-SNAPSHOT.pom
[JENKINS]
Archiving
/root/.jenkins/workspace/common/dm-common/dm-common-client/target/dm-common-client-1.0-SNAPSHOT.jar
to
cn.dm/dm-common-client/1.0-20200517.131518-1/dm-common-client-1.0-20200517.131518-1.jar
[JENKINS]
Archiving
/root/.jenkins/workspace/common/dm-common/dm-common-module/pom.xml
to
cn.dm/dm-common-module/1.0-SNAPSHOT/dm-common-module-1.0-SNAPSHOT.pom
[JENKINS]
Archiving
/root/.jenkins/workspace/common/dm-common/dm-common-module/target/dm-common-module-1.0-SNAPSHOT.jar to
cn.dm/dm-common-module/1.0-20200517.130319-1/dm-common-module-1.0-20200517.130319-1.jar
[JENKINS]
Archiving
/root/.jenkins/workspace/common/dm-common/dm-common-ext-utils/pom.xml
to
cn.dm/dm-common-ext-utils/1.0-SNAPSHOT/dm-common-ext-utils-1.0-SNAPSHOT.pom
[JENKINS]
Archiving
/root/.jenkins/workspace/common/dm-common/dm-common-ext-utils/target/dm-common-ext-utils-1.0-SNAPSHOT.jar
to cn.dm/dm-common-ext-utils/1.0-20200517.131557-1/dm-common-ext-utils-1.0-20200517.131557-1.jar
channel stopped
Finished: SUCCESS
至此, dm-common 项目编译完成。

3. dm-common-module 项目的构建

common 项目构建完成后,即可开始构建 dm-common-module 项目。在 Jenkins 首页
单击 新建任务 ,然后输入任务名称 “dm-common-module” 并选择 构建一个 maven 项目
之后单击 确定 按钮。如图 2.17 所示。
2.17 dm-common-module 项目创建
源 码 管 理 选 项 块 内 , 选 择 “Git” “Repository URL” 填 写
http://192.168.9.13/root/common.git 。这里需要注意一下,项目仓库地址跟 common 项目
一样,是因为 dm-common-module common 的子项目,以此类推 dm-common 下的其
他子项目仓库地址都是一样的。 “Credentials” 选择该项目的 Git 认证凭据, 指定分支 保持
默认,如图 2.18 所示。
2.18 dm-common-module 项目源码管理模块
接下来在 “Build” 选项块,填写项目的 pom.xml 文件地址和想要执行的 Maven 命令。
Root POM 填写 “dm-common/dm-common-module/pom.xml” ,填写 pom 文件的实际位置。
“Goals and options” 填写 “clean deploy -Dmaven.test.skip=true” ,如图 2.19 所示。
图 2.19 dm-common-module 项目 build 选项块
以上信息填写完成后,单击左下角的 保存 按钮保存退出。然后单击 立即构建 ,完成
Nexus 仓库提交资源包。至此,完成了 dm-common-module 项目的构建。
dm-common 下还有几个子项目,创建和构建步骤跟 dm-common-module 类似,依照
dm-common-module 项 目 的 创 建 和 构 建 过 程 , 依 次 创 建 并 构 建 dm-common-dto
dm-common-dao dm-common-client dm-common-utils dm-common-ext-utils 子项目。
dm-common 项 目 及 子 项 目 在 Jenkins 构 建 顺 序 是 :
dm-common→dm-common-module→dm-common-dto→dm-common-dao→dm-common-
client→dm-common-utils→dm-common-ext-utils
dm-common 和其子项目是整个项目的公共依赖包,只需要构建一次。这些公共依赖包
构建完成后,可继续构建 dm-base-consumer、dm-user-consumer 等剩下的其他业务项目。

4. env-project 项目的构建

在开始 env-project 业务项目的构建之前,需先将 Gitlab 上业务源码配置文件内对应的
IP 地址改为自己实验环境的 IP 地址,如果采用跟本案例相同的 IP 地址则不需要修改。需
要修改 IP 地址的配置文件如下所示。
env_project/dm-config-server/src/main/resources/application.yml
env_project/dm-gateway-zuul/src/main/resources/application.yml
env_project/dm-gateway-zuul/src/main/resources/bootstrap.yml
env_project/dm-zipkin-server/src/main/resources/application.yml
dm-base-consumer/dm-base-consumer/src/main/resources/application.yml
dm-base-provider/dm-base-provider/src/main/resources/application.yml
dm-user-consumer/dm-user-consumer/src/main/resources/application.yml
dm-user-provider/dm-user-provider/src/main/resources/application.yml
dm-order-consumer/dm-order-consumer/src/main/resources/application.yml
dm-order-provider/dm-order-provider/src/main/resources/application.yml
dm-pay-consumer/dm-pay-consumer/src/main/resources/application.yml
dm-pay-provider/dm-pay-provider/src/main/resources/application.yml
dm-scheduler-consumer/dm-scheduler-consumer/src/main/resources/application.yml
dm-scheduler-provider/dm-scheduler-provider/src/main/resources/application.yml
dm-item-consumer/dm-item-consumer/src/main/resources/application.yml
dm-item-provider/dm-item-provider/src/main/resources/application.yml
dm-item-search/dm-item-search/src/main/resources/application.yml
上面这些文件内默认的 IP 地址是 192.168.9.18 ,直接将 IP 地址写入了配置文件内。在
实际实验过程中需改成自己的 IP 地址。修改方式可以采用本地 Git bash 修改后提交到仓库,
也可以通过 Gitlab 页面直接编辑修改。
env-project 项目由 4 个子项目构成,分别是 dm-config-server dm-discovery-eureka
dm-gateway-zuul dm-zipkin-server ,如图 2.20 所示。
图 2.20 env-project 项目
4 个子项目需要分别构建,首先来创建 dm-discovery-eureka 项目。在 Jenkins 主页
面,单击 新建任务 ,然后输入任务名称 “dm-discovery-eureka” 并选择 构建一个 maven
,单击 确定 按钮,如图 2.21 所示。
图 2.21 dm-discovery-eureka 项目的创建
进入项目配置页面后,首先进行 源码管理 选项块的配置, “Repository URL” 的内容是
“http://192.168.9.13/root/env-project.git” ,具体配置如图 2.22 所示。
图 2.22 dm-discovery-eureka 项目源码选项块
接 着 进 行 “Build” 选 项 块 的 配 置 , 如 图 2.23 所 示 设 置 Root POM 的 值 为
“dm-discovery-eureka/pom.xml” Goals and options 的 值 为
“clean package
-Dmaven.test.skip=true”
注意:这里的命令是 “package” ,前面的 common 及其子项目使用的是 “deploy”
deploy”
可以将生成的 jar 包部署到本地 Maven 仓库和远程 Maven 私服仓库,而 “package” 则不会,
这是二者的区别。
图 2.23 dm-discovery-eureka 项目 Build 选项块
接着选择 Jenkins 项目构建后需执行的程序命令,在 构建后操作 内单击 增加构建后操
作步骤 选择 “Send build artifacts over SSH” ,如图 2.24 所示。
图 2.24 构建后执行选项
最后配置业务 jar 包发布及通过 Docker 程序启动的相关命令,通过提前配置好的 SSH
Jenkins 构建生成的 jar 包推送到远程服务器,就是推送到云主机 192.168.9.18 ,然后在
云主机上通过 Docker 将对应 jar 包启动,如图 2.25 所示。
图 2.25 构建后执行的 Docker 编译启动配置
Name :是之前创建的 SSH Server ,在哪个服务器上面发布就选哪个。
Source files Jenkins 容 器 内 源 码 编 译 后 所 在 的 位 置 , 此 项 目 值 为 :
dm-discovery-eureka/target/*.jar
Remove prefix :去除前缀路径,此项目值为 dm-discovery-eureka/target/
Remote directory :传送到的目的路径,此项目值为 dm/dm-discovery-eureka
Exec command :在目标机器上面执行的命令,其值如下。
cd /home/px2/tools/dm
sudo `which docker-compose` stop discovery-eureka
sudo `which docker-compose` build discovery-eureka
sudo `which docker-compose` up -d discovery-eureka
在正式开始构建此项目之前,需要上传 “Spring Cloud 实施业务服务体系 整个目录的内
容到 damiwang 云主机的 /home/px2/tools/dm 目录内。 “Spring Cloud 实施业务服务体系
在提供的发布包内位置为: 大觅网 \Spring Cloud 实施业务服务体系 。上传完成后就可以开
始构建此项目。
注 意 “sudo `which docker-compose` stop discovery-eureka” 最 后 的
discovery-eureka 名称是 “Spring Cloud 实施业务服务体系 docker-compose.yml 内对应
的服务名。
构 建 完 成 后 , 检 查 该 容 器 是 否 正 常 运 行 , 可 以 通 过 访 问 Shipyard
http://192.168.9.18:8080/ )进行查看。如果 Shipyard 内可以看到此容器正在运行,说明
该项目构建发布成功,如图 2.26 所示。
2.26 Shipyard dm-discovery-eureka 项目对应的容器
至此, dm-discovery-eureka 项目构建完成。
接下来开始构建 dm-config-server 项目,操作步骤和 dm-discovery-eureka 项目类似,
需注意如下地方:
Repository URL 同样是 “http://192.168.9.13/root/env-project.git”
Root POM 的值为 “dm-config-server/pom.xml”
构建后操作 里面对应的项目名称改为 “config-server”
都配置完成后就可以开始构建了。
最后两个子项目 dm-gateway-zuul dm-zipkin-server 的构建步骤也类似,配置对照着
改为对应的子项目名称即可开始构建。
注意 dm-gateway-zuul 项目在 docker-compose.yml 内对应的服务是 zuul-gateway
5. dm-base-consumer 项目的构建
Jenkins 首页内单击 新建任务 ,然后输入任务名称 “dm-base-consumer” ,并选择 构建
一个 maven 项目 ,之后单击 确定 按钮,如图 2.27 所示。
图 2.27 dm-base-consumer 项目创建
进入项目配置界面后,在源码管理选项卡下选中 “Git” “Repository URL” 填写项目的
Git 地址 “http://192.168.9.13/root/base-consumer.git” “Credentials” 选择该项目的认证凭
证, 指定分支 内保持默认,如图 2.28 所示。
2.28 dm-base-consumer 项目源码管理
接下来 , “Build” 选项卡,填写项目的 pom.xml 文件的地址和要执行的 Maven 命令,
“Root POM” 值 为 “dm-base-consumer/pom.xml” “Credentials” 值 为 “clean package
-Dmaven.test.skip=true” ,如图 2.29 所示。
图 2.29 Maven 编译相关命令界面
最后,在 构建后操作 选项卡下,选择 “Send build artifacts over SSH” ,如图 2.30 所示。
图 2.30 配置构建后操作
接着填写 “Send build artifacts over SSH” 相关内容,如图 2.31 所示。
图 2.31 配置构建后相关操作
单击左下角的 保存 按钮保存退出后,选择立即构建,等待 dm-base-consumer 构建完
成,此时对应业务的容器已经启动。可通过 docker ps -a 查看,也可以通过 Shipyard 查看,
可自由选择。
[root@damiwang dm]# docker ps -a
CONTAINER ID
IMAGE
COMMAND
CREATED
STATUS
PORTS
NAMES
7e9a8d2cfa0b
dm_base-consumer
"java -server -Xms64…"
39
seconds ago
Up 38 seconds
22/tcp, 0.0.0.0:7000->7000/tcp
dm_base-consumer_1
6. dm-base-provider 项目的构建
Jenkins 首页单击 新建任务 ,然后输入任务名称 dm-base-provider 并选择 构建一个
maven 项目 ,之后单击 确定 按钮。如图 2.32 所示。
图 2.32 创建 dm-base-provider 项目
进入项目配置界面后,在源码管理选项卡下选中 “Git” “Repository URL” 填写项目的
Git 地址为 “http://192.168.9.13/root/base-provider.git”
Credentials” 选择 damiwang 的认证
凭证, 指定分支 内保持默认,如图 2.33 所示。
2.33 dm-base-provider 项目源码管理
接下来在 “Build” 选项卡,填写项目的 pom.xml 文件地址及想要执行的 Maven 命令,如
图 2.34 所示。 2.34 Maven 编译相关命令界面
最后,在 构建后操作 选项卡下,选择 “Send build artifacts over SSH” 。配置通过 SSH
远程上传文件及远程 Docker 构建启动容器命令,如图 2.35 所示。
图 2.35 配置通过 SSH 操作容器内容
保存退出后,选择立即构建,等待 dm-base-provider 构建完成后,容器已经启动。可
通过 Shipyard 或者 docker ps -a 进行查看。
7. 其他项目的构建
大觅网的整体业务项目构成,如图 2.36 所示。
图 2.36 大觅网业务项目
其他项目的构建方法和 dm-base-consumer 的构建方法相同。需要特别注意:在 构建
后操作 步骤里 docker 命令最后的名称是 docker-compose.yml 内的服务名。剩余业务项目
的构建顺序没有特殊要求。
当所有的业务模块都构建完成后,可以访问微服务的注册中心,访问地址为
http://192.168.9.18:7776 ,用户名是 root ,密码为 123456 。所有业务服务正常都应该已经
注册到了注册中心,如图 2.37 所示。
图 2.37 注册中心
2.2.2 项目测试
在 进 行 测 试 之 前 , 还 需 要 确 认 两 处 配 置 。 Tengine 容 器 内 , 前 端 文 件
/usr/local/dm/static/js/1.11375dc8746e5242630d.js 内包含 “192.168.9.18” IP 地址,如果
实验过程中使用的不是本案例的 IP ,则需要根据实际 IP 地址进行调整。另外一处是 Tengine
的配置文件 /usr/local/tengine/conf/nginx.conf ,文件内有跳转到 “192.168.9.18” 7600 端口,
此处也需要根据实际 IP 进行修改。
相 关 的 基 础 服 务 、 业 务 服 务 都 构 建 完 成 后 , 就 可 以 进 行 项 目 测 试 。 访 问
http://192.168.9.18:8888 查看大觅网的首页内容,如图 2.38 所示。
图 2.38 大觅网首页
至此,大觅网项目搭建完成。
项目总结
大觅网整个项目已经介绍完了,通过本项目的学习和实施,充分复现了整个项目从研发、基 础环境部署到业务部署的过程。项目过程中用到了 OpenStackDockerJenkins 等环境和 软件。读者在实验过程中应该理解各功能的 Dockerfile,明白 Dockerfile 都实现了什么,因 为基础环境和业务部署都是通过 Docker-compose 来实现的。本项目做下来,读者基本掌 握了云环境下微服务的相关部署。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/2166411.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

ubuntu20.04.6 触摸屏一体机,外接视频流盒子开机输入登录密码触屏失灵问题解决方法

1. 首先直接运行xrandr命令&#xff0c;查看设备的相关信息&#xff1a; 运行之后会显示当前连接设备的屏幕信息&#xff0c;如下图&#xff0c;LVDS和VGA-0&#xff0c;而HDMI屏幕为disconnect&#xff0c;意为没有连接&#xff1a; 2. 设置开机主屏幕显示&#xff1a; xrand…

TypeScript 设计模式之【建造者模式】

文章目录 **建造者模式**&#xff1a;打造你的梦想之屋建造者的秘密建造者有什么利与害&#xff1f;如何使用建造者搭建各种房子代码实现案例建造者模式的主要优点建造者模式的主要缺点建造者模式的适用场景总结 建造者模式&#xff1a;打造你的梦想之屋 假设你想要一栋完美的…

LeetCode[简单] 876. 链表的中间结点

给你单链表的头结点 head &#xff0c;请你找出并返回链表的中间结点。 如果有两个中间结点&#xff0c;则返回第二个中间结点。 思路 对任意正整数 n&#xff0c;中间结点的编号可以表示成 ⌊2n​⌋1。 解法一 /*** Definition for singly-linked list.* public class L…

数据分析:线性回归计算嵌套的组间差异

文章目录 介绍加载依赖包导入数据数据预处理数据概览线性回归画图森林图的特点:森林图的作用:总结系统信息介绍 在统计学中,嵌套的组间差异分析是一种评估不同组别间差异的方法,尤其适用于层级结构或分组数据。通过线性回归模型,我们可以计算出各个变量对于因变量的影响,…

priority_queue优先级队列(堆)详解。C++经验+1

什么是堆 首先我们先了解什么是堆&#xff1f;堆分为大根堆和小根堆。但其实大根堆会让人误以为是不是大的元素在下面呢&#xff1f;为了防止错误想法&#xff0c;大根堆也可以叫大顶堆。 大顶堆&#xff1a;顶上元素最大&#xff0c;上一层比下一层元素大。 小顶堆&#xff…

AI搜索软件哪个好,AI搜索引擎工具分享

随着AI技术的发展&#xff0c;AI搜索引擎工具正逐渐成为我们信息获取的重要方法。下面小编就来和大家分享一些好用的AI搜索引擎软件&#xff0c;感兴趣的同学可以逐个使用体验一下。因为每个AI搜索引擎工具不同&#xff0c;建议大家搜索的时候可以多个工具搜索&#xff0c;然后…

.netcore nacos注册成功,服务列表找不到任何服务

命令空间id不要自动生成 .netcore 配置文件里&#xff0c;Namespace 配置命名空间id 而不是命名空间名称。

OrangePi 烧录镜像步骤

理解&#xff1a;第一步&#xff1a;烧录镜像。第二步&#xff1a;建立编译环境&#xff08;一般是PC端的Linux虚拟机&#xff09;和板卡端的文件连接。因为要传文件&#xff0c;一般用挂载的方法。第三步&#xff1a;软件程序的编译与部署。 第一步&#xff1a;烧录镜像步骤 …

React学习笔记(四)——React 组件生命周期

目录 1. 生命周期-概览 2. 生命周期-挂载阶段 3. 生命周期-更新阶段 4. 生命周期-卸载阶段 5. setState扩展-发现问题 6. setState扩展-更多用法 7. setState扩展-异步 1. 生命周期-概览 了解react类组件生命周期整体情况 大致步骤&#xff1a; 什么是生命周期React类组…

AntFlow-Vue3 :一个仿钉钉流程审批,且满足99.8%以上审批流程需求的企业级工作流平台,开源且免费!

在现代企业管理中&#xff0c;流程审批的高效性直接影响到工作的流畅度与生产力。最近&#xff0c;我发现了一个非常有趣的项目—— AntFlow-Vue3 。这个项目不仅提供了一个灵活且可定制的工作流平台&#xff0c;还能让用户以可视化的方式创建和管理审批流程。 如果你是一名前…

10. 排序

一、排序的概念及引用 1. 排序的概念 排序&#xff1a;所谓排序&#xff0c;就是使一串记录&#xff0c;按照其中的某个或某些关键字的大小&#xff0c;递增或递减的排列起来的操作。 稳定性&#xff1a;假定在待排序的记录序列中&#xff0c;存在多个具有相同的关键字的记录…

Qt基础之四十七:管理员权限

在Windows系统中,以管理员身份运行的意思是,用系统管理最高权限运行程序。一般来说,只有当某些操作涉及系统保护区域时,才会需要用户授权管理员运行。如此一来,程序、命令在运行过程中,就有了足够权限,更改系统设置或注册表。 一.Qt程序加入管理员权限的几种方式 1.MS…

推荐一些免费下载恶意样本的网站

前一阵微步下载样本开始收费&#xff0c;算是又断了一个很好的白嫖途径。目前工作需求是不定期获取一批不同家族样本&#xff0c;看了看微步基础会员每天5次的下载限制&#xff0c;我默默把微步网页点了X&#xff0c;选择其他网站进行白嫖。 精确搜索 先列举出几个搜索比较简单…

【每天学个新注解】Day 6 Lombok注解简解(五)—@SneakyThrows

SneakyThrows 简化异常处理 并不建议日常开发中通过此注解解决异常捕获问题&#xff01;&#xff01;&#xff01; 允许方法抛出检查型异常而无需显式声明或捕获这些异常。这对于那些不希望在方法签名中声明异常或不愿意编写复杂的 try-catch 块的场景非常有用。 使用 SneakyT…

vue绘制评论页面

<template><div><div class"conmment_box"><div class"my-reply"><div class"reply-info"><el-inputfocus"focusInput"type"textarea"placeholder"请输入内容"v-model"tex…

LaTeX 编辑器-TeXstudio

TeXstudio 是一款开源跨平台 LaTeX 编辑软件&#xff0c;界面与 Texmaker 类似。TeXstudio 为用户提供互动式拼写检查、代码折叠、语法高亮、代码提示和自动完成等特性&#xff0c;功能丰富&#xff0c;界面美观&#xff0c;但软件本身不提供底层功能&#xff0c;需要使用者自行…

Qualcomm AI Hub模型优化1: Whisper-Base-En导出及问题解决

1 从Qualcomm AI Hub Module中选择Whisper-Base-En模块部署 1.1 进入module虚拟环境 python3 -m venv qai_hub_models_env && source qai_hub_models_env/bin/activate1.2 使用pip安装高通音频转录包 pip install "qai_hub_models[whisper_base_en]" 1.3…

C语言 | Leetcode C语言题解之第436题寻找右区间

题目&#xff1a; 题解&#xff1a; typedef struct {int start;int index; } Node;int cmp(const void *pa, const void *pb) {return ((Node *)pa)->start - ((Node *)pb)->start; }int* findRightInterval(int** intervals, int intervalsSize, int* intervalsColSiz…

网站建设中,JavaScript为什么现在可以做后台了?

JavaScript&#xff0c;作为一种最初为浏览器端脚本设计的语言&#xff0c;已经逐渐发展成为可以在服务器端运行的强大工具。以下是JavaScript可以做后台开发的原因分析&#xff1a; Node.js的崛起 事件驱动与非阻塞I/O&#xff1a;Node.js的事件驱动和非阻塞I/O模型使得JavaSc…

uniapp实现展示1个或多个文字标签,可点击切换选中、不选中的状态

前言 uni-tag是uni-app框架提供的一个标签组件&#xff0c;用于展示标签或者标记某个元素。它可以在视图中用来显示一组标签&#xff0c;并且支持自定义样式和事件。 提示&#xff1a;以下是本篇文章正文内容&#xff0c;下面案例可供参考 uni-notice-bar组件具有以下特点&…