腾讯云mall3s模块发布流程 #
注:IDE为VS的,可以右击项目添加Dockerfile支持,VS生成请勿修改,如有命名需要修改的,宁愿重新生成,也不要手改。
命名 #
镜像名和容器名原则上要求一致,命名规则【mall3s-项目名-环境名】,镜像和容器需在相应环境命名空间上创建,如“mall3s-system-test”镜像所在命名空间“erp-base-test”,容器所在命名空间“base-test”(由于镜像命名空间base-test已被占用,因此放在“erp-base-test”)。
镜像构建规则 #
目前要求发布(test/prod)需要打tag发布,因此镜像构建触发规则,需要选择“符合分支或标签规则时构建”,值填写“^refs/tags/项目名_环境名_v版本.+$”。
注:如测试环境打tag不便,大家可提意见,非一成不变的
如我们的“system”系统test环境,触发规则如图所示,当我们在gitlab上打tag"system_test_v0.0.1",则触发构建镜像。
图
容器 #
如图2-3-1所示,容器,主要增加环境变量 ASPNETCORE_ENVIRONMENT : 环境,如 ASPNETCORE_ENVIRONMENT : Testing(测试环境,对应项目文件appsettings.环境名.json)
容器端口使用80
注:无需开放外网
图2-3-1
接入nacos #
容器启动时,自动接入(指连接nacos)。
接入网关 #
注:mall3s中,网关域名跟主域名一致,因此接口默认增加"/gateway"
需要在nacos“配置管理” -> “配置列表”对应的环境中配置router.yaml
配置及其解释如下:
http://erp.mall3s.com/gateway/system/api/
spring:
cloud:
gateway:
routes:
# erp基础系统
- id: mall3s-webapi-system #路由命名,无特殊含义,需要唯一,使用nacos服务名即可
uri: lb://mall3s-webapi-system #规则:lb://nacos服务名,万万不可随意写,网关会根据这个寻找真实ip
predicates:
- Path=/system/api/** #可以理解为nginx的location,命名规则【/模块名/项目真实url前缀/**】,(“目真实url前缀”可不要,但要保证不跟其他路由混淆)
filters:
- StripPrefix=1 #可以理解为上面多少段去掉就是url真实地址
httpclient:
connect-timeout: 30000 #链接超时时间
response-timeout: 30s #相应超时时间
gateway:
white: /system/api/system/SysConfig,/system/api/File/Download #白名单,不需要认证的url列表,用英文逗号“,”分隔
此处以服务“mall3s-webapi-system”为例,nacos test环境服务名为“mall3s-webapi-system”,需要增加白名单链接“/system/api/system/SysConfig”和“/system/api/File/Download”;
注:白名单目前只对网关有效,如项目也有认证,需自行去除该接口(白名单的接口)的认证(白名单:理解为不需要登录即可访问。认证:可以理解为有没有登录的意思)。
链路:
如/system/api/File/Download
1、url向网关请求:http://test.erp.mall3s.com/gateway/system/api/File/Download;(若网关地址为http://xxx.xxx.xxx/gateway)
2、网关路由在配置表寻找到“/system/api/**”,则定位此配置;
3、通过uri,网关知道该寻找服务名为“mall3s-webapi-system”的服务,并找到该服务对应的所有IP,根据算法取其中一个ip(如此地址为127.0.0.1,端口80);
4、通过filters:StripPrefix可知,去掉一位占位符,就是真实地址。网关获取到真实地址为:http://127.0.0.1/api/File/Download;
5、网关请求真实地址,返回结果。
PS:网关其他配置方式暂不标注,避免大家混淆。
接入前端 #
前端配置网关地址默认已增加“/gateway”,因此,如果部署的项目,在路由配置了前缀,如/demo/api(如项目默认前缀为“api”),那前端的地址,只需要在真实地址前增加“/demo”字符串即可。