Nacos适配达梦数据库并制作镜像

背景:因项目需要信创,需将原本的mysql数据库,改成达梦数据库

一、部署达梦数据库

1.1 部署达梦数据库服务

可参考:Docker安装达梦数据库_达梦数据库docker镜像-CSDN博客

1.2 创建nacos数据库

create user SAFE_NACOS identified by "Safehub@2024";

grant "PUBLIC","SOI","VTI" to "SAFE_NACOS";

grant create table to "SAFE_NACOS";

CREATE SCHEMA "SAFE_NACOS" AUTHORIZATION "SAFE_NACOS";

1.3 适配了达梦的nacos脚本

CREATE TABLE "SAFE_NACOS"."CONFIG_INFO"(
"ID" BIGINT NOT NULL AUTO_INCREMENT COMMENT 'ID',
"DATA_ID" VARCHAR(255) NOT NULL COMMENT 'DATA_ID',
"GROUP_ID" VARCHAR(128) DEFAULT NULL COMMENT 'GROUP_ID',
"CONTENT" CLOB NOT NULL  COMMENT 'CONTENT',
"MD5" VARCHAR(32) DEFAULT NULL COMMENT 'MD5',
"GMT_CREATE" DATETIME NOT NULL DEFAULT CURRENT_TIMESTAMP COMMENT '创建时间',
"GMT_MODIFIED" DATETIME NOT NULL DEFAULT CURRENT_TIMESTAMP COMMENT '修改时间',
"SRC_USER" TEXT COMMENT 'SOURCE USER',
"SRC_IP" VARCHAR(50) DEFAULT NULL COMMENT 'SOURCE IP',
"APP_NAME" VARCHAR(128) DEFAULT NULL COMMENT 'APP_NAME',
"TENANT_ID" VARCHAR(128) DEFAULT '' COMMENT '租户字段',
"C_DESC" VARCHAR(256) DEFAULT NULL COMMENT 'CONFIGURATION DESCRIPTION',
"C_USE" VARCHAR(64) DEFAULT NULL COMMENT 'CONFIGURATION USAGE',
"EFFECT" VARCHAR(64) DEFAULT NULL COMMENT '配置生效的描述',
"TYPE" VARCHAR(64) DEFAULT NULL COMMENT '配置的类型',
"C_SCHEMA" TEXT COMMENT '配置的模式',
"ENCRYPTED_DATA_KEY" VARCHAR(1024) NOT NULL DEFAULT '' COMMENT '密钥',
NOT CLUSTER PRIMARY KEY("ID")
);
COMMENT ON TABLE "SAFE_NACOS"."CONFIG_INFO" IS '配置表' ;
CREATE UNIQUE INDEX "UK_CONFIGINFO_DATAGROUPTENANT" ON "SAFE_NACOS"."CONFIG_INFO"("DATA_ID","GROUP_ID","TENANT_ID");/******************************************/
/* 表名称 = CONFIG_INFO_AGGR */
/******************************************/
CREATE TABLE "SAFE_NACOS"."CONFIG_INFO_AGGR" (
"ID" BIGINT NOT NULL AUTO_INCREMENT COMMENT 'ID',
"DATA_ID" VARCHAR(255) NOT NULL COMMENT 'DATA_ID',
"GROUP_ID" VARCHAR(128) NOT NULL COMMENT 'GROUP_ID',
"DATUM_ID" VARCHAR(255) NOT NULL COMMENT 'DATUM_ID',
"CONTENT" Clob NOT NULL COMMENT '内容',
"GMT_MODIFIED" DATETIME NOT NULL COMMENT '修改时间',
"APP_NAME" VARCHAR(128) DEFAULT NULL COMMENT 'APP_NAME',
"TENANT_ID" VARCHAR(128) DEFAULT '' COMMENT '租户字段',
NOT CLUSTER PRIMARY KEY ("ID")
);
COMMENT ON TABLE "SAFE_NACOS"."CONFIG_INFO_AGGR" IS '增加租户字段' ;
CREATE UNIQUE INDEX "UK_CONFIGINFOAGGR_DATAGROUPTENANTDATUM" ON "SAFE_NACOS"."CONFIG_INFO_AGGR"("DATA_ID","GROUP_ID","TENANT_ID");/******************************************/
/* 表名称 = CONFIG_INFO_BETA */
/******************************************/
CREATE TABLE "SAFE_NACOS"."CONFIG_INFO_BETA" (
"ID" BIGINT NOT NULL AUTO_INCREMENT COMMENT 'ID',
"DATA_ID" VARCHAR(255) NOT NULL COMMENT 'DATA_ID',
"GROUP_ID" VARCHAR(128) NOT NULL COMMENT 'GROUP_ID',
"APP_NAME" VARCHAR(128) DEFAULT NULL COMMENT 'APP_NAME',
"CONTENT" Clob NOT NULL COMMENT 'CONTENT',
"BETA_IPS" VARCHAR(1024) DEFAULT NULL COMMENT 'BETAIPS',
"MD5" VARCHAR(32) DEFAULT NULL COMMENT 'MD5',
"GMT_CREATE" DATETIME NOT NULL DEFAULT CURRENT_TIMESTAMP COMMENT '创建时间',
"GMT_MODIFIED" DATETIME NOT NULL DEFAULT CURRENT_TIMESTAMP COMMENT '修改时间',
"SRC_USER" TEXT COMMENT 'SOURCE USER',
"SRC_IP" VARCHAR(50) DEFAULT NULL COMMENT 'SOURCE IP',
"TENANT_ID" VARCHAR(128) DEFAULT '' COMMENT '租户字段',"ENCRYPTED_DATA_KEY" VARCHAR(1024) NOT NULL DEFAULT '' COMMENT '密钥',
NOT CLUSTER PRIMARY KEY ("ID")
);
COMMENT ON TABLE "SAFE_NACOS"."CONFIG_INFO_BETA" IS 'CONFIG_INFO_BETA' ;CREATE UNIQUE INDEX "UK_CONFIGINFOBETA_DATAGROUPTENANT" ON "SAFE_NACOS"."CONFIG_INFO_BETA"("DATA_ID","GROUP_ID","TENANT_ID");/******************************************/
/* 表名称 = CONFIG_INFO_TAG*/
/******************************************/
CREATE TABLE "SAFE_NACOS"."CONFIG_INFO_TAG" (
"ID" BIGINT NOT NULL AUTO_INCREMENT COMMENT 'ID',
"DATA_ID" VARCHAR(255) NOT NULL COMMENT 'DATA_ID',
"GROUP_ID" VARCHAR(128) NOT NULL COMMENT 'GROUP_ID',
"TENANT_ID" VARCHAR(128) DEFAULT '' COMMENT 'TENANT_ID',
"TAG_ID" VARCHAR(128) NOT NULL COMMENT 'TAG_ID',
"APP_NAME" VARCHAR(128) DEFAULT NULL COMMENT 'APP_NAME',
"CONTENT" CLOB NOT NULL COMMENT 'CONTENT',
"MD5" VARCHAR(32) DEFAULT NULL COMMENT 'MD5',
"GMT_CREATE" DATETIME NOT NULL DEFAULT CURRENT_TIMESTAMP COMMENT '创建时间',
"GMT_MODIFIED" DATETIME NOT NULL DEFAULT CURRENT_TIMESTAMP COMMENT '修改时间',
"SRC_USER" TEXT COMMENT 'SOURCE USER',
"SRC_IP" VARCHAR(50) DEFAULT NULL COMMENT 'SOURCE IP',
NOT CLUSTER PRIMARY KEY ("ID")
);
COMMENT ON TABLE "SAFE_NACOS"."CONFIG_INFO_TAG" IS 'CONFIG_INFO_TAG' ;
CREATE UNIQUE INDEX "UK_CONFIGINFOTAG_DATAGROUPTENANTTAG" ON "SAFE_NACOS"."CONFIG_INFO_TAG"("DATA_ID","GROUP_ID","TENANT_ID","TAG_ID");/******************************************/
/* 表名称 = CONFIG_TAGS_RELATION */
/******************************************/
CREATE TABLE "SAFE_NACOS"."CONFIG_TAGS_RELATION" (
"ID" BIGINT NOT NULL COMMENT 'ID',
"TAG_NAME" VARCHAR(128) NOT NULL COMMENT 'TAG_NAME',
"TAG_TYPE" VARCHAR(64) DEFAULT NULL COMMENT 'TAG_TYPE',
"DATA_ID" VARCHAR(255) NOT NULL COMMENT 'DATA_ID',
"GROUP_ID" VARCHAR(128) NOT NULL COMMENT 'GROUP_ID',
"TENANT_ID" VARCHAR(128) DEFAULT '' COMMENT 'TENANT_ID',
"NID" BIGINT NOT NULL AUTO_INCREMENT COMMENT 'NID, 自增长标识',
NOT CLUSTER PRIMARY KEY ("NID")
);
COMMENT ON TABLE "SAFE_NACOS"."CONFIG_TAGS_RELATION" IS 'CONFIG_TAG_RELATION' ;
CREATE UNIQUE INDEX "UK_CONFIGTAGRELATION_CONFIGIDTAG" ON "SAFE_NACOS"."CONFIG_TAGS_RELATION"("ID","TAG_NAME","TAG_TYPE");
CREATE INDEX "IDX_TENANT_ID" ON "SAFE_NACOS"."CONFIG_TAGS_RELATION"("TENANT_ID");/******************************************/
/* 表名称 = GROUP_CAPACITY */
/******************************************/
CREATE TABLE "SAFE_NACOS"."GROUP_CAPACITY" (
"ID" BIGINT NOT NULL AUTO_INCREMENT COMMENT '主键ID',
"GROUP_ID" VARCHAR(128) NOT NULL DEFAULT '' COMMENT 'GROUP ID,空字符表示整个集群',
"QUOTA" INT  NOT NULL DEFAULT '0' COMMENT '配额,0表示使用默认值',
"USAGE" INT  NOT NULL DEFAULT '0' COMMENT '使用量',
"MAX_SIZE" INT  NOT NULL DEFAULT '0' COMMENT '单个配置大小上限,单位为字节,0表示使用默认值',
"MAX_AGGR_COUNT" INT  NOT NULL DEFAULT '0' COMMENT '聚合子配置最大个数,,0表示使用默认值',
"MAX_AGGR_SIZE" INT  NOT NULL DEFAULT '0' COMMENT '单个聚合数据的子配置大小上限,单位为字节,0表示使用默认值',
"MAX_HISTORY_COUNT" INT  NOT NULL DEFAULT '0' COMMENT '最大变更历史数量',
"GMT_CREATE" DATETIME NOT NULL DEFAULT CURRENT_TIMESTAMP COMMENT '创建时间',
"GMT_MODIFIED" DATETIME NOT NULL DEFAULT CURRENT_TIMESTAMP COMMENT '修改时间',
NOT CLUSTER PRIMARY KEY ("ID")
);
COMMENT ON TABLE "SAFE_NACOS"."GROUP_CAPACITY" IS '集群、各GROUP容量信息表' ;
CREATE UNIQUE INDEX "UK_GROUP_ID" ON "SAFE_NACOS"."GROUP_CAPACITY"("GROUP_ID");/******************************************/
/* 表名称 = HIS_CONFIG_INFO*/
/******************************************/
CREATE TABLE "SAFE_NACOS"."HIS_CONFIG_INFO" (
"ID" BIGINT  NOT NULL COMMENT 'ID',
"NID" BIGINT  NOT NULL AUTO_INCREMENT COMMENT 'NID, 自增标识',
"DATA_ID" VARCHAR(255) NOT NULL COMMENT 'DATA_ID',
"GROUP_ID" VARCHAR(128) NOT NULL COMMENT 'GROUP_ID',
"APP_NAME" VARCHAR(128) DEFAULT NULL COMMENT 'APP_NAME',
"CONTENT" CLOB NOT NULL COMMENT 'CONTENT',
"MD5" VARCHAR(32) DEFAULT NULL COMMENT 'MD5',
"GMT_CREATE" DATETIME NOT NULL DEFAULT CURRENT_TIMESTAMP COMMENT '创建时间',
"GMT_MODIFIED" DATETIME NOT NULL DEFAULT CURRENT_TIMESTAMP COMMENT '修改时间',
"SRC_USER" TEXT COMMENT 'SOURCE USER',
"SRC_IP" VARCHAR(50) DEFAULT NULL COMMENT 'SOURCE IP',
"OP_TYPE" CHAR(10) DEFAULT NULL COMMENT 'OPERATION TYPE',
"TENANT_ID" VARCHAR(128) DEFAULT '' COMMENT '租户字段',"ENCRYPTED_DATA_KEY" VARCHAR(1024) NOT NULL DEFAULT '' COMMENT '密钥',
PRIMARY KEY ("NID")
);
COMMENT ON TABLE "SAFE_NACOS"."HIS_CONFIG_INFO" IS '多租户改造' ;
CREATE INDEX "IDX_GMT_CREATE" ON "SAFE_NACOS"."HIS_CONFIG_INFO"("GMT_CREATE");
CREATE INDEX "IDX_GMT_MODIFIED" ON "SAFE_NACOS"."HIS_CONFIG_INFO"("GMT_MODIFIED");
CREATE INDEX "IDX_DID" ON "SAFE_NACOS"."HIS_CONFIG_INFO"("DATA_ID");/******************************************/
/* 表名称 = TENANT_CAPACITY*/
/******************************************/
CREATE TABLE "SAFE_NACOS"."TENANT_CAPACITY" (
"ID" BIGINT  NOT NULL AUTO_INCREMENT COMMENT '主键ID',
"TENANT_ID" VARCHAR(128) NOT NULL DEFAULT '' COMMENT 'TENANT ID',
"QUOTA" INT  NOT NULL DEFAULT '0' COMMENT '配额,0表示使用默认值',
"USAGE" INT  NOT NULL DEFAULT '0' COMMENT '使用量',
"MAX_SIZE" INT  NOT NULL DEFAULT '0' COMMENT '单个配置大小上限,单位为字节,0表示使用默认值',
"MAX_AGGR_COUNT" INT  NOT NULL DEFAULT '0' COMMENT '聚合子配置最大个数',
"MAX_AGGR_SIZE" INT  NOT NULL DEFAULT '0' COMMENT '单个聚合数据的子配置大小上限,单位为字节,0表示使用默认值',
"MAX_HISTORY_COUNT" INT  NOT NULL DEFAULT '0' COMMENT '最大变更历史数量',
"GMT_CREATE" DATETIME NOT NULL DEFAULT CURRENT_TIMESTAMP COMMENT '创建时间',
"GMT_MODIFIED" DATETIME NOT NULL DEFAULT CURRENT_TIMESTAMP COMMENT '修改时间',
PRIMARY KEY ("ID")
);
COMMENT ON TABLE "SAFE_NACOS"."TENANT_CAPACITY" IS '租户容量信息表' ;
CREATE UNIQUE INDEX "UK_TENANT_ID" ON "SAFE_NACOS"."TENANT_CAPACITY"("TENANT_ID");CREATE TABLE "SAFE_NACOS"."TENANT_INFO" (
"ID" BIGINT NOT NULL AUTO_INCREMENT COMMENT 'ID',
"KP" VARCHAR(128) NOT NULL COMMENT 'KP',
"TENANT_ID" VARCHAR(128) DEFAULT '' COMMENT 'TENANT_ID',
"TENANT_NAME" VARCHAR(128) DEFAULT '' COMMENT 'TENANT_NAME',
"TENANT_DESC" VARCHAR(256) DEFAULT NULL COMMENT 'TENANT_DESC',
"CREATE_SOURCE" VARCHAR(32) DEFAULT NULL COMMENT 'CREATE_SOURCE',
"GMT_CREATE" BIGINT NOT NULL COMMENT '创建时间',
"GMT_MODIFIED" BIGINT NOT NULL COMMENT '修改时间',
PRIMARY KEY ("ID")
);COMMENT ON TABLE "SAFE_NACOS"."TENANT_INFO" IS 'TENANT_INFO' ;
CREATE UNIQUE INDEX "UK_TENANT_INFO_KPTENANTID" ON "SAFE_NACOS"."TENANT_INFO"("KP","TENANT_ID");
CREATE INDEX "IDX_TENANTIN_ID" ON "SAFE_NACOS"."TENANT_INFO"("TENANT_ID");CREATE TABLE "SAFE_NACOS"."USERS" (
"ID" BIGINT NOT NULL AUTO_INCREMENT COMMENT 'ID',"USERNAME" VARCHAR(50) NOT NULL COMMENT 'USERNAME',"PASSWORD" VARCHAR(500) NOT NULL COMMENT 'PASSWORD',"ENABLED" int NOT NULL COMMENT 'ENABLED',
PRIMARY KEY ("ID")
);CREATE TABLE "SAFE_NACOS"."ROLES" (
"ID" BIGINT NOT NULL AUTO_INCREMENT COMMENT 'ID',"USERNAME" VARCHAR(50) NOT NULL COMMENT 'USERNAME',"ROLE" VARCHAR(50) NOT NULL COMMENT 'ROLE',
PRIMARY KEY ("ID")
);
CREATE UNIQUE INDEX "IDX_USER_ROLE" ON "SAFE_NACOS"."ROLES" ("USERNAME" ASC, "ROLE" ASC);CREATE TABLE "SAFE_NACOS"."PERMISSIONS" (
"ID" BIGINT NOT NULL AUTO_INCREMENT COMMENT 'ID',
"ROLE" VARCHAR(50) NOT NULL COMMENT 'ROLE',
"RESOURCE" VARCHAR(128) NOT NULL COMMENT 'RESOURCE',
"ACTION" VARCHAR(8) NOT NULL COMMENT 'ACTION',
PRIMARY KEY ("ID")
);
CREATE UNIQUE INDEX "UK_ROLE_PERMISSION" ON "SAFE_NACOS"."PERMISSIONS" ("ROLE","RESOURCE","ACTION");INSERT INTO "SAFE_NACOS".users (username, password, enabled) VALUES ('nacos', '$2a$10$EuWPZHzz32dJN7jexM34MOeYirDdFAZm2kuWj7VEOJhhZkDrxfvUu', TRUE);INSERT INTO "SAFE_NACOS".roles (username, role) VALUES ('nacos', 'ROLE_ADMIN');

