💝💝💝欢迎来到我的博客,很高兴能够在这里和您见面!希望您在这里可以感受到一份轻松愉快的氛围,不仅可以获得有趣的内容和知识,也可以畅所欲言、分享您的想法和见解。
推荐:Linux运维老纪的首页,持续学习,不断总结,共同进步,活到老学到老
导航剑指大厂系列:全面总结 运维核心技术:系统基础、数据库、网路技术、系统安全、自动化运维、容器技术、监控工具、脚本编程、云服务等。
常用运维工具系列:常用的运维开发工具, zabbix、nagios、docker、k8s、puppet、ansible等
数据库系列:详细总结了常用数据库 mysql、Redis、MongoDB、oracle 技术点,以及工作中遇到的 mysql 问题等
懒人运维系列:总结好用的命令,解放双手不香吗?能用一个命令完成绝不用两个操作
数据结构与算法系列:总结数据结构和算法,不同类型针对性训练,提升编程思维,剑指大厂
非常期待和您一起在这个小小的网络世界里共同探索、学习和成长。💝💝💝 ✨✨ 欢迎订阅本专栏 ✨✨
综合项目:
技能目标:
-
掌握 Docker 环境的部署
-
会搭建 Gitlab 及上传代码到 Gitlab 仓库
-
会通过 Docker-Compose 生成基础镜像及启动
对应容器
-
会配置 Java 所需的 Jenkins 环境1.1 案例分析
1.1.1 案例概述
某公司最近开发了一套大型票务类电商网站,被命名为大觅网。大觅网为用户提供了通
过 Web 界面购票的服务,主要功能包括:商品搜索、用户注册登录、商品详情、选座、下
单等功能。大觅网的整个部署过程会用到云计算的相关知识,包括 OpenStack 的多节点部
署、OpenStack 网络路由创建和云主机创建;也会用到 Docker 容器的相关知识,包括
Dockerfile 制作镜像、Docker Compose 多容器关联制作等;还会用到 Jenkins 自动构建发
布大觅网项目。整个项目采用多知识相结合,共同协调配合来完成部署。本章主要介绍大觅
网的基础环境部署。
1.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 语句进行数据的操作。对前端业务来说,可以大幅
降低开发难度,提升开发速度。
1.1.3 案例环境
1. 本案例实验环境
本案例基于教材《OpenStack 云平台实战》第三、四章中 OpenStack 多节点部署和云
主机创建。在 OpenStack 上创建两台虚拟云主机作为实验环境,具体云主机环境配置如表
1-1 所示。
表 1-1 大觅网搭建环境
主机 | 操作系统 | 主机名/IP 地址 | 主要软件 |
虚拟云主机 | CentOS 7.3-x86_64 | damiwang/192.168.9.18 | OpenStack、Docker 等 |
虚拟云主机 | CentOS 7.3-x86_64 | gitlab/192.168.9.13 | Gitlab |
2. 案例架构
图 1.1 大觅网技术架构图
技术架构用来描述大觅网整体业务实现采用的具体技术。大觅网的技术架构如图 1.1 所
示。
大觅网整体采用 Docker 的方式进行项目环境搭建和配置。
采用 MySQL 作为大觅网数据库,并采用集群方式进行配置和部署。
为了能满足数据库灵活扩展的要求,采用 MyCat 数据库中间件管理数据库集群。
为了满足商品数据的查询性能和精准搜索的功能性需求,大觅网使用 Elasticsearch 集
群实现商品信息的存储和搜索。
为了更好地满足性能要求,将部分常用数据缓存在 Redis 中。
采用 Spring Cloud 微服务架构实现微服务治理,将应用拆分为提供者、消费者、网关
及注册中心。
在提供者和消费者的具体实现上,采用 Spring Cloud 整套解决方案,包括使用 Fegin
进行接口管理、使用 Hystrix 进行容错和监控、使用 Ribbon 实现负载均衡等。
项目采用前后端分离技术,将数据的业务逻辑处理和展示分开,将数据展示独立为前端
项目。前后端采用 Nginx 反向代理实现接口访问。
为了节省项目部署时间,项目整体采用 Jenkins 实现程序的自动发版,实现持续集成,
也可简写为 CI(Continuous Integration)。
大觅网应用架构是采用基于微服务设计思想的模块化开发,针对不同的业务配置了相应
的数据库,大觅网的数据库结构组成如图 1.2 所示。
图 1.2 数据库架构图
大觅网数据库包括 6 个独立的数据库,分别为基础库、节目库、订单库、支付库、排
期库和用户库。
大觅网数据库在设计过程中采用 MyCat 实现水平分库,将订单库做进一步的拆分,拆
分后的三个子订单库分别为订单库 1、订单库 2、订单库 3,三个子订单库的结构相同。
3. 案例环境用到的用户名和密码
表 1-2 是大觅网案例中预设的用户及密码。
表 1-2 案例中使用到的用户名和密码
类型 | 用户名 | 密码 |
Gitlab | root | bdqn123456 |
MySQL | root | 123456 |
Jenkins | admin | 123456 |
Nexus | admin | 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)通过浏览器访问测试大觅网。
1.2 案例实施
1.2.1 基础环境配置
实验环境中的两台虚拟云主机都需要执行以下操作:配置对应的主机名、安装常用软件、
关闭防火墙和禁用 SELinux。以主机名为 damiwang 的虚拟云主机为例,具体操作如下所示。
[root@localhost ~]# hostnamectl set-hostname damiwang
[root@localhost ~]# bash
[root@damiwang ~]# yum -y install vim net-tools wget lrzsz gcc make unzip
[root@damiwang ~]# sed -i '/^SELINUX=/s/enforcing/disabled/' /etc/selinux/config
[root@damiwang ~]# setenforce 0
[root@damiwang ~]# systemctl stop firewalld
[root@damiwang ~]# systemctl disable firewalld
Removed symlink /etc/systemd/system/basic.target.wants/firewalld.service.
Removed symlink /etc/systemd/system/dbus-org.fedoraproject.FirewallD1.service.
需要注意:不同的云主机,主机名在设置时不同。
1.2.2 Gitlab 部署及大觅网源码上传
在整个大觅网基础环境部署中,Gitlab 代码仓库是一个独立的存在,本章中单独配置在
一台虚拟云主机上,同时还需要上传大觅网程序源码方便基础镜像的构建。
1. 安装配置 Gitlab
在 Gitlab 虚拟云主机上安装 Gitlab 代码仓库。Gitlab 有多种安装方式,可通过 YUM 安
装,也可通过 RPM 手动安装。由于 Gitlab 安装包比较大,有 700 多 M,所以推荐使用发
布包内提供的离线 RPM 包进行安装。具体的操作步骤是先将离线 RPM 包上传,然后执行
安装操作,具体操作命令如下所示。
[root@gitlab ~]# yum -y install policycoreutils-python
[root@gitlab ~]# rpm -ivh gitlab-ce-12.9.0-ce.0.el7.x86_64.rpm
修改配置文件/etc/gitlab/gitlab.rb,将 external_url 配置成 Gitlab 云主机 IP 地址。
[root@gitlab ~]# vim /etc/gitlab/gitlab.rb
external_url ‘http://192.168.9.13’
//将 external_url 配置成 Gitlab 云主机 IP 地址
重新配置 Gitlab。
[root@gitlab ~]# gitlab-ctl reconfigure
2. 通过浏览器访问 Gitlab
在浏览器中,访问 http://192.168.9.13,请参考表 1-2 中用户的相关信息设置密码和确
认密码,并单击“Change your password”按钮。
界面效果如图 1.3 所示。
图 1.3 Gitlab 首次访问界面单击“Change your password”按钮之后,会提示输入登录信息。“Username”输入框中
输入“root”,“Password”输入框中输入刚设置的值,单击“Sign in”按钮登录到 Gitlab,如图
1.4 所示。
图 1.4 Gitlab 登录界面
3. 创建项目并将代码提交到仓库内
单击“Create a project”按钮,创建 base-consumer 项目。将“Project name”配置成
“base-consumer”,在“Project description”输入框中填写项目的备注信息(此配置项是一个
可选项),最后单击“Create project”按钮创建该项目。页面效果如图 1.5 所示。
图 1.5 创建 base-consumer 项目
在本地 Windows 机器安装 Git-2.26.0-64-bit.exe 文件,该文件在大觅网发布包内有提
供。然后在本地 Windows 的“开始”菜单中寻找新安装的程序,使用“Git bash”交互工具将项
目代码提交到 base-consumer 仓库中,具体操作命令如下所示。发布包内大觅网后端项目
程序源码保存在“大觅网\项目源码\后端源码\dm-sprint2.0”目录下。
git config --global user.name "Administrator"
git config --global user.email "admin@example.com"
cd e:/tmp
//E 盘创建 tmp 目录
git clone http://192.168.9.13/root/base-consumer.git
//输入用户和密码
cd base-consumer
//将源码 base-consumer 目录内的内容拷贝到本地 Windows 当前目录
git add .
git commit -m "base-consumer"
git push -u origin master至此 base-consumer 项目提交完成,如图 1.6 所示。
图 1.6 项目提交成功
在执行“git add”命令时,如果该命令执行失败,将出现如下警告信息。
warning: LF will be replaced by CRLF in .idea/compiler.xml.
The file will have its original line endings in your working directory
warning: LF will be replaced by CRLF in .idea/encodings.xml.
这是因为 Linux 系统和 Windows 系统的回车换行符存在差异而导致的,可采用禁用自
动换行的方式来解决。
rm -rf .git
git config --global core.autocrlf false
大觅网是一个采用了微服务架构的综合项目,关于业务的微服务项目有 16 个。在大觅
网发布包内“大觅网-new\项目源码\后端源码\dm-sprint2.0”路径下,这些项目包括:
base-consumer、base-provider、common、env-project、fileManager、item-consumer、
item-provider、
i
tem-search、order-consumer、order-provider、pay-consumer、pay-provider、
scheduler-consumer、scheduler-provider、user-consumer、user-provider。
注意:base-consumer 项目提交完成之后,需要将上述其他 15 个项目采用相同的方法
依次提交到 Gitlab 仓库内。
1.2.3 通过 Docker 部署 Tomcat、JDK、CentOS7-ssh
以下操作都是在 damiwang 云主机上执行。
1. 安装 Docker 环境并启动
[root@damiwang ~]# yum install -y yum-utils lvm2 device-mapper-persistent-data
[root@damiwang
~]#
yum-config-manager
--add-repo
https://mirrors.ustc.edu.cn/docker-ce/linux/centos/docker-ce.repo
[root@damiwang ~]# yum -y install docker-ce
[root@damiwang ~]# mkdir /etc/docker
[root@damiwang ~]# cat << EOF > /etc/docker/daemon.json
{
"registry-mirrors": [
"https://dockerhub.azk8s.cn",
"https://hub-mirror.c.163.com"
]
}
EOF
[root@damiwang ~]# systemctl start docker
[root@damiwang ~]# systemctl enable docker
Created
symlink
from
/etc/systemd/system/multi-user.target.wants/docker.service
to
/usr/lib/systemd/system/docker.service.
2. 构建基础镜像 Tomcat、JDK、CentOS7-ssh
通过 docker pull 命令拉取 centos:7 镜像,该镜像是构建 Tomcat、JDK、
CentOS7-ssh 三个镜像的基础。拉取命令如下所示。
[root@damiwang ~]# docker pull centos:7
7: Pulling from library/centos
ab5ef0e58194: Pull complete
Digest: sha256:4a701376d03f6b39b8c2a8f4a8e499441b0d567f9ab9d58e4991de4472fb813c
Status: Downloaded newer image for centos:7
docker.io/library/centos:7
在 damiwang 云主机上,创建目录/home/px2/envdm,上传 ssh、jdk8u171、tomcat7
三个目录,这三个目录内包含对应的 Dockerfile、配置文件及软件包等,都保存在所提供的
大觅网发布包内,其路径为“大觅网\base 镜像包”。使用如下命令构建 Docker 镜像。
[root@damiwang ~]# mkdir -p /home/px2/envdm //之后上传 ssh、jdk8u171、tomcat7 三个目录
[root@damiwang ~]# cd /home/px2/envdm/ssh/
[root@damiwang ssh]# docker build -t yi/centos7-ssh .
[root@damiwang ssh]# cd /home/px2/envdm/jdk8u171
[root@damiwang jdk8u171]# docker build -t yi/centos7-jdk8u171 .
[root@damiwang jdk8u171]# cd /home/px2/envdm/tomcat7
[root@damiwang tomcat7]# docker build -t yi/centos7-tomcat7 .
基础镜像容器及后面要部署的业务容器使用了新创建的独立网络,在创建网络envdm 之前,需要开启 ipv4 转发功能,具体操作命令如下所示。
[root@damiwang ~]# echo "net.ipv4.ip_forward=1">> /usr/lib/sysctl.d/00-system.conf
[root@damiwang ~]# systemctl restart network
创建 envdm 网络的具体命令如下所示。
[root@damiwang ~]# docker network create --subnet=192.168.10.0/24 envdm
d54069a3b42ab2dd0e65c511a1c3569bd5ffef0dce8ee35afeb861e73b0f0efd
1.2.4 搭建基础服务容器
为了方便 Docker 容器的管理,安装 Shipyard 相关容器,通过 Shipyard 可实现对 Docker
容器的 Web 方式管理,从而可以大大简化 Docker 容器的管理难度。同时,采用
docker-compose 方式安装大觅网的一些基础镜像。
整个基础服务相关的操作都是在主机名为 damiwang 的云主机上执行的。
1. 安装启动 Shipyard
Shipeyard 是一个开源的 Docker 容器管理工具,它能够管理 Docker 的资源,包括容
器,主机等等。支持节点动态集群,同时可扩展集群规模。通过可视化的 Web UI 对容器进
行管理和监控,还提供了在线 console 终端等功能。
拉取 Shipyard 相关镜像,具体命令如下所示。
[root@damiwang ~]# docker pull shipyard/shipyard
[root@damiwang ~]# docker pull swarm
[root@damiwang ~]# docker pull shipyard/docker-proxy
[root@damiwang ~]# docker pull alpine
[root@damiwang ~]# docker pull microbox/etcd
[root@damiwang ~]# docker pull rethinkdb
下面是启动 Shipyard 相关容器的命令。
[root@damiwang ~]# docker run -ti -d --restart=always --name shipyard-rethinkdb rethinkdb
//Shipyard 使用 RethinkDB 做为数据存储工具
[root@damiwang ~]# docker run -ti -d -p 4001:4001 -p 7001:7001 --restart=always --name
shipyard-discovery microbox/etcd:latest -name discovery
//Etcd 作 为 服 务 发 现 工
具,它是一种键值存储,命令的最后“-name discovery”是执行到容器内部的命令
[root@damiwang ~]# docker run -ti -d -p 2375:2375 --hostname=$HOSTNAME --restart=always
--name shipyard-proxy -v /var/run/docker.sock:/var/run/docker.sock -e PORT=2375
shipyard/docker-proxy:latest
//Docker 代理服务,将请求从 TCP 转发到 Unix 套接字,参数-e
是在容器内设置环境变量
[root@damiwang ~]# docker run -ti -d --restart=always --name shipyard-swarm-manager
swarm:latest manage --host tcp://0.0.0.0:3375 etcd://192.168.9.18:4001
//Swarm 管理节点,
镜像“swarm:latest”后面的是运行在容器内的命令,下同
[root@damiwang ~]# docker run -ti -d --restart=always --name shipyard-swarm-agent
swarm:latest join --addr 192.168.9.18:2375 etcd://192.168.9.18:4001 //Swarm Agent 节点
[root@damiwang ~]# docker run -ti -d --restart=always --name shipyard-controller --link
shipyard-rethinkdb:rethinkdb
--link
shipyard-swarm-manager:swarm
-p
8080:8080
shipyard/shipyard:latest server -d tcp://swarm:3375
//Shipyard 管理工具
2. 安装基础服务
基础服务包括:Redis、Tengine、ELK、Kafka、Nexus、MySQL、Sonar、RabbitMQ、
Mycat、Jenkins,这些基础服务在发布包内的路径为:“大觅网\base 镜像包”。上传基础服
务的目录到/home/px2/envdm 下,记住:要将 docker-compose.yml 文件也一并上传。各基
础服务目录内包括:Dockerfile、程序包、配置文件等。
在正式开始部署基础服务之前,将其中 Kafka、Kibana、Logstash、Sonar 目录下的配
置文件内对应的 IP 修改为自己实验环境的 IP。可采用 grep 命令查找过滤,个别目录内不
只一个文件需要修改。如果采用与本案例相同的 IP 地址,则不需要修改。
[root@damiwang ~]# cd /home/px2/envdm
[root@damiwang envdm]# grep -r 192.168 Kafka/
Kafka/server.properties:advertised.listeners=PLAINTEXT://192.168.9.18:9091
[root@damiwang envdm]# grep -r 192.168 Kibana/
Kibana/kibana.yml:elasticsearch.url: "http://192.168.9.18:9200"
[root@damiwang envdm]# grep -r 192.168 Logstash/
Logstash/logstash.conf:
bootstrap_servers => ["192.168.9.18:9091"]
Logstash/logstash.conf:
hosts=> ["192.168.9.18:8200"]
Logstash/logstash.yml:xpack.monitoring.elasticsearch.url: http://192.168.9.18:9200
[root@damiwang envdm]# grep -r 192.168 Sonar/
Sonar/sonar.properties:sonar.jdbc.url=jdbc:mysql://192.168.9.18:3306/sonar?useUnicode=true&ch
aracterEncoding=utf8&rewriteBatchedStatements=true&useConfigs=maxPerformance&useSSL=fa
lse
另外,CentOS 7.3 系统默认是没有安装 docker-compose 命令的,可将发布包内提供
的 docker-compose 程序上传到/usr/local/bin/目录下,并且为 docker-compose 文件分配可
执行权限。
[root@damiwang ~]# chmod +x /usr/local/bin/docker-compose
通过一条 Docker Compose 命令完成基础服务容器的部署安装。
[root@damiwang ~]# cd /home/px2/envdm
[root@damiwang envdm]# docker-compose up -d整个部署过程会持续较长时间。如果在部署过程中某个基础服务报错,可查看容器日志
信息及对应的 Dockerfile 进行排错。
1.2.5 基础服务配置
基于基础镜像启动的容器,还需要进行一些后续的配置。Shipyard 登录查看现有创建
的容器信息;MySQL 通过 Shipyard 设置权限及工具导入数据库结构和初始化数据;Jenkins
进行初始化配置。
1. Shipyard 登录和容器管理
Shipyard 安装完成,可以通过浏览器访问 http://192.168.9.18:8080,打开登录页面,
如图 1.7 所示。默认用户名是 admin,默认密码是 shipyard。
图 1.7 Shipyard 登录界面
登录后可进入 Shipyard 容器管理界面,如图 1.8 所示。Shipyard 可实现对容器的常规
管理,比如容器的启动、停止、查看日志等,还可以进行创建新容器及管理镜像等操作。
图 1.8 Shipyard 容器管理界面
2. MySQL 容器权限赋予和库导入
在容器管理界面找到 MySQL 容器,然后到该容器最右侧单击“小扳手”图标->“Console”
选项,进入 MySQL 容器的 console 界面,单击方框后的“RUN”按钮,如图 1.9 所示。
图 1.9 通过 Shipyard 连接 MySQL 容器的 console 界面
在此界面下,执行设置 root 用户密码、赋予 root 用户远程访问权限,具体操作如下所
示。
[root@8a259364a8b6 mysql]# mysql -uroot -p
//默认密码为空直接回车
mysql> use mysql
Reading table information for completion of table and column names
You can turn off this feature to get a quicker startup with -A
Database changed
mysql> update user set password=password("123456") where user='root';
Query OK, 4 rows affected (0.00 sec)
Rows matched: 4 Changed: 4 Warnings: 0
mysql> grant all privileges on *.* to root@'%' identified by '123456' with grant option;
Query OK, 0 rows affected (0.00 sec)
在
发
布
包
内 “\software\Navicat for MySQL” 目 录 下 , 双 击
“navicat_trial_11.1.20.0.1449226634.exe”文件,安装 Navicat for MySQL 工具。安装完成
后,双击“PatchNavicat.exe”文件,对其进行破解打补丁。安装和破解完成后,使用 Navicat
for MySQL 工具连接到上面创建的 MySQL 容器,如图 1.10 所示。
图 1.10 远程连接 MySQL 容器
在新建的连接上,右键单击“打开连接”选项,再右键单击“新建数据库”选项。设置“数据
库名”为 dm_base,“字符集”为 utf8,“排序规则”为 utf8_general_ci,最后单击“确定”按钮完
成数据库的创建,如图 1.11 所示。
图 1.11 创建 dm_base 数据库
在刚创建的数据库“dm_base”上,首先右键单击“打开数据库”选项,然后右键单击“运行
SQL 文件”选项,选择要导入的创建表结构文件 dm_base.sql,单击“开始”按钮进行导入。
导入的大觅网 SQL 文件内包含有创建表结构和初始数据的 SQL 语句。大觅网数据库 SQL
文件在提供的发布包内路径为“大觅网\数据库结构\大觅网数据库脚本”,具体操作如图 1.12
所示。
图 1.12 导入 SQL 文件到库内
导入完成后,会输出“finished”和“successfully”提示信息,如图 1.13 所示。
1.13 数据库导入成功提示
大觅网所需要的数据库包括:dm_base、dm_item、dm_pay、dm_scheduler、dm_user、
dm_order、dm_order1、dm_order2、dm_order3。上面介绍了 dm_base 数据库的创建和
数据导入操作,其他的数据库也需要仿照 dm_base 进行创建和导入。这些数据库全部创建
和数据导入完成后,界面效果如图 1.14 所示。
图 1.14 数据库完成导入
3. Jenkins 基础配置
通过浏览器访问 URL 地址 http://192.168.9.18:8899,打开 Jenkins 配置向导,如图 1.15
所示。
图 1.15 首次访问 Jenkins 页面
由于 Jenkins 是采用容器的方式搭建,可通过如下命令登录 Jenkins 容器查看密码文件。
[root@damiwang envdm]# docker-compose exec jenkins bash
//注意所在目录
[root@8e5f32e18fa4 webapps]# cat /root/.jenkins/secrets/initialAdminPassword
476b4f82934b427db5f90b09a3bd7537
输入初始密码,单击“继续”按钮,进入插件安装界面。单击“安装推荐的插件”选项,如
图 1.16 所示。因为 Jenkins 的插件安装源是在国外,所以安装速度可能会比较慢,需要等
待的时间稍长。
图 1.16 Jenkins 插件安装选择界面
“安装推荐的插件”安装完成后,可能存在一些插件安装失败的情况,暂时可以不关注,
先进行后续的创建管理员用户操作。后期可通过 Jenkins 的插件管理安装这些缺失的插件。
在插件安装完成后,创建 Jenkins 管理员用户如图 1.17 所示。本案例中的用户名和密码,
需参考案例环境表格 1-2 内的值。
图 1.17 Jenkins 创建用户界面
单击“保存并完成”按钮后,进入“实例配置”页面,如图 1.18 所示。
图 1.18 Jenkins 实例配置
最后单击“保存并完成”,至此 Jenkins 基础配置完成。
4. Jenkins 插件配置
针对 Jenkins 插件安装缓慢,可以使用下面的方法,加速插件安装速度。
在 Jenkins 容器内设置 hosts 绑定,将插件更新地址解析到另外一个 Nginx 容器内。在
该 Nginx 容器内做域名跳转到清华的 Jenkins 源上面,从而实现直接访问清华 Jenkins 源地
址,加快访问速度。具体实现步骤如下所示。
(1)Jenkins 容器内绑定 hosts
[root@damiwang envdm]# docker-compose exec jenkins bash
//注意所在目录
[root@8e5f32e18fa4 webapps]# vi /etc/hosts
192.168.10.50
mirrors.jenkins-ci.org
//添加此行内容,之后退出容器
(2)创建跳转 Nginx 容器
[root@damiwang envdm]# vim /root/nginx.conf
//写入下面 nginx 配置内容
worker_processes 1;
events {
worker_connections 1024;
}
http {
include
mime.types;
default_type application/octet-stream;
access_log access.log;
error_log
error.log;
sendfile
on;
keepalive_timeout 65;
server
{
listen 80;
server_name mirrors.jenkins-ci.org;
location / {
proxy_redirect off;
proxy_pass https://mirrors.tuna.tsinghua.edu.cn/jenkins/;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
proxy_set_header Accept-Encoding "";
proxy_set_header Accept-Language "zh-CN";
}
index index.html index.htm index.php;
location ~ /\.
{
deny all;
}
access_log /tmp/access.log;
error_log
/tmp/error.log;
}
}
[root@damiwang envdm]# docker run -itd --name nginx-proxy --network envdm --ip
192.168.10.50 -p 10000:80 -v /root/nginx.conf:/etc/nginx/nginx.conf nginx
Unable to find image 'nginx:latest' locally
latest: Pulling from library/nginx
54fec2fa59d0: Pull complete
4ede6f09aefe: Pull complete
f9dc69acb465: Pull complete
Digest: sha256:86ae264c3f4acb99b2dee4d0098c40cb8c46dcf9e1148f05d3a51c4df6758c12
Status: Downloaded newer image for nginx:latest
83b1f1a8abe0be7e30b3febf6600a7b4e627820b772ffba7d3831735bddb91a0
(3)修改更新站点
在 Jenkins 图 形 界 面 中 , 依 次 单 击 “Manage Jenkins”->“ManagePlugins”->“Advanced”->“Update Site”选项,将原来“Update Site”下 URL 替换为如下地址:
https://mirrors.tuna.tsinghua.edu.cn/jenkins/updates/update-center.json
替换完成后,单击“Submit”按钮,如图 1.19 所示。
图 1.19 更新 Update Site
完成上述三步后,就可以到“Manage Plugins”内的“Available”选项卡内再次尝试安装插
件,安装速度会有明显提升。在安装推荐插件过程中,由于网络快慢原因,“Localization:
Chinese(Simplified)”插件可能有的安装成功,有的安装失败。到“Manage Plugins”内的
“Installed”选项卡检查该插件是否安装成功,如果安装失败,需要到“Avaliable”选项卡内
再次进行安装,勾选该插件后单击“Install without restart”按钮进行安装。如图 1.20 所示。
图 1.20 中文支持插件安装
“Localization: Chinese(Simplified)”插件安装完成后,需要重启 Jenkins 容器,Jenkins
界面内的相关按钮和链接都变为中文模式了。Jenkins 的重启操作命令如下所示。
[root@damiwang envdm]# docker-compose stop jenkins
Stopping envdm_jenkins_1 ... done
[root@damiwang envdm]# docker-compose start jenkins
Starting jenkins ... done
大觅网 Maven 项目的编译构建需要相应的插件。单击“系统管理”->“插件管理”->“可选插
件”选项卡,然后在右上角搜索框内分别搜索 maven、ssh 和 git 关键字,需要安装的插件包
括:
Maven Artifact ChoiceListProvider (Nexus)
Maven Metadata Plugin for Jenkins CI server
Maven Integration
Publish Over SSH
SSH
Git
勾选对应的插件后,分别单击“直接安装”按钮,等待插件完成安装。界面效果如图 1.21
所示。
图 1.21 插件安装完成界面
5. Jenkins 系统配置
Jenkins 服务是运行在容器内,而大觅网众多项目是运行在云主机上,要想通过 Jenkins
将项目发布到云主机上,需要设置实现通过 SSH 连接远程服务器构建发布项目。单击“系统
管理”->“系统配置”选项,进入界面后下拉定位到“Publish over SSH”组件。单击“新增”按钮,
输入远程服务器的别名、连接地址、用户名、远程连接目录后,单击“高级”按钮,勾选中“Use
password authentication,or use a different key”验证选项,输入远程服务器登录密码,即
云主机密码。同时,需要在 damiwang 云主机上面创建目录/home/px2/tools,如图 1.22 所
示。
图 1.22 Jenkins 远程连接配置
其中:Name 可以自由定义,Hostname 为远程主机地址,Username 为登录用户,
Remote Directory 为远程主机存在的目录。如果 damiwang 云主机上不存在该目录,则需
手动创建。然后,单击界面下方的“Test Configuration”按钮,显示 Success 代表连接成功,
最后单击左下角的“保存”按钮退出,如图 1.23 所示。
图 1.23 保存退出
6. Jenkins 全局工具配置
单 击 “ 系 统 管 理 ”->“ 全 局 工 具 配 置 ” 选 项 , 指 定 Maven 的 配 置 文 件 地 址 为 :
/root/.m2/settings.xml,如图 1.24 所示。
图 1.24 设置 Maven 配置文件地址
在 Maven 模块,单击“新增 Maven”按钮。Name 输入框中填写“maven3.6.0”,配置
MAVEN_HOME 为“/usr/local/apache-maven-3.6.0/”,如图 1.25 所示。
图 1.25 配置 Maven 目录
在 JDK 模块,单击“新增 JDK”按钮,Name 输入框中填写“jdk1.8”,JAVA_HOME 的值
为“/usr/local/java/jdk1.8.0_171”,如图 1.26 所示。
图 1.26 配置 JDK 目录
最后,单击左下角“保存”按钮退出。至此,关于大觅网基础环境的部署已经全部完成。