From fd5135e3a596dce00a90092e0950d4fc324c308c Mon Sep 17 00:00:00 2001 From: smallchill Date: Sat, 29 Apr 2023 22:03:24 +0800 Subject: [PATCH] =?UTF-8?q?:tada:=203.6.0.RELEASE=20vue3=E7=89=88=E5=89=8D?= =?UTF-8?q?=E7=AB=AF=E6=AD=A3=E5=BC=8F=E5=8F=91=E5=B8=83?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- LICENSE | 2 +- README.md | 10 +- blade-auth/pom.xml | 3 +- .../springblade/test/SignKeyGenerator.java | 24 ++++ blade-common/pom.xml | 2 +- blade-gateway/pom.xml | 3 +- .../gateway/config/JwtConfiguration.java | 44 +++++++ .../config/RouterFunctionConfiguration.java | 2 +- .../gateway/props/JwtProperties.java | 58 +++++++++ .../springblade/gateway/utils/JwtUtil.java | 26 +++- blade-ops/blade-admin/pom.xml | 2 +- blade-ops/blade-develop/pom.xml | 19 +-- blade-ops/blade-report/pom.xml | 2 +- blade-ops/blade-resource/pom.xml | 2 +- blade-ops/blade-seata-order/pom.xml | 2 +- blade-ops/blade-seata-storage/pom.xml | 2 +- blade-ops/blade-swagger/pom.xml | 10 +- blade-ops/pom.xml | 4 +- blade-service-api/blade-demo-api/pom.xml | 2 +- blade-service-api/blade-desk-api/pom.xml | 2 +- blade-service-api/blade-dict-api/pom.xml | 2 +- blade-service-api/blade-scope-api/pom.xml | 2 +- blade-service-api/blade-system-api/pom.xml | 2 +- blade-service-api/blade-user-api/pom.xml | 2 +- blade-service-api/pom.xml | 20 +-- blade-service/blade-demo/pom.xml | 2 +- blade-service/blade-desk/pom.xml | 2 +- blade-service/blade-log/pom.xml | 2 +- blade-service/blade-system/pom.xml | 2 +- blade-service/blade-user/pom.xml | 2 +- blade-service/pom.xml | 4 +- doc/nacos/blade.yaml | 7 +- doc/sql/blade/blade-update-3.1.0~3.2.0.sql | 115 ------------------ pom.xml | 55 +++++---- script/docker/.env | 2 +- script/docker/deploy.sh | 6 +- script/docker/docker-compose.yml | 5 +- .../docker/nacos/conf/application.properties | 46 +++++++ script/docker/nacos/init.d/custom.properties | 19 --- script/kuboard/kuboard_spring-blade.yaml | 26 ++-- 40 files changed, 291 insertions(+), 253 deletions(-) create mode 100644 blade-auth/src/test/java/org/springblade/test/SignKeyGenerator.java create mode 100644 blade-gateway/src/main/java/org/springblade/gateway/config/JwtConfiguration.java create mode 100644 blade-gateway/src/main/java/org/springblade/gateway/props/JwtProperties.java delete mode 100644 doc/sql/blade/blade-update-3.1.0~3.2.0.sql create mode 100644 script/docker/nacos/conf/application.properties delete mode 100644 script/docker/nacos/init.d/custom.properties diff --git a/LICENSE b/LICENSE index 5533663..da37b86 100644 --- a/LICENSE +++ b/LICENSE @@ -176,7 +176,7 @@ recommend that a file or class name and description of purpose be included on the same "printed page" as the copyright notice for easier identification within third-party archives. - Copyright 2020 BladeX (https://bladex.vip) + Copyright 2023 BladeX (https://bladex.vip) Licensed under the Apache License, Version 2.0 (the "License"); you may not use this file except in compliance with the License. diff --git a/README.md b/README.md index bffd17f..caf37f7 100644 --- a/README.md +++ b/README.md @@ -1,9 +1,9 @@

- Downloads + Downloads Build Status Build Status Coverage Status - Downloads + Downloads Downloads @@ -69,12 +69,13 @@ SpringBlade * Sword-基于React:[https://sword.bladex.vip](https://sword.bladex.vip) ## 数据大屏 -* Caster-数据大屏展示系统:[https://caster.bladex.vip](https://caster.bladex.vip) +* 数据大屏展示系统:[https://data.bladex.vip](https://data.bladex.vip) ## 技术文档 * [SpringBlade开发手册一览](https://gitee.com/smallc/SpringBlade/wikis/SpringBlade开发手册) * [SpringBlade常见问题集锦](https://sns.bladex.vip/article-14966.html) * [SpringBlade基于Kuboard部署K8S](https://kuboard.cn/learning/k8s-practice/spring-blade/) +* [SpringBlade基于Rainbond部署](https://www.rainbond.com/docs/micro-service/example/blade) ## 项目地址 * 核心框架项目地址:[https://gitee.com/smallc/blade-tool](https://gitee.com/smallc/blade-tool) @@ -82,7 +83,8 @@ SpringBlade * 后端Github地址:[https://github.com/chillzhuang/SpringBlade](https://github.com/chillzhuang/SpringBlade) * 后端SpringBoot版:[https://gitee.com/smallc/SpringBlade/tree/boot/](https://gitee.com/smallc/SpringBlade/tree/boot/) * 前端框架Sword(基于React):[https://gitee.com/smallc/Sword](https://gitee.com/smallc/Sword) -* 前端框架Saber(基于Vue):[https://gitee.com/smallc/Saber](https://gitee.com/smallc/Saber) +* 前端框架Saber(基于Vue2):[https://gitee.com/smallc/Saber](https://gitee.com/smallc/Saber) +* 前端框架Saber3(基于Vue3):[https://gitee.com/smallc/Saber3](https://gitee.com/smallc/Saber/tree/3.x/) # 开源协议 Apache Licence 2.0 ([英文原文](http://www.apache.org/licenses/LICENSE-2.0.html)) diff --git a/blade-auth/pom.xml b/blade-auth/pom.xml index ffa1e28..c1d5fbd 100644 --- a/blade-auth/pom.xml +++ b/blade-auth/pom.xml @@ -8,7 +8,7 @@ SpringBlade org.springblade - 3.5.0 + 3.6.0 blade-auth @@ -63,6 +63,7 @@ mysql mysql-connector-java + ${mysql.connector.version} runtime diff --git a/blade-auth/src/test/java/org/springblade/test/SignKeyGenerator.java b/blade-auth/src/test/java/org/springblade/test/SignKeyGenerator.java new file mode 100644 index 0000000..fd1aa61 --- /dev/null +++ b/blade-auth/src/test/java/org/springblade/test/SignKeyGenerator.java @@ -0,0 +1,24 @@ +package org.springblade.test; + +import org.springblade.core.tool.utils.RandomType; +import org.springblade.core.tool.utils.StringUtil; + +/** + * signKey生成器 + * + * @author Chill + */ +public class SignKeyGenerator { + + public static void main(String[] args) { + System.out.println("======================================================="); + for (int i = 0; i < 10; i++) { + String signKey = StringUtil.random(32, RandomType.ALL); + System.out.println("SpringBlade SignKey:[" + signKey + "] "); + } + System.out.println("======================================================="); + System.out.println("====== blade.token.sign-key 的值从中挑选一个便可 ========="); + System.out.println("======================================================="); + } + +} diff --git a/blade-common/pom.xml b/blade-common/pom.xml index 6da9907..540aa5b 100644 --- a/blade-common/pom.xml +++ b/blade-common/pom.xml @@ -5,7 +5,7 @@ SpringBlade org.springblade - 3.5.0 + 3.6.0 4.0.0 diff --git a/blade-gateway/pom.xml b/blade-gateway/pom.xml index 27bcfef..09cb063 100644 --- a/blade-gateway/pom.xml +++ b/blade-gateway/pom.xml @@ -5,7 +5,7 @@ SpringBlade org.springblade - 3.5.0 + 3.6.0 4.0.0 @@ -68,7 +68,6 @@ com.alibaba.cloud spring-cloud-starter-alibaba-sentinel - ${alibaba.cloud.version} diff --git a/blade-gateway/src/main/java/org/springblade/gateway/config/JwtConfiguration.java b/blade-gateway/src/main/java/org/springblade/gateway/config/JwtConfiguration.java new file mode 100644 index 0000000..83731e6 --- /dev/null +++ b/blade-gateway/src/main/java/org/springblade/gateway/config/JwtConfiguration.java @@ -0,0 +1,44 @@ +/** + * Copyright (c) 2018-2028, Chill Zhuang 庄骞 (smallchill@163.com). + *

+ * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + *

+ * http://www.apache.org/licenses/LICENSE-2.0 + *

+ * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +package org.springblade.gateway.config; + +import lombok.AllArgsConstructor; +import lombok.extern.slf4j.Slf4j; +import org.springblade.gateway.props.JwtProperties; +import org.springblade.gateway.utils.JwtUtil; +import org.springframework.beans.factory.SmartInitializingSingleton; +import org.springframework.boot.context.properties.EnableConfigurationProperties; +import org.springframework.context.annotation.Configuration; + +/** + * JWT配置信息 + * + * @author Chill + */ +@Slf4j +@Configuration(proxyBeanMethods = false) +@AllArgsConstructor +@EnableConfigurationProperties({JwtProperties.class}) +public class JwtConfiguration implements SmartInitializingSingleton { + + private final JwtProperties properties; + + @Override + public void afterSingletonsInstantiated() { + JwtUtil.setJwtProperties(properties); + } +} diff --git a/blade-gateway/src/main/java/org/springblade/gateway/config/RouterFunctionConfiguration.java b/blade-gateway/src/main/java/org/springblade/gateway/config/RouterFunctionConfiguration.java index 784e490..e19978a 100644 --- a/blade-gateway/src/main/java/org/springblade/gateway/config/RouterFunctionConfiguration.java +++ b/blade-gateway/src/main/java/org/springblade/gateway/config/RouterFunctionConfiguration.java @@ -47,7 +47,7 @@ public class RouterFunctionConfiguration { /** * 这里为支持的请求头,如果有自定义的header字段请自己添加 */ - private static final String ALLOWED_HEADERS = "X-Requested-With, Tenant-Id, Blade-Auth, Content-Type, Authorization, credential, X-XSRF-TOKEN, token, username, client, knfie4j-gateway-request, request-origion"; + private static final String ALLOWED_HEADERS = "X-Requested-With, Tenant-Id, Blade-Auth, Content-Type, Authorization, credential, X-XSRF-TOKEN, token, username, client, knfie4j-gateway-request, knife4j-gateway-code, request-origion"; private static final String ALLOWED_METHODS = "GET,POST,PUT,DELETE,OPTIONS,HEAD"; private static final String ALLOWED_ORIGIN = "*"; private static final String ALLOWED_EXPOSE = "*"; diff --git a/blade-gateway/src/main/java/org/springblade/gateway/props/JwtProperties.java b/blade-gateway/src/main/java/org/springblade/gateway/props/JwtProperties.java new file mode 100644 index 0000000..67b41af --- /dev/null +++ b/blade-gateway/src/main/java/org/springblade/gateway/props/JwtProperties.java @@ -0,0 +1,58 @@ +/* + * Copyright (c) 2018-2028, Chill Zhuang All rights reserved. + * + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions are met: + * + * Redistributions of source code must retain the above copyright notice, + * this list of conditions and the following disclaimer. + * Redistributions in binary form must reproduce the above copyright + * notice, this list of conditions and the following disclaimer in the + * documentation and/or other materials provided with the distribution. + * Neither the name of the dreamlu.net developer nor the names of its + * contributors may be used to endorse or promote products derived from + * this software without specific prior written permission. + * Author: Chill 庄骞 (smallchill@163.com) + */ +package org.springblade.gateway.props; + +import io.jsonwebtoken.JwtException; +import lombok.Data; +import org.springblade.core.launch.constant.TokenConstant; +import org.springframework.boot.context.properties.ConfigurationProperties; + +/** + * JWT配置 + * + * @author Chill + */ +@Data +@ConfigurationProperties("blade.token") +public class JwtProperties { + + /** + * token是否有状态 + */ + private Boolean state = Boolean.FALSE; + + /** + * 是否只可同时在线一人 + */ + private Boolean single = Boolean.FALSE; + + /** + * token签名 + */ + private String signKey = ""; + + /** + * 获取签名规则 + */ + public String getSignKey() { + if (this.signKey.length() < TokenConstant.SIGN_KEY_LENGTH) { + throw new JwtException("请配置 blade.token.sign-key 的值, 长度32位以上"); + } + return this.signKey; + } + +} diff --git a/blade-gateway/src/main/java/org/springblade/gateway/utils/JwtUtil.java b/blade-gateway/src/main/java/org/springblade/gateway/utils/JwtUtil.java index 2d05163..84a1232 100644 --- a/blade-gateway/src/main/java/org/springblade/gateway/utils/JwtUtil.java +++ b/blade-gateway/src/main/java/org/springblade/gateway/utils/JwtUtil.java @@ -18,6 +18,7 @@ package org.springblade.gateway.utils; import io.jsonwebtoken.Claims; import io.jsonwebtoken.Jwts; import org.springblade.core.launch.constant.TokenConstant; +import org.springblade.gateway.props.JwtProperties; import java.nio.charset.StandardCharsets; import java.util.Base64; @@ -29,11 +30,30 @@ import java.util.Base64; */ public class JwtUtil { - public static String SIGN_KEY = TokenConstant.SIGN_KEY; public static String BEARER = TokenConstant.BEARER; public static Integer AUTH_LENGTH = 7; - public static String BASE64_SECURITY = Base64.getEncoder().encodeToString(SIGN_KEY.getBytes(StandardCharsets.UTF_8)); + /** + * jwt配置 + */ + private static JwtProperties jwtProperties; + + public static JwtProperties getJwtProperties() { + return jwtProperties; + } + + public static void setJwtProperties(JwtProperties properties) { + if (JwtUtil.jwtProperties == null) { + JwtUtil.jwtProperties = properties; + } + } + + /** + * 签名加密 + */ + public static String getBase64Security() { + return Base64.getEncoder().encodeToString(getJwtProperties().getSignKey().getBytes(StandardCharsets.UTF_8)); + } /** * 获取token串 @@ -61,7 +81,7 @@ public class JwtUtil { public static Claims parseJWT(String jsonWebToken) { try { return Jwts.parserBuilder() - .setSigningKey(Base64.getDecoder().decode(JwtUtil.BASE64_SECURITY)).build() + .setSigningKey(Base64.getDecoder().decode(getBase64Security())).build() .parseClaimsJws(jsonWebToken).getBody(); } catch (Exception ex) { return null; diff --git a/blade-ops/blade-admin/pom.xml b/blade-ops/blade-admin/pom.xml index b162b96..1de62c5 100644 --- a/blade-ops/blade-admin/pom.xml +++ b/blade-ops/blade-admin/pom.xml @@ -5,7 +5,7 @@ blade-ops org.springblade - 3.5.0 + 3.6.0 4.0.0 diff --git a/blade-ops/blade-develop/pom.xml b/blade-ops/blade-develop/pom.xml index 945ef17..0226d7f 100644 --- a/blade-ops/blade-develop/pom.xml +++ b/blade-ops/blade-develop/pom.xml @@ -6,7 +6,7 @@ org.springblade blade-ops - 3.5.0 + 3.6.0 4.0.0 @@ -33,23 +33,6 @@ blade-core-develop ${blade.tool.version} - - - io.springfox - springfox-swagger2 - ${swagger.version} - - - io.swagger - swagger-models - - - - - io.swagger - swagger-models - ${swagger.models.version} - org.springblade blade-dict-api diff --git a/blade-ops/blade-report/pom.xml b/blade-ops/blade-report/pom.xml index 5b7e4bd..001bdba 100644 --- a/blade-ops/blade-report/pom.xml +++ b/blade-ops/blade-report/pom.xml @@ -5,7 +5,7 @@ org.springblade blade-ops - 3.5.0 + 3.6.0 4.0.0 diff --git a/blade-ops/blade-resource/pom.xml b/blade-ops/blade-resource/pom.xml index df2e08a..29ce60d 100644 --- a/blade-ops/blade-resource/pom.xml +++ b/blade-ops/blade-resource/pom.xml @@ -5,7 +5,7 @@ blade-ops org.springblade - 3.5.0 + 3.6.0 4.0.0 diff --git a/blade-ops/blade-seata-order/pom.xml b/blade-ops/blade-seata-order/pom.xml index 7a68a91..dcabeb9 100644 --- a/blade-ops/blade-seata-order/pom.xml +++ b/blade-ops/blade-seata-order/pom.xml @@ -5,7 +5,7 @@ blade-ops org.springblade - 3.5.0 + 3.6.0 4.0.0 diff --git a/blade-ops/blade-seata-storage/pom.xml b/blade-ops/blade-seata-storage/pom.xml index 0d6a407..765d870 100644 --- a/blade-ops/blade-seata-storage/pom.xml +++ b/blade-ops/blade-seata-storage/pom.xml @@ -5,7 +5,7 @@ blade-ops org.springblade - 3.5.0 + 3.6.0 4.0.0 diff --git a/blade-ops/blade-swagger/pom.xml b/blade-ops/blade-swagger/pom.xml index 9713ea5..1a64694 100644 --- a/blade-ops/blade-swagger/pom.xml +++ b/blade-ops/blade-swagger/pom.xml @@ -5,7 +5,7 @@ blade-ops org.springblade - 3.5.0 + 3.6.0 4.0.0 @@ -23,8 +23,14 @@ com.github.xiaoymin knife4j-aggregation-spring-boot-starter - ${knife4j.version} + + diff --git a/blade-ops/pom.xml b/blade-ops/pom.xml index 393176e..639b568 100644 --- a/blade-ops/pom.xml +++ b/blade-ops/pom.xml @@ -5,13 +5,13 @@ SpringBlade org.springblade - 3.5.0 + 3.6.0 4.0.0 blade-ops ${project.artifactId} - 3.5.0 + 3.6.0 pom blade-admin diff --git a/blade-service-api/blade-demo-api/pom.xml b/blade-service-api/blade-demo-api/pom.xml index 1ec2311..cfa2550 100644 --- a/blade-service-api/blade-demo-api/pom.xml +++ b/blade-service-api/blade-demo-api/pom.xml @@ -5,7 +5,7 @@ blade-service-api org.springblade - 3.5.0 + 3.6.0 4.0.0 diff --git a/blade-service-api/blade-desk-api/pom.xml b/blade-service-api/blade-desk-api/pom.xml index 9a1fcb7..1d47002 100644 --- a/blade-service-api/blade-desk-api/pom.xml +++ b/blade-service-api/blade-desk-api/pom.xml @@ -5,7 +5,7 @@ blade-service-api org.springblade - 3.5.0 + 3.6.0 4.0.0 diff --git a/blade-service-api/blade-dict-api/pom.xml b/blade-service-api/blade-dict-api/pom.xml index 64a28ad..1a78802 100644 --- a/blade-service-api/blade-dict-api/pom.xml +++ b/blade-service-api/blade-dict-api/pom.xml @@ -5,7 +5,7 @@ blade-service-api org.springblade - 3.5.0 + 3.6.0 4.0.0 diff --git a/blade-service-api/blade-scope-api/pom.xml b/blade-service-api/blade-scope-api/pom.xml index 9602c5a..2f25e79 100644 --- a/blade-service-api/blade-scope-api/pom.xml +++ b/blade-service-api/blade-scope-api/pom.xml @@ -5,7 +5,7 @@ blade-service-api org.springblade - 3.5.0 + 3.6.0 4.0.0 diff --git a/blade-service-api/blade-system-api/pom.xml b/blade-service-api/blade-system-api/pom.xml index a8554a7..f7ab45a 100644 --- a/blade-service-api/blade-system-api/pom.xml +++ b/blade-service-api/blade-system-api/pom.xml @@ -5,7 +5,7 @@ blade-service-api org.springblade - 3.5.0 + 3.6.0 4.0.0 diff --git a/blade-service-api/blade-user-api/pom.xml b/blade-service-api/blade-user-api/pom.xml index 1877ca9..24db917 100644 --- a/blade-service-api/blade-user-api/pom.xml +++ b/blade-service-api/blade-user-api/pom.xml @@ -5,7 +5,7 @@ blade-service-api org.springblade - 3.5.0 + 3.6.0 4.0.0 diff --git a/blade-service-api/pom.xml b/blade-service-api/pom.xml index 7cbd2ea..81e7a23 100644 --- a/blade-service-api/pom.xml +++ b/blade-service-api/pom.xml @@ -5,13 +5,13 @@ SpringBlade org.springblade - 3.5.0 + 3.6.0 4.0.0 blade-service-api ${project.artifactId} - 3.5.0 + 3.6.0 pom SpringBlade 微服务API集合 @@ -34,22 +34,6 @@ org.springframework.cloud spring-cloud-starter-openfeign - - io.springfox - springfox-swagger2 - ${swagger.version} - - - io.swagger - swagger-models - - - - - io.swagger - swagger-models - ${swagger.models.version} - net.dreamlu mica-auto diff --git a/blade-service/blade-demo/pom.xml b/blade-service/blade-demo/pom.xml index 91699a9..8beefe0 100644 --- a/blade-service/blade-demo/pom.xml +++ b/blade-service/blade-demo/pom.xml @@ -5,7 +5,7 @@ blade-service org.springblade - 3.5.0 + 3.6.0 4.0.0 diff --git a/blade-service/blade-desk/pom.xml b/blade-service/blade-desk/pom.xml index bbf3b7c..738f29c 100644 --- a/blade-service/blade-desk/pom.xml +++ b/blade-service/blade-desk/pom.xml @@ -6,7 +6,7 @@ org.springblade blade-service - 3.5.0 + 3.6.0 4.0.0 diff --git a/blade-service/blade-log/pom.xml b/blade-service/blade-log/pom.xml index a218b96..9c49ea2 100644 --- a/blade-service/blade-log/pom.xml +++ b/blade-service/blade-log/pom.xml @@ -5,7 +5,7 @@ blade-service org.springblade - 3.5.0 + 3.6.0 4.0.0 diff --git a/blade-service/blade-system/pom.xml b/blade-service/blade-system/pom.xml index 3f8aec0..4f6414e 100644 --- a/blade-service/blade-system/pom.xml +++ b/blade-service/blade-system/pom.xml @@ -5,7 +5,7 @@ blade-service org.springblade - 3.5.0 + 3.6.0 4.0.0 diff --git a/blade-service/blade-user/pom.xml b/blade-service/blade-user/pom.xml index 7d62d78..3b0f17e 100644 --- a/blade-service/blade-user/pom.xml +++ b/blade-service/blade-user/pom.xml @@ -5,7 +5,7 @@ blade-service org.springblade - 3.5.0 + 3.6.0 4.0.0 diff --git a/blade-service/pom.xml b/blade-service/pom.xml index 5a51266..446a75d 100644 --- a/blade-service/pom.xml +++ b/blade-service/pom.xml @@ -7,12 +7,12 @@ org.springblade SpringBlade - 3.5.0 + 3.6.0 blade-service ${project.artifactId} - 3.5.0 + 3.6.0 pom SpringBlade 微服务集合 diff --git a/doc/nacos/blade.yaml b/doc/nacos/blade.yaml index 9cee971..294430e 100644 --- a/doc/nacos/blade.yaml +++ b/doc/nacos/blade.yaml @@ -60,16 +60,16 @@ knife4j: enableRequestCache: true enableFilterMultipartApis: false enableFilterMultipartApiMethodType: POST - language: zh-CN + language: zh_cn enableFooter: false enableFooterCustom: true - footerCustomContent: Copyright © 2022 SpringBlade All Rights Reserved + footerCustomContent: Copyright © 2023 SpringBlade All Rights Reserved #swagger配置信息 swagger: title: SpringBlade 接口文档系统 description: SpringBlade 接口文档系统 - version: 3.5.0 + version: 3.6.0 license: Powered By SpringBlade licenseUrl: https://bladex.vip terms-of-service-url: https://bladex.vip @@ -81,6 +81,7 @@ swagger: #blade配置 blade: token: + #使用 blade-auth服务 @org.springblade.test.SignKeyGenerator 获取 sign-key: 请配置32位签名提高安全性 xss: enabled: true diff --git a/doc/sql/blade/blade-update-3.1.0~3.2.0.sql b/doc/sql/blade/blade-update-3.1.0~3.2.0.sql deleted file mode 100644 index a1e770e..0000000 --- a/doc/sql/blade/blade-update-3.1.0~3.2.0.sql +++ /dev/null @@ -1,115 +0,0 @@ - --- ---------------------------- --- 创建数据权限表 --- ---------------------------- -CREATE TABLE `blade_scope_data` ( - `id` bigint(20) NOT NULL COMMENT '主键', - `menu_id` bigint(20) NULL DEFAULT NULL COMMENT '菜单主键', - `resource_code` varchar(255) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NULL DEFAULT NULL COMMENT '资源编号', - `scope_name` varchar(255) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NULL DEFAULT NULL COMMENT '数据权限名称', - `scope_field` varchar(255) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NULL DEFAULT NULL COMMENT '数据权限字段', - `scope_class` varchar(500) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NULL DEFAULT NULL COMMENT '数据权限类名', - `scope_column` varchar(255) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NULL DEFAULT NULL COMMENT '数据权限字段', - `scope_type` int(2) NULL DEFAULT NULL COMMENT '数据权限类型', - `scope_value` varchar(2000) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NULL DEFAULT NULL COMMENT '数据权限值域', - `remark` varchar(255) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NULL DEFAULT NULL COMMENT '数据权限备注', - `create_user` bigint(20) NULL DEFAULT NULL COMMENT '创建人', - `create_dept` bigint(20) NULL DEFAULT NULL COMMENT '创建部门', - `create_time` datetime(0) NULL DEFAULT NULL COMMENT '创建时间', - `update_user` bigint(20) NULL DEFAULT NULL COMMENT '修改人', - `update_time` datetime(0) NULL DEFAULT NULL COMMENT '修改时间', - `status` int(2) NULL DEFAULT NULL COMMENT '状态', - `is_deleted` int(2) NULL DEFAULT NULL COMMENT '是否已删除', - PRIMARY KEY (`id`) USING BTREE -) ENGINE = InnoDB CHARACTER SET = utf8mb4 COLLATE = utf8mb4_general_ci COMMENT = '数据权限表'; - - --- ---------------------------- --- 创建数据权限角色表 --- ---------------------------- -DROP TABLE IF EXISTS `blade_role_scope`; -CREATE TABLE `blade_role_scope` ( - `id` bigint(20) NOT NULL COMMENT '主键', - `scope_id` bigint(20) NULL DEFAULT NULL COMMENT '数据权限id', - `role_id` bigint(20) NULL DEFAULT NULL COMMENT '角色id', - PRIMARY KEY (`id`) USING BTREE -) ENGINE = InnoDB CHARACTER SET = utf8mb4 COLLATE = utf8mb4_general_ci; - -SET FOREIGN_KEY_CHECKS = 1; - --- ---------------------------- --- 部门表增加字段 --- ---------------------------- -ALTER TABLE `blade_dept` - ADD COLUMN `ancestors` varchar(2000) NULL COMMENT '祖级列表' AFTER `parent_id`; - -UPDATE `blade_dept` SET `tenant_id` = '000000', `parent_id` = 0, `ancestors` = '0', `dept_name` = '刀锋科技', `full_name` = '江苏刀锋科技有限公司', `sort` = 1, `remark` = NULL, `is_deleted` = 0 WHERE `id` = 1123598813738675201; -UPDATE `blade_dept` SET `tenant_id` = '000000', `parent_id` = 1123598813738675201, `ancestors` = '0,1123598813738675201', `dept_name` = '常州刀锋', `full_name` = '常州刀锋科技有限公司', `sort` = 1, `remark` = NULL, `is_deleted` = 0 WHERE `id` = 1123598813738675202; -UPDATE `blade_dept` SET `tenant_id` = '000000', `parent_id` = 1123598813738675201, `ancestors` = '0,1123598813738675201', `dept_name` = '苏州刀锋', `full_name` = '苏州刀锋科技有限公司', `sort` = 1, `remark` = NULL, `is_deleted` = 0 WHERE `id` = 1123598813738675203; - --- ---------------------------- --- 增加字典项 --- ---------------------------- -INSERT INTO `blade_dict`(`id`, `parent_id`, `code`, `dict_key`, `dict_value`, `sort`, `remark`, `is_deleted`) VALUES (1123598814738675231, 0, 'data_scope_type', -1, '数据权限', 8, NULL, 0); -INSERT INTO `blade_dict`(`id`, `parent_id`, `code`, `dict_key`, `dict_value`, `sort`, `remark`, `is_deleted`) VALUES (1123598814738675232, 1123598814738675231, 'data_scope_type', 1, '全部可见', 1, NULL, 0); -INSERT INTO `blade_dict`(`id`, `parent_id`, `code`, `dict_key`, `dict_value`, `sort`, `remark`, `is_deleted`) VALUES (1123598814738675233, 1123598814738675231, 'data_scope_type', 2, '本人可见', 2, NULL, 0); -INSERT INTO `blade_dict`(`id`, `parent_id`, `code`, `dict_key`, `dict_value`, `sort`, `remark`, `is_deleted`) VALUES (1123598814738675234, 1123598814738675231, 'data_scope_type', 3, '所在机构可见', 3, NULL, 0); -INSERT INTO `blade_dict`(`id`, `parent_id`, `code`, `dict_key`, `dict_value`, `sort`, `remark`, `is_deleted`) VALUES (1123598814738675235, 1123598814738675231, 'data_scope_type', 4, '所在机构及子级可见', 4, NULL, 0); -INSERT INTO `blade_dict`(`id`, `parent_id`, `code`, `dict_key`, `dict_value`, `sort`, `remark`, `is_deleted`) VALUES (1123598814738675236, 1123598814738675231, 'data_scope_type', 5, '自定义', 5, NULL, 0); - - --- ---------------------------- --- 增加权限管理模块 --- ---------------------------- -INSERT INTO `blade_menu`(`id`, `parent_id`, `code`, `name`, `alias`, `path`, `source`, `sort`, `category`, `action`, `is_open`, `remark`, `is_deleted`) VALUES (1123598815738675307, 0, 'authority', '权限管理', 'menu', '/authority', 'iconfont icon-bofangqi-suoping', 98, 1, 0, 1, '', 0); - --- ---------------------------- --- 角色管理迁移至权限管理 --- ---------------------------- -DELETE FROM `blade_menu` WHERE ID = 1123598815738675208; -INSERT INTO `blade_menu`(`id`, `parent_id`, `code`, `name`, `alias`, `path`, `source`, `sort`, `category`, `action`, `is_open`, `remark`, `is_deleted`) VALUES (1123598815738675308, 1123598815738675307, 'role', '角色管理', 'menu', '/authority/role', 'iconfont iconicon_boss', 1, 1, 0, 1, NULL, 0); -UPDATE `blade_menu` SET `parent_id` = 1123598815738675308, `code` = 'role_add', `name` = '新增', `alias` = 'add', `path` = '/authority/role/add', `source` = 'plus', `sort` = 1, `category` = 2, `action` = 1, `is_open` = 1, `remark` = NULL, `is_deleted` = 0 WHERE `id` = 1123598815738675241; -UPDATE `blade_menu` SET `parent_id` = 1123598815738675308, `code` = 'role_edit', `name` = '修改', `alias` = 'edit', `path` = '/authority/role/edit', `source` = 'form', `sort` = 2, `category` = 2, `action` = 2, `is_open` = 1, `remark` = NULL, `is_deleted` = 0 WHERE `id` = 1123598815738675242; -UPDATE `blade_menu` SET `parent_id` = 1123598815738675308, `code` = 'role_delete', `name` = '删除', `alias` = 'delete', `path` = '/api/blade-system/role/remove', `source` = 'delete', `sort` = 3, `category` = 2, `action` = 3, `is_open` = 1, `remark` = NULL, `is_deleted` = 0 WHERE `id` = 1123598815738675243; -UPDATE `blade_menu` SET `parent_id` = 1123598815738675308, `code` = 'role_view', `name` = '查看', `alias` = 'view', `path` = '/authority/role/view', `source` = 'file-text', `sort` = 4, `category` = 2, `action` = 2, `is_open` = 1, `remark` = NULL, `is_deleted` = 0 WHERE `id` = 1123598815738675244; - - --- ---------------------------- --- 增加数据权限及接口权限独立菜单 --- ---------------------------- -INSERT INTO `blade_menu`(`id`, `parent_id`, `code`, `name`, `alias`, `path`, `source`, `sort`, `category`, `action`, `is_open`, `remark`, `is_deleted`) VALUES (1123598815738675309, 1123598815738675307, 'data_scope', '数据权限', 'menu', '/authority/datascope', 'iconfont icon-shujuzhanshi2', 2, 1, 0, 1, '', 0); -INSERT INTO `blade_menu`(`id`, `parent_id`, `code`, `name`, `alias`, `path`, `source`, `sort`, `category`, `action`, `is_open`, `remark`, `is_deleted`) VALUES (1123598815738675310, 1123598815738675309, 'data_scope_setting', '权限配置', 'setting', NULL, 'setting', 1, 2, 2, 1, NULL, 0); - - --- ---------------------------- --- 增加数据权限及菜单权限 --- ---------------------------- -INSERT INTO `blade_role_menu`(`id`, `menu_id`, `role_id`) VALUES (1455363615489028098, 1123598815738675307, 1123598816738675201); -INSERT INTO `blade_role_menu`(`id`, `menu_id`, `role_id`) VALUES (1455363615505805313, 1123598815738675309, 1123598816738675201); -INSERT INTO `blade_role_menu`(`id`, `menu_id`, `role_id`) VALUES (1455363615518388225, 1123598815738675310, 1123598816738675201); - - --- ---------------------------- --- 增加create_dept字段并赋默认值 --- ---------------------------- -ALTER TABLE `blade_client` - ADD COLUMN `create_dept` bigint(20) NULL COMMENT '创建部门' AFTER `create_user`; -ALTER TABLE `blade_notice` - ADD COLUMN `create_dept` bigint(20) NULL COMMENT '创建部门' AFTER `create_user`; -ALTER TABLE `blade_param` - ADD COLUMN `create_dept` bigint(20) NULL COMMENT '创建部门' AFTER `create_user`; -ALTER TABLE `blade_tenant` - ADD COLUMN `create_dept` bigint(20) NULL COMMENT '创建部门' AFTER `create_user`; -ALTER TABLE `blade_user` - ADD COLUMN `create_dept` bigint(20) NULL COMMENT '创建部门' AFTER `create_user`; - -UPDATE `blade_client` SET create_dept = 1123598813738675201 WHERE create_dept IS NULL; -UPDATE `blade_notice` SET create_dept = 1123598813738675201 WHERE create_dept IS NULL; -UPDATE `blade_param` SET create_dept = 1123598813738675201 WHERE create_dept IS NULL; -UPDATE `blade_tenant` SET create_dept = 1123598813738675201 WHERE create_dept IS NULL; -UPDATE `blade_user` SET create_dept = 1123598813738675201 WHERE create_dept IS NULL; - - - - - diff --git a/pom.xml b/pom.xml index 18bc85c..812732e 100644 --- a/pom.xml +++ b/pom.xml @@ -5,30 +5,29 @@ org.springblade SpringBlade - 3.5.0 + 3.6.0 pom - 3.5.0 - 3.5.0 + 3.6.0 + 3.6.0 1.8 3.8.1 - 2.10.5 - 1.6.2 - 2.0.9 + + 4.1.0 1.6.0 1.6.2 - 2.2.6 - 1.2.5 - 2021.0.1.0 - 2.1.0 - 2.7.1 - 2.0.0.RELEASE + 2.2.11 + 2.3.2 + 8.0.32 - 2.7.1 - 2021.0.3 - Cairo-SR8 + 5.3.27 + 2.7.10 + 2.7.10 + 2021.0.6 + 2021.0.5.0 + 2.1.2 10.211.55.5 @@ -48,14 +47,11 @@ - org.springframework.plugin - spring-plugin-core - ${spring.plugin.version} - - - org.springframework.plugin - spring-plugin-metadata - ${spring.plugin.version} + org.springframework + spring-framework-bom + ${spring.version} + pom + import org.springframework.boot @@ -72,9 +68,16 @@ import - io.spring.platform - platform-bom - ${spring.platform.version} + com.alibaba.cloud + spring-cloud-alibaba-dependencies + ${alibaba.cloud.version} + pom + import + + + com.github.xiaoymin + knife4j-dependencies + ${knife4j.version} pom import diff --git a/script/docker/.env b/script/docker/.env index 4dec967..f95a4c8 100644 --- a/script/docker/.env +++ b/script/docker/.env @@ -1,2 +1,2 @@ REGISTER=192.168.0.157/blade -TAG=3.5.0 +TAG=3.6.0 diff --git a/script/docker/deploy.sh b/script/docker/deploy.sh index d8604b6..05ab558 100644 --- a/script/docker/deploy.sh +++ b/script/docker/deploy.sh @@ -33,9 +33,9 @@ mount(){ cp nginx/web/nginx.conf /docker/nginx/web/nginx.conf cp -r nginx/web/html /docker/nginx/web/html fi - if test ! -f "/docker/nacos/init.d/custom.properties" ;then - mkdir -p /docker/nacos/init.d - cp nacos/init.d/custom.properties /docker/nacos/init.d/custom.properties + if test ! -f "/docker/nacos/conf/application.properties" ;then + mkdir -p /docker/nacos/conf + cp nacos/conf/application.properties /docker/nacos/conf/application.properties fi } diff --git a/script/docker/docker-compose.yml b/script/docker/docker-compose.yml index e757b61..79931ca 100644 --- a/script/docker/docker-compose.yml +++ b/script/docker/docker-compose.yml @@ -1,13 +1,14 @@ version: '3' services: nacos: - image: nacos/nacos-server:2.0.2 + image: nacos/nacos-server:v2.1.2 hostname: "nacos-standalone" environment: - MODE=standalone + - TZ=Asia/Shanghai volumes: - /docker/nacos/standalone-logs/:/home/nacos/logs - - /docker/nacos/init.d/custom.properties:/home/nacos/init.d/custom.properties + - /docker/nacos/conf/application.properties:/home/nacos/conf/application.properties ports: - 8848:8848 - 9848:9848 diff --git a/script/docker/nacos/conf/application.properties b/script/docker/nacos/conf/application.properties new file mode 100644 index 0000000..ac357a5 --- /dev/null +++ b/script/docker/nacos/conf/application.properties @@ -0,0 +1,46 @@ +# spring +server.servlet.contextPath=${SERVER_SERVLET_CONTEXTPATH:/nacos} +server.contextPath=/nacos +server.port=${NACOS_APPLICATION_PORT:8848} +server.tomcat.accesslog.max-days=30 +server.tomcat.accesslog.pattern=%h %l %u %t "%r" %s %b %D %{User-Agent}i %{Request-Source}i +spring.datasource.platform=${SPRING_DATASOURCE_PLATFORM:""} +nacos.cmdb.dumpTaskInterval=3600 +nacos.cmdb.eventTaskInterval=10 +nacos.cmdb.labelTaskInterval=300 +nacos.cmdb.loadDataAtStart=false +db.num=${MYSQL_DATABASE_NUM:1} +db.url.0=jdbc:mysql://${MYSQL_SERVICE_HOST}:${MYSQL_SERVICE_PORT:3306}/${MYSQL_SERVICE_DB_NAME}?${MYSQL_SERVICE_DB_PARAM:characterEncoding=utf8&connectTimeout=1000&socketTimeout=3000&autoReconnect=true&useSSL=false} +db.url.1=jdbc:mysql://${MYSQL_SERVICE_HOST}:${MYSQL_SERVICE_PORT:3306}/${MYSQL_SERVICE_DB_NAME}?${MYSQL_SERVICE_DB_PARAM:characterEncoding=utf8&connectTimeout=1000&socketTimeout=3000&autoReconnect=true&useSSL=false} +db.user=${MYSQL_SERVICE_USER} +db.password=${MYSQL_SERVICE_PASSWORD} +### The auth system to use, currently only 'nacos' and 'ldap' is supported: +nacos.core.auth.system.type=${NACOS_AUTH_SYSTEM_TYPE:nacos} +### worked when nacos.core.auth.system.type=nacos +### The token expiration in seconds: +nacos.core.auth.plugin.nacos.token.expire.seconds=${NACOS_AUTH_TOKEN_EXPIRE_SECONDS:18000} +### The default token: +nacos.core.auth.plugin.nacos.token.secret.key=${NACOS_AUTH_TOKEN:SecretKey012345678901234567890123456789012345678901234567890123456789} +### Turn on/off caching of auth information. By turning on this switch, the update of auth information would have a 15 seconds delay. +nacos.core.auth.caching.enabled=${NACOS_AUTH_CACHE_ENABLE:false} +nacos.core.auth.enable.userAgentAuthWhite=${NACOS_AUTH_USER_AGENT_AUTH_WHITE_ENABLE:false} +nacos.core.auth.server.identity.key=${NACOS_AUTH_IDENTITY_KEY:serverIdentity} +nacos.core.auth.server.identity.value=${NACOS_AUTH_IDENTITY_VALUE:security} +server.tomcat.accesslog.enabled=${TOMCAT_ACCESSLOG_ENABLED:false} +# default current work dir +server.tomcat.basedir=file:. +## spring security config +### turn off security +nacos.security.ignore.urls=${NACOS_SECURITY_IGNORE_URLS:/,/error,/**/*.css,/**/*.js,/**/*.html,/**/*.map,/**/*.svg,/**/*.png,/**/*.ico,/console-fe/public/**,/v1/auth/**,/v1/console/health/**,/actuator/**,/v1/console/server/**} +# metrics for elastic search +management.metrics.export.elastic.enabled=false +management.metrics.export.influx.enabled=false +nacos.naming.distro.taskDispatchThreadCount=10 +nacos.naming.distro.taskDispatchPeriod=200 +nacos.naming.distro.batchSyncKeyCount=1000 +nacos.naming.distro.initDataRatio=0.9 +nacos.naming.distro.syncRetryDelay=5000 +nacos.naming.data.warmup=true + + + diff --git a/script/docker/nacos/init.d/custom.properties b/script/docker/nacos/init.d/custom.properties deleted file mode 100644 index f6fd2a0..0000000 --- a/script/docker/nacos/init.d/custom.properties +++ /dev/null @@ -1,19 +0,0 @@ -#spring.security.enabled=false -#management.security=false -#security.basic.enabled=false -#nacos.security.ignore.urls=/** -#management.metrics.export.elastic.host=http://localhost:9200 -# metrics for prometheus -management.endpoints.web.exposure.include=* - -# metrics for elastic search -#management.metrics.export.elastic.enabled=false -#management.metrics.export.elastic.host=http://localhost:9200 - -# metrics for influx -#management.metrics.export.influx.enabled=false -#management.metrics.export.influx.db=springboot -#management.metrics.export.influx.uri=http://localhost:8086 -#management.metrics.export.influx.auto-create-db=true -#management.metrics.export.influx.consistency=one -#management.metrics.export.influx.compressed=true diff --git a/script/kuboard/kuboard_spring-blade.yaml b/script/kuboard/kuboard_spring-blade.yaml index 629bfc0..30f1776 100644 --- a/script/kuboard/kuboard_spring-blade.yaml +++ b/script/kuboard/kuboard_spring-blade.yaml @@ -152,7 +152,7 @@ spec: spec: containers: - name: blade-admin - image: 'swr.cn-east-2.myhuaweicloud.com/blade/blade-admin:3.5.0' + image: 'swr.cn-east-2.myhuaweicloud.com/blade/blade-admin:3.6.0' args: - '--spring.profiles.active=${PROFILE}' - '--spring.cloud.nacos.config.server-addr=${NACOS_SERVER_ADDR}' @@ -386,7 +386,7 @@ spec: spec: containers: - name: blade-auth - image: 'swr.cn-east-2.myhuaweicloud.com/blade/blade-auth:3.5.0' + image: 'swr.cn-east-2.myhuaweicloud.com/blade/blade-auth:3.6.0' args: - '--spring.profiles.active=${PROFILE}' - '--spring.cloud.nacos.config.server-addr=${NACOS_SERVER_ADDR}' @@ -625,7 +625,7 @@ spec: spec: containers: - name: blade-desk - image: 'swr.cn-east-2.myhuaweicloud.com/blade/blade-desk:3.5.0' + image: 'swr.cn-east-2.myhuaweicloud.com/blade/blade-desk:3.6.0' args: - '--spring.profiles.active=${PROFILE}' - '--spring.cloud.nacos.config.server-addr=${NACOS_SERVER_ADDR}' @@ -864,7 +864,7 @@ spec: spec: containers: - name: blade-develop - image: 'swr.cn-east-2.myhuaweicloud.com/blade/blade-develop:3.5.0' + image: 'swr.cn-east-2.myhuaweicloud.com/blade/blade-develop:3.6.0' args: - '--spring.profiles.active=${PROFILE}' - '--spring.cloud.nacos.config.server-addr=${NACOS_SERVER_ADDR}' @@ -1096,7 +1096,7 @@ spec: spec: containers: - name: blade-gateway - image: 'swr.cn-east-2.myhuaweicloud.com/blade/blade-gateway:3.5.0' + image: 'swr.cn-east-2.myhuaweicloud.com/blade/blade-gateway:3.6.0' args: - '--spring.profiles.active=${PROFILE}' - '--spring.cloud.nacos.config.server-addr=${NACOS_SERVER_ADDR}' @@ -1331,7 +1331,7 @@ spec: spec: containers: - name: blade-log - image: 'swr.cn-east-2.myhuaweicloud.com/blade/blade-log:3.5.0' + image: 'swr.cn-east-2.myhuaweicloud.com/blade/blade-log:3.6.0' args: - '--spring.profiles.active=${PROFILE}' - '--spring.cloud.nacos.config.server-addr=${NACOS_SERVER_ADDR}' @@ -1565,7 +1565,7 @@ spec: spec: containers: - name: blade-report - image: 'swr.cn-east-2.myhuaweicloud.com/blade/blade-report:3.5.0' + image: 'swr.cn-east-2.myhuaweicloud.com/blade/blade-report:3.6.0' args: - '--spring.profiles.active=${PROFILE}' - '--spring.cloud.nacos.config.server-addr=${NACOS_SERVER_ADDR}' @@ -1799,7 +1799,7 @@ spec: spec: containers: - name: blade-resource - image: 'swr.cn-east-2.myhuaweicloud.com/blade/blade-resource:3.5.0' + image: 'swr.cn-east-2.myhuaweicloud.com/blade/blade-resource:3.6.0' args: - '--spring.profiles.active=${PROFILE}' - '--spring.cloud.nacos.config.server-addr=${NACOS_SERVER_ADDR}' @@ -2033,7 +2033,7 @@ spec: spec: containers: - name: blade-system - image: 'swr.cn-east-2.myhuaweicloud.com/blade/blade-system:3.5.0' + image: 'swr.cn-east-2.myhuaweicloud.com/blade/blade-system:3.6.0' args: - '--spring.profiles.active=${PROFILE}' - '--spring.cloud.nacos.config.server-addr=${NACOS_SERVER_ADDR}' @@ -2267,7 +2267,7 @@ spec: spec: containers: - name: blade-user - image: 'swr.cn-east-2.myhuaweicloud.com/blade/blade-user:3.5.0' + image: 'swr.cn-east-2.myhuaweicloud.com/blade/blade-user:3.6.0' args: - '--spring.profiles.active=${PROFILE}' - '--spring.cloud.nacos.config.server-addr=${NACOS_SERVER_ADDR}' @@ -2496,7 +2496,7 @@ spec: spec: containers: - name: saber-web - image: 'swr.cn-east-2.myhuaweicloud.com/blade/saber-web:3.5.0' + image: 'swr.cn-east-2.myhuaweicloud.com/blade/saber-web:3.6.0' ports: - name: web containerPort: 80 @@ -2721,7 +2721,7 @@ spec: spec: containers: - name: blade-swagger - image: 'swr.cn-east-2.myhuaweicloud.com/blade/blade-swagger:3.5.0' + image: 'swr.cn-east-2.myhuaweicloud.com/blade/blade-swagger:3.6.0' args: - '--spring.profiles.active=${PROFILE}' - '--spring.cloud.nacos.config.server-addr=${NACOS_SERVER_ADDR}' @@ -3749,7 +3749,7 @@ spec: spec: containers: - name: mysql - image: 'swr.cn-east-2.myhuaweicloud.com/blade/saber-db:v3.5.0' + image: 'swr.cn-east-2.myhuaweicloud.com/blade/saber-db:v3.6.0' ports: - name: mysql containerPort: 3306