如上图
所有的服务都是运行在服务器上的,也就是linux上。
只是有些是运行在这个linux的docker上面的(redis,postgresql,PasteSpider,registry)。
有些是运行在linux上的(nginx,ssh,cat,openssl,svn,git等)
在这个系统中服务器划分几种:
1.只是运行docker,用于运行其他服务的
2.需要编译源代码的,比如要安装dotnet的sdk的,一般这个服务器也包含打包的服务。
3.存放images的服务器,也就是registry的存储服务器,用于存放服务的各种镜像包,包括镜像包的版本管理等。
4.存放静态文件的,或者文件服务器等。
当然你也可以把他们都放在一起,也是可以的。
比如你要开发一个项目,我们就叫她佩斯派商城作为举例吧!一般来说项目是独立的,比如你的商城项目应该和你的OA没啥关系。
项目里面比如有H5前端文件,Manage管理文件(前后端分离),会员服务(API),订单服务(API),我们把前面的都划分为服务,哪怕他是纯静态的。
代码在开发的时候,我们希望有测试环境,工厂环境,这就涉及到环境模式了,所有的服务都可以拆分多个环境,在nginx的代理文件中,读取服务的运行情况是按照环境划分的。
比如你要读取default环境中的所有运行的container,则这个项目中的其他环境下的container则不会读取出来。
环境一般是内置的,目前有的是default默认环境,test测试环境,prod工厂环境。
相对来说环境是隔离的,后续的版本中会按照环境进行权限的设定。
系统设定中各个环境针对images是公用的,也就是你需要在键值配置中进行环境拆分。
比如.netcore中的appsettings.json就是用于配置系统的各种参数,你可以把测试环境的appsettings.json打包进入,然后在键值配置中进行其他环境的配置,那样在实际运行中,配置就不一样了。比如:
表示在这个服务(贴代码-接口)这个服务运行的时候,会把appsettings.json中的配置项中的Serilog:WriteTo:1:Args:path修改成logs/l{{App.Id}}g.txt,这里的{{App.Id}}在实际运行中会进行对应值的替换,他是一个占位符,更多占位符参考文章命令占位符介绍。
根据以上原则,你可以针对不同的环境配置不同的配置项目,比如redis连接字符串,数据库字符串等,而他们的镜像中的配置信息却是可以公开的一些配置。
PasteSpider佩斯派采用统一的仓储管理,也就是私有的镜像管理,所有的镜像都会打包上传到设定的仓储里面,在运行或者升级服务的时候,会从仓储中进行拉取然后运行。加入了版本管理,可以更好的维持镜像占用的硬盘空间。
我们运行的服务,一般是要对外提供服务的,也就是我们平时说的通过域名可以访问,系统设定是域名解析到对应的服务器的IP上,然后服务器里面使用nginx作为代理分发请求给对应的container里面,而container是会根据运行等情况变更IP,端口,状态等的,所以PasteSpider佩斯派执行了这个路由的功能,用于自动配置nginx的文件,比如你多开了几个container,则会根据设定的自动配置对应的nginx的配置文件并生效。
注意:upstream需要全局唯一!
参考docker的资料,镜像可以理解成服务的打包文件,要运行启动一个服务,则你需要找到这个服务的文件,就是与那个文件为版本运行,比如操作系统的IOS包。Spider佩斯派采用自建的仓储管理镜像,同时包含镜像的版本管理,打包,分发等。
目前提供的是prod工厂环境 default默认环境 test测试环境,通过key-val可以实现不同环境不同的配置,实现镜像包无敏感信息,多环境公用!