二、nacos适配达梦数据库

这里以nacos-2.1.0为例子

2.1 下载nacos2.1.0源码

可参考:GitHub - alibaba/nacos at 2.1.0

2.2  修改nacos源码适配达梦数据库

2.2.1 引入达梦驱动依赖

首先在根目录的pom.xml中引入达梦数据库依赖

<dm-connector-java.version>8.1.1.49</dm-connector-java.version>

<dependency>

                <groupId>com.dameng</groupId>

                <artifactId>Dm8JdbcDriver18</artifactId>

                <version>${dm-connector-java.version}</version>

</dependency>

2.2.2 修改nacos-config模块下的ExternalDataSourceProperties

具体代码如下: 

/** Copyright 1999-2018 Alibaba Group Holding Ltd.** 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 com.alibaba.nacos.config.server.service.datasource;import com.alibaba.nacos.common.utils.Preconditions;
import com.zaxxer.hikari.HikariDataSource;
import org.apache.commons.collections.CollectionUtils;
import org.apache.commons.lang.StringUtils;
import org.springframework.boot.context.properties.bind.Bindable;
import org.springframework.boot.context.properties.bind.Binder;
import org.springframework.core.env.Environment;import java.util.ArrayList;
import java.util.List;
import java.util.Objects;
import java.util.concurrent.TimeUnit;import static com.alibaba.nacos.common.utils.CollectionUtils.getOrDefault;/*** Properties of external DataSource.** @author Nacos*/
public class ExternalDataSourceProperties {private static final String JDBC_DRIVER_NAME = "com.mysql.cj.jdbc.Driver";private static final String TEST_QUERY = "SELECT 1";private Integer num;private String jdbcDriverName;private List<String> url = new ArrayList<>();private List<String> user = new ArrayList<>();private List<String> password = new ArrayList<>();public void setNum(Integer num) {this.num = num;}public void setUrl(List<String> url) {this.url = url;}public void setUser(List<String> user) {this.user = user;}public void setPassword(List<String> password) {this.password = password;}public String getJdbcDriverName() {return jdbcDriverName;}public void setJdbcDriverName(String jdbcDriverName) {this.jdbcDriverName = jdbcDriverName;}/*** Build serveral HikariDataSource.** @param environment {@link Environment}* @param callback    Callback function when constructing data source* @return List of {@link HikariDataSource}*/List<HikariDataSource> build(Environment environment, Callback<HikariDataSource> callback) {List<HikariDataSource> dataSources = new ArrayList<>();Binder.get(environment).bind("db", Bindable.ofInstance(this));Preconditions.checkArgument(Objects.nonNull(num), "db.num is null");Preconditions.checkArgument(CollectionUtils.isNotEmpty(user), "db.user or db.user.[index] is null");Preconditions.checkArgument(CollectionUtils.isNotEmpty(password), "db.password or db.password.[index] is null");for (int index = 0; index < num; index++) {int currentSize = index + 1;Preconditions.checkArgument(url.size() >= currentSize, "db.url.%s is null", index);DataSourcePoolProperties poolProperties = DataSourcePoolProperties.build(environment);poolProperties.setDriverClassName(JDBC_DRIVER_NAME);poolProperties.setJdbcUrl(url.get(index).trim());poolProperties.setUsername(getOrDefault(user, index, user.get(0)).trim());poolProperties.setPassword(getOrDefault(password, index, password.get(0)).trim());HikariDataSource ds = poolProperties.getDataSource();ds.setConnectionTestQuery(TEST_QUERY);ds.setIdleTimeout(TimeUnit.MINUTES.toMillis(10L));ds.setConnectionTimeout(TimeUnit.SECONDS.toMillis(3L));System.out.println("#################################");System.out.println("jdbcDriverName=" + jdbcDriverName);if (StringUtils.isNotEmpty(jdbcDriverName)) {// 增加其他数据库驱动的支持ds.setDriverClassName(jdbcDriverName);} else {//默认使用mysql驱动ds.setDriverClassName(JDBC_DRIVER_NAME);}System.out.println("#################################");System.out.println("dataSources=" + dataSources);dataSources.add(ds);callback.accept(ds);}Preconditions.checkArgument(CollectionUtils.isNotEmpty(dataSources), "no datasource available");return dataSources;}interface Callback<D> {/*** Perform custom logic.** @param datasource dataSource.*/void accept(D datasource);}
}
2.2.3 修改nacos-console模块下的application.properties

### Count of DB:

db.num=1

db.jdbcDriverName=dm.jdbc.driver.DmDriver

db.url.0=jdbc:dm://10.136.xxx.xxx:5237?schema=SAFE_NACOS&characterEncoding=UTF-8&useUnicode=true&serverTimezone=Asia/Shanghai

db.user=SAFE_NACOS

db.password=Safehub@2024

2.3 重新打包nacos

在nacos项目下打开终端输入以下命令

mvn -Prelease-nacos -Dmaven.test.skip=true -Dpmd.skip=true -Dcheckstyle.skip=true clean install -U

运行成功后会在/nacos/distribution/target目录下生成如下文件

至此,新的nacos已改造完成。

三、制作nacos-dm.tar镜像

3.1 编写Dockerfile文件

vi  Dockerfile

FROM java:8

MAINTAINER wx

ENV JAVA_HOME=/usr/lib/jvm/jdk1.8.0_181

ENV PATH=$PATH:$JAVA_HOME/bin

ENV LC_ALL=en_US.utf8

ENV LANG=en_US.utf8

ENV LANGUAGE=en_US.utf8

ADD nacos-server.jar app.jar

EXPOSE 8848

ENTRYPOINT ["java", "-Dfile.encoding=utf-8","-jar", "app.jar"]

PS:docker已有基础镜像java:8

3.2 编写构建镜像脚本

vi nacos_built.sh(PS:Dockerfile和jar包在同一目录下)

app_name='nacos-dm'

docker stop ${app_name}

docker rm -f ${app_name}

sleep 2

docker build -t nacos-dm .

3.3 启动nacos-dm容器

3.3.1 创建/home/nacos/mydata/conf//home/nacos/mydata/logs目录

并将下面两个文件copy进/home/nacos/mydata/conf/

3.3.2 修改application.properties文件


application.properties完整内容如下:

# 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

server.tomcat.accesslog.enabled=${TOMCAT_ACCESSLOG_ENABLED:false}

server.error.include-message=ALWAYS

# default current work dir

server.tomcat.basedir=file:.

#*************** Config Module Related Configurations ***************#

### Deprecated configuration property, it is recommended to use `spring.sql.init.platform` replaced.

#spring.datasource.platform=${SPRING_DATASOURCE_PLATFORM:}

spring.sql.init.platform=${SPRING_DATASOURCE_PLATFORM:dm}

nacos.cmdb.dumpTaskInterval=3600

nacos.cmdb.eventTaskInterval=10

nacos.cmdb.labelTaskInterval=300

nacos.cmdb.loadDataAtStart=false

db,jdbcDriverName=${DM_DRIVER:dm.jdbc.driver.DmDriver}

db.num=${MYSQL_DATABASE_NUM:1}

db.url.0=jdbc:dm://${MYSQL_SERVICE_HOST:10.136.xxx.xx}:${MYSQL_SERVICE_PORT:5237}/${MYSQL_SERVICE_DB_NAME:SAFE_NACOS}?${MYSQL_SERVICE_DB_PARAM:characterEncoding=utf8&connectTimeout=1000&socketTimeout=3000&autoReconnect=true&useSSL=false}

db.user.0=${MYSQL_SERVICE_USER:SAFE_NACOS}

db.password.0=${MYSQL_SERVICE_PASSWORD:Safehub@2024}

### 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:SecretKey01234567890123456789012345345678999987654901234567890123456789}

### 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.enable=true

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:example}

nacos.core.auth.server.identity.value=${NACOS_AUTH_IDENTITY_VALUE:example}

## 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

3.3.3 编写cluster.conf

目前内容为空

3.4 编写启动脚本

vi docker-startup.sh

app_name='nacos-dm'

docker stop ${app_name}

echo '--------stop container-------------'

docker rm ${app_name}

echo '--------rm container---------------'

docker run -p 8848:8848 --name ${app_name} \

