双 11 抢购项目部署文档
本文档中主要描述如何进行双 11 抢购项目的本地运行和部署。
1、环境说明
1) 服务器配置
内存 16G+(DDR3 或以上)
CPU 标准电压版 i5(3470+) 4 核单线程(双线程更好)
硬盘 500G 以上
说明:服务器指用于运行分布式微服架构项目依赖环境(如 Docker 环境)及
部署双 11 抢购项目的主机。
2) 开发机器配置
内存 8G+
CPU 标准电压版 i5+
双核+
硬盘 500G 以上
3) 运行及部署环境软件版本
2、本地运行环境搭建步骤
在双 11 抢购项目中,我们是由 Docker 将原有的一台服务器,隔离成为多个容器。
每一个容器部署一个双 11 抢购的服务。
双 11 抢购项目中的 Docker 应用架构如图 1 所示。
每一个长方形都代表一个 Docker 容器。
图 1:双 11 抢购项目 Docker 架构
1) 安装 Ubuntn 系统
安装完成后需要设置好固定 IP,如果需要使用 xshell 等远程连接,则需要安装 ssh 服务和解决 root 远程连接拒绝问题。
2) 安装 docker 和 shipyard
详见《Docker 入门》文档。
3) 下载基础 centos 镜像
docker pull centos
注:如果下载速度过慢,可以使用阿里云等镜像加速
4) 执行初始化脚本创建镜像
首先把 dockerfiles-master.zip 上传到 ubuntu 上并解压,
然后给目录env10.1 下的所有.sh 进行可执行权限的授权 授权:chmod 777 *.sh,
最后执行如下命令,通过 dockfile 来创建所有镜像:
./im-1.sh all n
注:脚本是全自动的运行的,不需要人工干预。但因下载内容较多,可能会因网络原因导致某些包下载失败。
如果出现资源包下载失败,首先需要确认是否下载链接地址是否已经失效。
如果下载链接失效,则需要将原来的下载链接替换成为互联网上最新的下载链接。
如果下载链接没有失效,则可按照以下步骤进行镜像的重新创建。
如果发现某个镜像创建失败,则需要单独重新创建这个镜像。单独创建镜像的命令如下:
./im-1.sh 镜像名称 n dockfile 路径
5) 执行初始化脚本创建容器,执行命令如下:
./InitContainers-2.sh init
只要之间镜像创建没有问题,生成容器基本上都没有问题,如果有问题,删除然后修改镜像,重新执行脚本创建容器。
3、相关配置和检查
在实际环境中,一般只对外暴露 80 端口访问,其余都由 nginx 代理处理,
但是在开发中为了方便调试,一般我们会开放一些端口,
比如 mysql 会设置用户名、密码及开放 3306 端口,这样就可以通过客户端远程查看;
Redis 也会设置密码和开放 6379 端口,方便 Redis 客户端远程操作。
1. 配置 mysql
通过 shipyard,选择 mysql 容器
进入控制台,点击 run。
执行 mysql 配置命令,登录 mysql,修改密码,授权,测试连接
其中 grant all privileges on *.* to root@'%' identified by '123456' with grant option 命令,是设置 MySQL 可以通过远程访问的。
如果不执行这个命令,那么通过远程客户端连接失败,如下图:
在执行这个命令的过程中,可能会发生这个错误: 报找不到 grant 这个命令。
此时需要进入到 mysql 容器中,执行命令: ln -s /usr/local/mysql/bin/mysql /usr/bin,如下图:
图 7: 设置可以执行 grant 命令
然后重新通过 shipyard 进入到 MySQL 的窗口中执行,此时就可以了,然
后可以通过客户端访问,如下图:
2. 配置 Redis 可以通过客户端远程访问
1) 开放 6379 端口,执行./run.sh redis 命令,其实就是删除掉之前的 Redis容器,并启动一个容器,在新生成的容器中开放 6379 端口映射
2) Redis.conf 文件中的 bind 127.0.0.1 修改成 bind 0.0.0.0
3) Redis.conf 文件中的 protected-mode yes 修改成 protected-mode no
Redis.conf 文件中修改 requirepass 123456 ,requirepass 默认是注释掉的,需要去掉,并设置密码。
4) 全部修改完成后,通过 stop、start 命令,重新启动当前容器。注意:此时不能通过 /run.sh redis 来创建容器,否则是新创建的容器,原来的修改
都被覆盖掉了,此时就能通过客户端远程连接 Redis 服务了。
注意:如果此时连接报失败,会提示失败信息:Connection error:Error communicating with HTTP proxy
这个问题是因为本地代理导致,一定要关闭掉本地 IE 浏览器代理,然后重新测试连接就没有问题了。
4、测试服务
1、配置 hosts
在开发机的 hosts 文件中配置如图 11 所示域名,其中 IP 为对应 Docker 宿主机的 IP。
注:hosts 文件中配置的域名为创建镜像时在 nginx 配置文件(dokerfiles master//src//Nginx-Tengine-2.2.1//local.com//nginx.conf)中所指定的域名
2、访问服务
打开浏览器访问配置的域名,如出现对应环境的管理界面,则代表环境部署成功。如访问 http://mq.local.com 来验证 mq 是否正常启动,正常界面如图 12 所示。
如果不能访问界面则可能服务没有启动,进入到 mq 对应的容器中的以下目录:/usr/local/apache-activemq-5.15.2/bin/ ,然后执行命令:./activemq
start。
执行完成在执行命令:ps -ef |grep mq 来查看,如果显示如下则代表mq 启动成功:
5、本地运行项目源码
打开 Idea 导入项目源码。
双 11 抢购项目采用微服务架构对项目进行了细粒度的拆分。拆分后,项目包含通用项目(通用依赖项目)、商品项目、订单项目、支付项目 5 大模块。
1、导入并运行数据库脚本,生成如图 14 所示的双 11 抢购项目的四个数据库。
2、打开 Idea 导入通用模块,使用 maven 方式对项目进行 install 和deploy,如图 15 所示。
3、在 idea 中以打开新窗口的方式导入用户项目,修改相应的数据库配置、Redis 配置、MQ 配置等。如图 16、17、18 所示。
4、启动用户项目 provider
图 20: 启动用户项目 consumer
其它项目启动同用户项目启动相同。
注意:因项目之间有依赖关系,启动项目时要首先启动 consumer 依赖的
provider。项目间的依赖图如图 21 所示。
6、部署项目
使用 maven install 命令对要发布的项目进行统一打包,jar 包列表如图 22所示。
2、执行脚本
切换到脚本所在目录,执行命令:./createContainer.sh 创建启动相关容器。然后修改脚本deploy-provider.sh,将里面的路径修改为上传到服务器的地址,如图 23 所示。
1、上传脚本和 jar 包
将脚本和生成的 jar 包(provider 和 consumer 服务)上传到服务器,如图 22 所示。
修改完成后,执行脚本:./deploy-provider.sh
最后执行脚本:./deploy.consumer.sh
注:脚本要按顺序执行,先执行脚本./deploy-provider.sh 创建提供者,然后在执行./deploy.consumer.sh 创建消费者。
如果提供者没有启动成功就启动消费者,那么消费者会启动失败,所以一般启动提供者之后会先在 dubbo 的管理界面查看到对应服务注册成功后,在去执行创建消费者。
有时候会比较慢,多刷新等待一会。
服务启动后,因为之前已经配置过域名映射,所以直接访问:http://da.local.com,可以查看注册的提供者和消费者:
然后就可以访问前端页面:http://192.168.9.151:8888/,效果如图: