00:00
好,前面呢,我们部署好了若1CLOUD的一些核心中间件,比如NAS配置中心,注册中心,Red缓存,包括马S数据库等等,接下来呢,我们就该部署若cloud中间这个微服务层,那微服务层呢,包含若cloud写的客户端,它呢是用view写的,是我们这个项目叫re UI。占用呢,这叫八零端口,然后呢,我们前端呢,会发请求给我们后台的网关getway,这个getway呢,是若cloud的这个引用叫若getway get外收到请求以后呢,会把所有的请求转发给后边的微服务层,那这个微服务呢,就是我们后边这些带端口的每一个模块,比如我们的系统模块,代码生成器,我们现在不用,以及定时任务文件服务监控中心等等这些。那我们接下来呢,就来部署这个微服务层,那整个部署呢,就应该像是这样的一个架构,首先我们整个若1CLOUD的架构是这样子的,在数据层我们已经部署好了mysl RA,但你的这个项目里边可能会有更多的数据层的中间件,还有微服务的治理层,比如NAS的注册中心,配置中心,我们也已经部署好了斯诺的一些流量控制保护,这个呢,若1CLOUD里边其实有引用,但是我们现在呢,也没有开启相关的功能,那么就不用管了,那我们最后就剩下我们的若一的微服务层,而这个微服务层呢,我们整个部署都是按照正常遵循字体向上的部署方式,先部署好底层模块,比如我们这个数据库层,再部署好我们的这个治理层,那接下来呢,我们再来部署好我们的微服务层,那微服务呢,这样部署好的微服务,我们就能验证它的可用性,因为它呢有可能要连上数据库或者red,我们就知道,哎,它到底有没有正常工作等。微服务层都部。
01:48
部署好了我们才部署洛伊的这个网关,网关部署好了,我们再来部署前端应用,所以我们的整个部署呢,按照这个架构,我们都是遵循自己向上部署啊,先来部署周边,周边的配套设施,部署完了以后呢,从微服务来到着部署啊,从微服务层再一直往上部署到前边。
02:08
那么就先来部署我们整个的微服务层,包含我们这几个,就是若1MODELS里边的这些,而且呢,若一其实在部署的时候呢,它已经把这一块叫docker。把我们的整个常用的东西呢,已经帮我们写好了docker的一些镜像该怎么打包了,因为我们整个应用要上门部署,最起码得先有一个docker镜像,有了这个镜像以后,我们K8S才能按照这个镜像产生我们一个pod来进行部署,而打包的这些这几个呢,都是中间这样的一些东西,我们已经都部署了,MY这个呢,我们是前端,后边我们再来部署。接下来呢,就是这个我们的微服务层,若一微服务层呢,就有这么多的东西,我们接下来就要部署每一个里边呢点进来,其实若1CLOUD呢,都已经写好了这个刀客费了,家里呢,你只需要你自己。
03:00
把我们整个项目来进行打包,打成一个可执行的炸包,放到这个炸文件夹里边,然后呢,使用docker,利用这个docker file构建镜像就行了,比如我们这个docker fair是怎么构建镜像的,给大家对比一下。他这两个写法。是这么构构建镜像的啊,来看一下它的构建镜像,写法呢是这样,首先呢,基础镜像是open gdk8,相当于呢,我们使用Java的JAVA8环境构建基础镜像,然后呢,接下来挖六,相当于我们这个目录呢,可以让你默认挂载出去,然后呢,让一个麦CD,相当于在这个镜像里边先创建了一个目录,这个目录的名字呢,就叫什么,比如叫home若一,对吧,它相当于先创建了一个这这样的目录,有了这个目录以后呢,接下来copy点炸,点炸是什么意思?就是跟当前doer fair同级目录的这个炸,这个文件夹下的这个炸包,所以这个炸包你打好以后放到这个文件夹下就行,我们刀客在构建镜像期间会把这个炸包下的。
04:05
这个炸文件夹下的这个炸包复制到home,若一,就是复制到这个文件夹下,然后呢,你的炸包名叫什么就叫什么,然后呢,ENT pod,就是我们这个doer镜像,最终打包好就是镜像以后我们要doer RA是不是要启动这个镜像的启动命令,而我Java写的微服务呢,我们的应用的启动命令就叫Java杠炸若伊奥,那按照这个do镜像,如果我们现在来部署的话呢,其实我们还是要改一些东西的,因为这个镜像呢,如果我们在生产环境部署它整个配置呢,还是有点不足,所以呢,大家参照我们的这个镜像的命令dog fair,我的这个镜像呢,我是这么来写的,比如from。我的这个from呢是from open jdk,而且呢,我这是JDK环境啊,原来的这个镜像呢,是jregre呢,在生产环境不方便,我们后来排错,万一我们按照这个镜像启动的Java维服务啊,有什么问题,我们可能要进镜像里边运行JDK带的一些命令,比如我们要当出它的整个线程,呃,包括我们要观察整个线程的活动的状态,所以呢,GRE只是一个运行式环境,没有包含我们JDK的一些工具包,所以呢,我们还是来可以使用JDK。
05:17
然后呢,我们有了这个JDK镜像以后。接下来我这呢还有一个命令,叫我们的呢叫这个关键是envv,叫环境变量,环境变量我在这相当于起了一个环境变量是K等于V的写法,K呢叫PMV呢是一长串这个值,这个palms呢,最终会在entry point我的启动命令里边会有引用,比如看这个叫半半是杠C,就是呢,我们的这个杠C相当于杠C代表呢,后边这整串是一个启动命令,然后呢,这个命令里边会到大括号取出。就是取出这个,也就是说我在启动镜像的时候,我还加了一些额外的启动命令,所以我们接下来呢,就应该来分析一下我额外的启动命令做了什么,但我一会儿再来分析,然后呢,我还改了镜像的这个时区,呃,这样的话呢,我们这个镜像啊,也会默认用到我们的这个上海时间,就算呢,你当时不勾选同步主机时间,那也是我们这个中国的标准时间,然后接下来呢,Copy叫target下的新点炸,就是呢,未来你可以把这个doer费放到我们这个项目里边,因为项目一打包以后呢,会在给他下可能会生成一个什么点炸这个文件,那我相当就把target下的所有点炸文件,点炸文件呢,听起来是所有,其实呢只有一个,然后呢,放到根目下叫1P点炸,然后呢,接下来暴露八零端口,而因为呢,我接下来每一个镜像,每一个微服务我启动我都是用八零端口,所以这一块呢,大家就会有疑惑。
06:56
八零端口那不都冲突了吗?看若伊若一在这安排的时候呢,每一个是不是得有自己的端口,当然这只是在我们开发环境下,因为开发环境下我们毕竟是在一台电脑上同时启动这么多微服务,肯定不能端口冲突和占用,但一旦我们一上线到我们的生产环境,而且呢,这个生产环境我们是K8S的,那这样的话呢,我们每一个微服务最终启动的是一个什么是pod呀,所以最终的应用呢,在生产环境启动起来就是这样子,每一个javav服务呢,都是启动一个pod,都是一个pod,都是一个pod,而由于呢,每一个pod他们本来都是IP地址不一样的,所以这样的话呢,就会产生一个效果。
07:39
每一个pod IP不一样,这样每一个pod占用8080端口有没有问题呢?没有任何问题,我们说有没有冲突,你就看IP加端口,这两个合起来,只要跟别人不一样,那他就没有任何的冲突,所以呢,我们的这个pod它有它自己的IP,然后呢,这个呢有它自己的IP,这个呢也有它自己的IP,然后呢占8080端口没问题,这样呢,我就省去一个操作,就是我们未来应用,如果我真的微服务开发很多,比如我在models模块里边有100多个应用,对吧?那这样的话呢,我每一个应用都自己要编排一个端口,是不是很麻烦啊?所以呢,我们最终线上的时候,让每一个应用都占用八零端口是没有任何问题的,因为它是在启动在自己的pod内,然后呢,用自己的IP加这个端口去来访问就行了,所以呢,每一个IP大家就当成,如果假设啊有一个IP,你就当成这有一个真正的啊这个Linux服务器物理机在这。
08:39
跟你说我在我物理机上我开的8080端口,跟你在你物理机上开的8080端口是不是大家没有任何关系啊对吧?好所以呢,这是我们这个docker fair,我们最终生产上云以后的优化的结果。就说按照这个结构,我们来给大家来说一下,如果我们这个应用要上云,要做这件事儿,第一个容器呢,是以默认的8080端口启动的,因为我在上边在env在这启动的时候,启动的时候呢,我在这儿扎了杠栅,后边加了一些启动参数,启动参数呢是server port 8080,所以呢,我们每一个微服务,无论你的配置文件里边怎么写。
09:22
最终呢,按照我docker镜像打包的时候,我的启动命令,因为启动命令是不是最优先的,所以呢,我的启动命令说你用8080端口以后呢,我们所有的微服务用8080,而且呢时区我也改掉了,环境变量里边呢,这些值如果你想改的话,你可以全部都改,但是我在这个环境变量里边我写了一个东西。第一个叫spring profiles active prod啥意思啊?大家看我们现在的这个应用。现在的这个应用呢,它在这叫spring profiles active dev,对吧,就是我们在开发环境,默认激活的是开发环境。
10:07
就是我们的divv环境,但这个名呢,你随便写啊,如果你一旦默认激活了divv环境,会触发哪些行为呢?他呢就会这样做,因为我们在这是不是还配连上NAS,它呢就会去NAS中,去NAS中找找什么,我当前已经用名为开始加上我激活的环境名第一位第二一个什么,我后边还配了我的文件扩展名叫YML叫ya门好,就是呢,他会去找这个,所以这就印证了为什么我们的这个S来访问一下我们的na。我们的Nars的这个暴露的端口是30349。30349,嗯,写错了啊,30349,我要访问拉斯。
11:07
来使用那进行登录,嗯。Sir,输错了,好,我们登录进来以后呢,大家会看到按照每一个应用名都有一个杠,Divv是不是这个压门,但是呢,这只是我在开发期间我的配置,我这个应用一旦一上云,一打包以后,从doer费级别就是从镜像级别,我就会给它激活,因为这个镜像我把你JA包复制过来,启动的时候按照我这个命令,我就会给你激活生产环境,所以这个呢,应用一上云自动激活生产环境,应用打包镜像上云打包镜像启动会自动激活生产环境,因为我在这呢,写了一个叫spring profiles active prod,相当于呢,我在命令行是把你的这一块配置给覆盖了,那就以我命令行为准,所以呢,接下来它呢,就会又触发一个行为,去NAS中找什么。
12:10
是不是找?它的prod这个压门,所以呢,我们现在要做的一件事就是生产环境的应用抽离,配置抽离,那整个配置抽离呢,你就需要在NAS里边首先创建一个命名空间,这个命名空间呢,我们就叫prod,代表我生产环境prod,然后呢,我们就代表生产环境,接下来呢,以后把所有开发环境里边的这个配置可以给生产环境迁移一份,毕竟生产环境里的所有连接地址都跟开发环境不一样,所以呢,我把这一堆的东西我点这个克隆,克隆呢我复制到生产环境,然后生产环境呢要复制哪些?注意是不是把建所有div是不是改成prod就行了,因为我们激活的生产环境名就叫prod。
13:00
主要看这,嗯,我们激活的这个名字是不是就叫prod,所以呢,我们在这改prod就行。这样呢,应用一启动也能加载它生产环境的配置了,就不会加载这些DV环境的配置了,啊这一块呢,没有改的,不用管,点个开始克隆。我们来生产环境确认一下,好,每一个应用呢,都有它应用名带生产环境的这个压ma,那未来呢,你就应该在这个压ma里边改你生产环境,比如地址是什么,好,那我呢,现在在这一块呢,就做了一个配置分离操作,而且呢在这配置分离好了以后呢,大家注意,我在这呢写了一个叫spring cloudnus serve a DR,我在这呢也已经指好了NAS的什么是不是地址,这个地址呢,大家一定要改成你的因因为我的这个S,我部署是不是这样,Hisnus his8848,而且呢用的是集群内网地址啊。集群内地址,因为集群外的这个30349,这只是为了我们在这调试方便使用的,所以大家呢,服务注册都是使用集群内地制,走内网更快,好我们现在呢,这是集群内地制,然后呢,接下来我们而且呢看启动呢,我们激活了是不是生产环境的民生空间,所以呢,我相当于提前做了一件事,为啥我要创建一个生产环境的名称空间叫prod,因为我在这呢,项目一启动我就会。
14:29
在我们的这个名称空间下找所有的配置啊,然后呢,接下来,接下来呢,在这儿cloudnus,我们的这些配置呢,后缀名都是YML,所以就会找这些带我们的环境标识的这些YML,这样呢,就相当于我的这个应用一上云以后自动会加载生产环境的配置,所以我连生产环境的配置都不用给每一个应用里边写,它一上云以后呢,自动就会有,这从某一方面也提升了我们生产环境配置的一些安全性,开发人员呢,可能从来不会感知到生产环境到底是什么样的配置,但一上云人家就能正常工作对吧?好,那这就是我们写的这一堆东西。
15:10
那这个东西呢,我们写好了以后,接下来我就应该把给每一个项目里边,我准备好一个刀费。比如我在这个author这个项目,要是上云doer fair来写一个do fair啊doer fair的内容呢,就是这些给大家看一下,从JDJDK8镜像这是作者,然后呢,这是我们的这一堆信息,这一堆信息呢,注意你改成你自己的那克斯的地址就行了,而且呢,我的这个启动就会自己来加载这一对。好,那这个doer费尔我们配置好以后,那我下一节课我就按照这个doer费尔来尝试给每一个应用来打包刀客镜像。
我来说两句