        -e MODE=standalone \

        -e TZ="Asia/Shanghai"\

        --restart always\

        -v /etc/localtime:/etc/localtime \

        -v /home/nacos/mydata/conf/:/root/nacos/conf/ \

        -v /home/nacos/mydata/logs/:/root/nacos/logs \

        -d ${app_name}

echo '---------start container---------'

3.5 打成tar包

docker save -o nacos-dm.tar nacos-dm

四、遇到的问题

4.1 出现错误:[Too many errors, abort] [error occurred during error reporting , id 0xb] 

可能是docker容器问题,添加docker内存配置:

vi /etc/profile

ulimit -n 65535

vi /etc/systemd/system/docker.service

ExecReload=/bin/kill -s HUP $MAINPID

LimitNOFILE=65535

LimitNPROC=65535

LimitCORE=65535

然后重启加载配置并启动

systemctl daemon-reload

systemctl restart docker

4.2 container_linux.go:318 permission denied””: unknown

改写启动脚本,增加:--privileged=true

app_name='nacos-dm'
docker stop ${app_name}
echo '--------stop container-------------'

docker rm ${app_name}
echo '--------rm container---------------'

docker run -p 8848:8848 --name ${app_name} \
        -e MODE=standalone \
        -m 3g \
        --privileged=true \
    -e TZ="Asia/Shanghai" \
        --restart always \
    -v /etc/localtime:/etc/localtime \
        -v /home/nacos/mydata/conf/:/root/nacos/conf/ \
    -v /home/nacos/mydata/logs/:/root/nacos/logs \
    -d ${app_name}

echo '---------start container---------'

五、使用现成的nacos-dm.tar, 部署适配过达梦数据库的nacos服务

5.1 上传nacos-dm.tar镜像

5.2 上传docker-startup.sh启动脚本

5.3 在/home/目录下创建nacos/mydata/conf,nacos/mydata/logs目录

cd /home

mkdir -p {nacos/mydata/conf,nacos/mydata/logs}

5.4 在/home/nacos/mydata/conf目录下上传application.properties、cluster.conf文件

最终如下图:

ps:docker-startup.sh,application.properties,cluster.conf内容见上文(三、制作nacos-dm.tar镜像)

5.5 加载镜像

docker load < nacos-dm.tar

5.6 启动nacos容器

sh docker-startup.sh

5.7 查看nacos服务是否启动成功

docker logs --tail=400 -f nacos-dm

5.8 在浏览器输入地址

http://10.136.xx.xxx:8848/nacos/#

ps: nacos默认用户名nacos/nacos

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/876409.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

放大电路总结

补充: 只有直流移动时才有Rbe动态等效电阻 从RsUs看进去,实际上不管接了什么东西都能够看成是一个Ri(输入电阻) Ri Ui/Ii Rb//Rbe Ui/Us Ri/(RiRs) Aus (Uo/Ui)*(Ui/Us) Au *Ri/(RiRs) 当前面是一个电压源的信号 我们就需要输入电阻更大 Ro--->输出电阻--->将…

VSCode+git的gitee仓库搭建

​ 在此之前你已经在gitee创建好了账号&#xff0c;并新建了一个仓库。 1. 安装 Visual Studio Code Visual Studio Code 是编辑 Markdown 和站点配置文件的基础&#xff0c;以下将其简称为 VSCode&#xff0c;你可以在它的 官方网站 下载到它。 如若不理解各个版本之间的区别…

【C++ —— 用一棵红黑树同时封装出map和set】

C —— 用一棵红黑树同时封装出map和set 总览RBTreeMyMapMySet 红黑树源代码红黑树模板参数的控制模板参数中仿函数的增加迭代器模拟1. 迭代器的定义和结构2. 迭代器的操作符重载 set模拟map模拟代码红黑树的代码set的代码map的代码 总览 RBTree enum Colour {RED,BLACK };//…

算法板子:Trie树——存储字符串、查找字符串的出现次数

#include <iostream> using namespace std;const int N 1e6 10;// Trie树是一个集合&#xff0c;可以存储字符串 // son二维数组中&#xff0c;每行代表一个节点&#xff0c;该行的每列都是它的儿子&#xff0c;最多26列代表一个节点最多26个儿子(题目中说了都是小写字…

photoshop学习笔记——选区3

从窗口面板可以打开历史记录面板&#xff0c;历史记录面板保存了所有的操作 可以点击历史记录中某一条&#xff0c;回到当时的操作状态&#xff0c;也可以通过编辑中的 还原、重做、切换到最终状态逐步调整或直接跳到最终状态 回退之后&#xff0c;如果有新的操作&#xff0c;历…

WordPress文章标题定制化前缀插件

引言 在当今互联网的海洋中&#xff0c;吸引读者眼球的第一步往往始于文章标题的设计。对于WordPress博主而言&#xff0c;如何让每篇文章的标题更加个性化和吸引人&#xff0c;成为了一项重要的任务。传统的自定义CSS方法虽然可行&#xff0c;但其繁琐的操作和有限的美学效果…

【高校科研前沿】浙江农林大学童再康教授等人在农林科学顶刊《CATENA》发文:长期覆盖作物可促进多养分循环和地下土壤碳封存

文章简介 论文名称&#xff1a;Long-term cover crops boost multi-nutrient cycling and subsurface soil carbon sequestration by alleviating microbial carbon limitation in a subtropical forest&#xff08;长期覆盖作物通过缓解亚热带森林中微生物的碳限制&#xff0c…

常见的jmeter面试题及答案

1、解释什么是JMeter? JMeter是一款Java开源工具&#xff0c; 用于性能负载测试。它旨在分析和衡量Web应用程序和各种服务的性能和负载功能行为。 2、说明JMeter的工作原理? JMeter就像一群将请求发送到目标服务器的用户-样。它收集来自目标服务器的响应以及其他统计数据&…

每日OJ_牛客_HJ91 走方格的方案数

目录 牛客HJ91 走方格的方案数 解析代码 牛客HJ91 走方格的方案数 走方格的方案数_牛客题霸_牛客网 解析代码 本题为求取路径总数的题目&#xff0c;一般可以通过递归求解&#xff0c;对于复杂的问题&#xff0c;可以通过动态规划求解。此题比较简单&#xff0c;也可以通过递…

Vue2和Vue3实战代码中的小差异(实时更新)

目录 前言1. 未使用自闭合标签2. 事件名连字符3. 换行符4. 弃用.sync 前言 以下文章实时更新&#xff0c;主打记录差异 1. 未使用自闭合标签 104:7 error Require self-closing on Vue.js custom components (<el-table-column>) vue/html-self-closing✖ 1 problem…

Logback 快速入门

一、简介 Java 开源日志框架&#xff0c;以继承改善 log4j 为目的而生&#xff0c;是 log4j 创始人 Ceki Glc 的开源产品。 它声称有极佳的性能&#xff0c;占用空间更小&#xff0c;且提供其他日志系统缺失但很有用的特性。 其一大特色是&#xff0c;在 logback-classic 中本…

大模型算法备案流程最详细说明【流程+附件】

文章目录 一、语料安全评估 二、黑盒测试 三、模型安全措施评估 四、性能评估 五、性能评估 六、安全性评估 七、可解释性评估 八、法律和合规性评估 九、应急管理措施 十、材料准备 十一、【线下流程】大模型备案线下详细步骤说明 十二、【线上流程】算法备案填报…

QT vs2019编译报错LNK2019无法解析的外部符号

严重性 代码 说明 项目 文件 行 禁止显示状态 错误 LNK2019 无法解析的外部符号 "public: __cdecl Dialog_Setting::Dialog_Setting(class QWidget *)" (??0Dialog_SettingQEAAPEAVQWidgetZ)&#xff0c;函数 "public: __cdecl QtWid…

工业现场实测,焦化厂导烟车与装煤车风机实现无人作业

一、项目背景 作为我国重要的能源行业之一&#xff0c;焦化行业在国民经济中扮演着重要角色&#xff0c;焦化工艺是高温、高压、有毒物质等因素共同作用下进行的&#xff0c;因此存在着安全隐患&#xff0c;并伴有环境污染&#xff0c;改善焦化工艺的安全和环保问题是当前亟待…

Golang | Leetcode Golang题解之第287题寻找重复数

题目&#xff1a; 题解&#xff1a; func findDuplicate(nums []int) int {slow, fast : 0, 0for slow, fast nums[slow], nums[nums[fast]]; slow ! fast; slow, fast nums[slow], nums[nums[fast]] { }slow 0for slow ! fast {slow nums[slow]fast nums[fast]}return s…

分布式搜索引擎ES-DSL搜索详解

1.DSL搜索-入门语法 建立索引&#xff1a; xxx(自定义名称) 自定义mapping: POST /shop/_mapping {"properties": {"id": {"type": "long"},"age": {"type": "integer"},"username": {&quo…

Springboot 多数据源事务

起因 在一个service方法上使用的事务,其中有方法是调用的多数据源orderDB 但是多数据源没有生效,而是使用的primaryDB 原因 spring 事务实现的方式 以 Transactional 注解为例 (也可以看 TransactionTemplate&#xff0c; 这个流程更简单一点)。 入口&#xff1a;ProxyTransa…

Java语言程序设计——篇九(1)

&#x1f33f;&#x1f33f;&#x1f33f;跟随博主脚步&#xff0c;从这里开始→博主主页&#x1f33f;&#x1f33f;&#x1f33f; 内部类 概述内部类—内部类的分类成员内部类实战演练 局部内部类实战演练 匿名内部类实战演练 静态内部类实战演练 概述 内部类或嵌套类&#…

sheng的学习笔记-AI-公式-指数加权移动平均(EWMA)

AI目录&#xff1a;sheng的学习笔记-AI目录-CSDN博客 基础知识 指数加权移动平均&#xff08;Exponential Weighted Moving Average&#xff09;&#xff0c;是一种常用的序列处理方式 看例子&#xff0c;首先这是一年365天的温度散点图&#xff0c;以天数为横坐标&#xff0…

【学一点儿前端】本地或jenkins打包报错:getaddrinfo ENOTFOUND registry.nlark.com.

问题 今天jenkins打包一个项目&#xff0c;发现报错了 error An unexpected error occurred: "https://registry.nlark.com/xxxxxxxxxx.tgz: getaddrinfo ENOTFOUND registry.nlark.com". 先写解决方案 把yarn.lock文件里面的registry.nlark.com替换为registry.npmmi…