环境部署不再赘述
本文针对 20年云计算国赛卷容器云chinaskillmall商城系统部署
镜像通用yum源:
/etc/yum.repos.d/dockerfile.repo
[mall]
name=mall
baseurl=ftp://192.168.200.5/ChinaskillMall/gpmall-repo # master节点资源包 源
gpgcheck=0
enabled=1
[centos]
name=centos
baseurl=ftp://192.168.100.10/centos # controller节点centos源 可有可无
gpgcheck=0
enabled=1
下述所有‘镜像地址’全是以centos镜像为基础制作
请查看自己镜像仓库地址填写
创建Redis目录
目录下 当有Dockerfile所需文件
yum源
FROM 192.168.200.5/library/centos:centos7.5.1804
MAINTAINER YS
RUN rm -rf /etc/yum.repos.d/
ADD dockerfile.repo /etc/yum.repos.d/
RUN yum install -y redis \
&& sed -i 's!bind 127.0.0.1!bind 0.0.0.0!g' /etc/redis.conf \
&& sed -i 's!protected-mode yes!protected-mode no!g' /etc/redis.conf
EXPOSE 6379
CMD ["redis-server","/etc/redis.conf"]
创建mariadb目录,添加dockerfile所需文件到当前目录
setup.sh
yum源
gpmall.sql
FROM 镜像地址
RUN rm -rf /etc/yum.repos.d/
ADD dockerfile.repo /etc/yum.repos.d/
ADD setup.sh gpmall.sql /opt/
RUN yum install -y mariadb mariadb-server \
&& sed -i '12a port=8066' /etc/my.cnf.d/server.cnf \ ##因为Java项目中mysql用的8066,即修改
mariadb端口
&& chmod +x /opt/setup.sh \
&& bash /opt/setup.sh
ENV LC_ALL en_US.UTF-8
EXPOSE 8066
CMD ["mysqld_safe","--user=root"]
编写脚本文件,初始化数据库,设置用户密码,创建库,导入sql文件
#!/bin/bash
mysql_install_db
--uesr=rootmysqld_safe --user=root &
sleep 3
mysqladmin -uroot password '123456'mysql -uroot -p123456 -e "grant all privileges on *.* to 'root'@'%' identified by '123456';"
mysql -uroot -p123456 -e "set names utf8;create database gpmall character set utf8;use gpmall;source /opt/gpmall.sql;"
创建zookeeper目录,添加dockerfile所需文件到当前目录
yum源
zookeeper-3.4.14.tar.gz
FROM 镜像地址
RUN rm -rf /etc/yum.repos.d/
ADD dockerfile.repo /etc/yum.repos.d/
ADD zookeeper-3.4.14.tar.gz /opt/
RUN yum install -y java-1.8.0-* \
&& mv /opt/zookeeper-3.4.14/conf/zoo_sample.cfg /opt/zookeeper-3.4.14/conf/zoo.cfg
EXPOSE 2181
CMD ["sh","-c","/opt/zookeeper-3.4.14/bin/zkServer.sh start && tail -f /etc/shadow"]
创建kafka目录,添加dockerfile所需文件到当前目录
yum源
zookeeper-3.4.14.tar.gz
kafka_2.11-1.1.1.tgz
##编写Dockerfile文件
FROM 镜像地址
MAINTAINER YUSEN
RUN rm -rf /etc/yum.repos.d/*
ADD dockerfile.repo /etc/yum.repos.d/
ADD zookeeper-3.4.14.tar.gz kafka_2.11-1.1.1.tgz /opt/
RUN yum -y install java-1.8.0-* \
&& mv /opt/zookeeper-3.4.14/conf/zoo_sample.cfg /opt/zookeeper-3.4.14/conf/zoo.cfg
EXPOSE 9092
CMD ["sh","-c","/opt/zookeeper-3.4.14/bin/zkServer.sh start && /opt/kafka_2.11-1.1.1/bin/kafka-server-start.sh /opt/kafka_2.11-1.1.1/config/server.properties"]
此镜像集成jar镜像,安装了Java环境,不再单独制作jar镜像
创建Nginx目录,添加dockerfile所需文件到当前目录
yum源
shopping-provider-0.0.1-SNAPSHOT.jar
user-provider-0.0.1-SNAPSHOT.jar
gpmall-shopping-0.0.1-SNAPSHOT.jar
gpmall-user-0.0.1-SNAPSHOT.jar
dist
#Dockerfile
FROM 镜像地址
RUN rm -rf /etc/yum.repos.d/
ADD ./*.jar setup.sh /root/
ADD dockerfile.repo /etc/yum.repos.d/
RUN yum install -y nginx java-1.8.0-* \
&& sed -i '1a location /shopping { proxy_pass http://127.0.0.1:8081;}'
/etc/nginx/conf.d/default.conf \ #折行有点问题,应与下面格式一样,自行更改
&& sed -i '2a location /user { proxy_pass http://127.0.0.1:8082;}' /etc/nginx/conf.d/default.conf \
&& sed -i '3a location /cashier { proxy_pass http://127.0.0.1:8083;}' /etc/nginx/conf.d/default.conf \
&& chmod +x /root/setup.sh
&& rm -rf /usr/share/nginx/html/*
ADD dist /usr/share/nginx/html/
EXPOSE 80 8081 8082 8083
CMD ["nginx","-g","daemon off;"]
sed -i .....配置Nginx反向代理
编写脚本文件,启动jar包
#!/bin/bash
nohup java -jar /root/shopping-provider-0.0.1-SNAPSHOT.jar &
sleep 5
nohup java -jar /root/user-provider-0.0.1-SNAPSHOT.jar &
sleep 5
nohup java -jar /root/gpmall-shopping-0.0.1-SNAPSHOT.jar &
sleep 5
nohup java -jar /root/gpmall-user-0.0.1-SNAPSHOT.jar &
sleep 5
至此商城系统所需镜像编写完成
编写完成后在当前目录执行构建命令
docker build -t (镜像名) .(点,表当前目录)
docker build -t nginx:v1.1 .
构建出现successful后打标签,上传至你的私有harbor仓库
docker tag 制作的镜像名 harbor仓库打标签规则
docker tag nginx:v1.1 192.168.200.5/library/chinaskill-nginx:v1.1
之后推到仓库
docker push 新标签
docker push 192.168.200.5/library/chinaskill-nginx:v1.1
全推上去后创建新目录编排部署商城系统
mkdir gpmall-shop
cd gpmall-shop
vi docker-compose.yaml
version: '3.8'
services:
mysql.mall:
container_name: mall-db
image: 192.168.200.5/library/chinaskill-mariadb:v1.1
ports:
- 18066:8066
redis.mall:
container_name: mall-redis
image: 192.168.200.5/library/chinaskill-redis:v1.1
ports:
- 16379:6379
zk1.mall:
container_name: mall-zookeeper
image: 192.168.200.5/library/chinaskill-zookeeper:v1.1
ports:
- 12181:2181
kafka1.mall:
container_name: mall-fakfa
image: 192.168.200.5/library/chinaskill-kafka:v1.1
ports:
- 19092:9092
nginx.mall:
depends_on:
- db.mall
- redis.mall
- zookeeper.mall
- kafka.mall
container_name: mall-nginx
image: 192.168.200.5/library/chinaskill-nginx:v1.1
ports:
- 83:80
- 1443:443
command: ["sh","-c","/root/setup.sh && nginx && tail -f /etc/shadow"]
注意,编排这里坑很多
像数据库的端口,那个Jar包用的8066,离天之大普
还有kafka和zookeeper的服务名
zk1 kafka1
之所以这样命令,他jar包里用的是zookeeper和kafka集群,序列命名的,咱只是部署了一台,大坑大坑!!!满是辛酸泪
zk1.mall kafka1.mall 切记
nginx又加了command,编排时启动jar包,会干掉Nginx镜像的command命令,所以加上Nginx启动命令,tail -f 加个进程避免容器挂,不加其实我应该也没问题,加了稳妥吧哈哈
还有就是Nginx的端口映射,maser节点的话80会被harbor占了,自行修改。
docker-compose up -d
出现五个 done后可根据当前节点ip地址加Nginx端口进行浏览器访问

嗯...昨晚部署好的,手机拍的照不太清晰没截图,云主机销了搭K8S了,嗯部署完是这个界面就没毛病
如果打开只有h5标题1+x则jar包启动问题,去Nginx容器里排错
如果有静态首页框架,和登录界面,但没内容则数据库问题,依然在Nginx容器里看jar包的noout日志进行排错
一般不会有noout日志,在root目录下,如果没有,则kill掉所有jar包,重新启动setup脚本
./setup.sh则会出现
嗯.....我觉得我写的这么详细应该不会报错了吧。有问题可以交流,整个下来我花了一周时间,说起来可能有些笑话,但是理论应用于实践后的成果与不断排错路上的艰辛在昨晚那刻全然不见,满是内心欢愉!
对于不懂Java的真是不友好这玩意,yeh, is me.
首发CSDN,文章编排尚有欠缺,见谅!
因网上的各种这种文章写的太简略仓促,自己报的错在网上都无解答,遂有此文!感谢阅读!
这里是Ruby新手。完成一些练习后碰壁了。练习:计算一系列成绩的字母等级创建一个方法get_grade来接受测试分数数组。数组中的每个分数应介于0和100之间,其中100是最大分数。计算平均分并将字母等级作为字符串返回,即“A”、“B”、“C”、“D”、“E”或“F”。我一直返回错误:avg.rb:1:syntaxerror,unexpectedtLBRACK,expecting')'defget_grade([100,90,80])^avg.rb:1:syntaxerror,unexpected')',expecting$end这是我目前所拥有的。我想坚持使用下面的方法或.join,
目录1.漏洞简介2、AJP13协议介绍Tomcat主要有两大功能:3.Tomcat远程文件包含漏洞分析4.漏洞复现 5、漏洞分析6.RCE实现的原理1.漏洞简介2020年2月20日,公开CNVD的漏洞公告中发现ApacheTomcat文件包含漏洞(CVE-2020-1938)。ApacheTomcat是Apache开源组织开发的用于处理HTTP服务的项目。ApacheTomcat服务器中被发现存在文件包含漏洞,攻击者可利用该漏洞读取或包含Tomcat上所有webapp目录下的任意文件。该漏洞是一个单独的文件包含漏洞,依赖于Tomcat的AJP(定向包协议)。AJP自身存在一定缺陷,导致存在可控
项目介绍随着我国经济迅速发展,人们对手机的需求越来越大,各种手机软件也都在被广泛应用,但是对于手机进行数据信息管理,对于手机的各种软件也是备受用户的喜爱小学生兴趣延时班预约小程序的设计与开发被用户普遍使用,为方便用户能够可以随时进行小学生兴趣延时班预约小程序的设计与开发的数据信息管理,特开发了小程序的设计与开发的管理系统。小学生兴趣延时班预约小程序的设计与开发的开发利用现有的成熟技术参考,以源代码为模板,分析功能调整与小学生兴趣延时班预约小程序的设计与开发的实际需求相结合,讨论了小学生兴趣延时班预约小程序的设计与开发的使用。开发环境开发说明:前端使用微信微信小程序开发工具:后端使用ssm:VU
我对如何计算通过{%assignvar=0%}赋值的变量加一完全感到困惑。这应该是最简单的任务。到目前为止,这是我尝试过的:{%assignamount=0%}{%forvariantinproduct.variants%}{%assignamount=amount+1%}{%endfor%}Amount:{{amount}}结果总是0。也许我忽略了一些明显的东西。也许有更好的方法。我想要存档的只是获取运行的迭代次数。 最佳答案 因为{{incrementamount}}将输出您的变量值并且不会影响{%assign%}定义的变量,我
给定一个nxmbool数组:[[true,true,false],[false,true,true],[false,true,true]]有什么简单的方法可以返回“该列中有多少个true?”结果应该是[1,3,2] 最佳答案 使用转置得到一个数组,其中每个子数组代表一列,然后将每一列映射到其中的true数:arr.transpose.map{|subarr|subarr.count(true)}这是一个带有inject的版本,应该在1.8.6上运行,没有任何依赖:arr.transpose.map{|subarr|subarr.in
给定两个大小相等的数组,如何找到不考虑位置的匹配元素的数量?例如:[0,0,5]和[0,5,5]将返回2的匹配项,因为有一个0和一个5共同;[1,0,0,3]和[0,0,1,4]将返回3的匹配项,因为0有两场,1有一场;[1,2,2,3]和[1,2,3,4]将返回3的匹配项。我尝试了很多想法,但它们都变得相当粗糙和令人费解。我猜想有一些不错的Ruby习惯用法,或者可能是一个正则表达式,可以很好地回答这个解决方案。 最佳答案 您可以使用count完成它:a.count{|e|index=b.index(e)andb.delete_at
Ruby中如何“一般地”计算以下格式(有根、无根)的JSON对象的数量?一般来说,我的意思是元素可能不同(例如“标题”被称为其他东西)。没有根:{[{"title":"Post1","body":"Hello!"},{"title":"Post2","body":"Goodbye!"}]}根包裹:{"posts":[{"title":"Post1","body":"Hello!"},{"title":"Post2","body":"Goodbye!"}]} 最佳答案 首先,withoutroot代码不是有效的json格式。它将没有包
目标我正在尝试计算自给定日期以来周的距离,而无需跳过任何步骤。我更喜欢用普通的Ruby来做,但ActiveSupport无疑是一个可以接受的选择。我的代码我写了以下内容,这似乎可行,但对我来说似乎还有很长的路要走。require'date'DAYS_IN_WEEK=7.0defweeks_sincedate_stringdate=Date.parsedate_stringdays=Date.today-dateweeks=days/DAYS_IN_WEEKweeks.round2endweeks_since'2015-06-15'#=>32.57ActiveSupport的#weeks
技术选型1,前端小程序原生MINA框架cssJavaScriptWxml2,管理后台云开发Cms内容管理系统web网页3,数据后台小程序云开发云函数云开发数据库(基于MongoDB)云存储4,人脸识别算法基于百度智能云实现人脸识别一,用户端效果图预览老规矩我们先来看效果图,如果效果图符合你的需求,就继续往下看,如果不符合你的需求,可以跳过。1-1,登录注册页可以看到登录页有注册入口,注册页如下我们的注册,需要管理员审核,审核通过后才可以正常登录使用小程序1-2,个人中心页登录成功以后,我们会进入个人中心页我们在个人中心页可以注册人脸,因为我们做人脸识别签到,需要先注册人脸才可以进行人脸比对,进
如何计算两个字符串之间的字符交集?例如(假设我们有一个名为String.intersection的方法):"abc".intersection("ab")=2"hello".intersection("hallo")=4好的,男孩女孩们,感谢你们的大量反馈。更多示例:"aaa".intersection("a")=1"foo".intersection("bar")=0"abc".intersection("bc")=2"abc".intersection("ac")=2"abba".intersection("aa")=2一些补充说明:维基百科定义intersection如下:Int