由于nacos原生只支持内存数据库与mysql,对于一些国产化数据库来说并没有做好适配,那么笔者想专门说一说对于一些国产化数据库该如何去进行nacos的配置,笔者将会从nacos的部署到人大金仓(kingbase)的配置,讲解这整个流程中的操作方式,下面直接进入正题。

第一步:获取Nacos镜像

使用pull拉取最新nacos镜像

docker pull nacos/nacos-server

第二步:获取数据库驱动jar包

官网也给出了下载地址https://download.kingbase.com.cn/xzzx/index.htm,同样选择对应的数据库版本,然后在“软件版本">"接口驱动”中进行下载,可以在下载解压后的压缩包里找到对应版本的驱动包

那么这里笔者将会使用kingbase8-8.6.0.jar这个驱动,按照实际情况选择对应的包即可

第三步:创建持久化目录(conf、logs、data、libs)

笔者在根目录data文件中创建,你也可以选择其它位置作为你的之后挂载节点

cd /data 
mkdir nacos
cd /data/nacos
mkdir conf
mkdir logs
mkdir libs

文件目录结构如下

第四步:上传数据库驱动包至libs文件夹

这一步没啥好说的,有手就行

第五步:编写application.properties配置文件

# 这里这个mysql不用管,不影响最终连接kingbase
spring.datasource.platform=mysql
db.num=1
# 【需要修改】这里替换成你的数据库连接ip和端口,其它参数不要动
db.url.0=jdbc:kingbase8://127.0.0.1:54321/nacos_config?allowEncodingChanges=true&clientEncoding=UTF8
# 【需要修改】数据库认证用户
db.user.0=admin
# 【需要修改】数据库认证密码
db.password.0=admin123
# 开启集群鉴权
nacos.core.auth.enabled=true
nacos.core.auth.enable.userAgentAuthWhite=false
nacos.core.auth.plugin.nacos.token.secret.key=${NACOS_AUTH_TOKEN:iW0hB1iM1gX3uG5bF1kB4wB4gY9oP0pR9yI4fK0zE4kJ3gR9vU8uV9uH3xP8cJ7hX3uX5xO0}
nacos.core.auth.server.identity.key=${NACOS_AUTH_IDENTITY_KEY:admin}
nacos.core.auth.server.identity.value=${NACOS_AUTH_IDENTITY_VALUE:admin}

然后将这个配置文件上传至config文件夹内

第六步:配置Nacos数据库

这里直接提供SQL脚本了,直接丢数据库运行一下一键生成所需要的库和表单

CREATE DATABASE nacos_config ENCODING = 'UTF8';
\ C nacos_config;
CREATE TABLE "config_info" (
	"id" BIGSERIAL NOT NULL,
	"data_id" VARCHAR ( 255 ) NOT NULL,
	"group_id" VARCHAR ( 128 ),
	"content" TEXT NOT NULL,
	"md5" VARCHAR ( 32 ),
	"gmt_create" TIMESTAMP NOT NULL DEFAULT CURRENT_TIMESTAMP,
	"gmt_modified" TIMESTAMP NOT NULL DEFAULT CURRENT_TIMESTAMP,
	"src_user" TEXT,
	"src_ip" VARCHAR ( 50 ),
	"app_name" VARCHAR ( 128 ),
	"tenant_id" VARCHAR ( 128 ) DEFAULT '',
	"c_desc" VARCHAR ( 256 ),
	"c_use" VARCHAR ( 64 ),
	"effect" VARCHAR ( 64 ),
	"type" VARCHAR ( 64 ),
	"c_schema" TEXT,
	"encrypted_data_key" VARCHAR ( 1024 ) NOT NULL DEFAULT '',
	PRIMARY KEY ( "id" ),
	UNIQUE ( "data_id", "group_id", "tenant_id" ) 
);
COMMENT ON TABLE "config_info" IS 'config_info';
COMMENT ON COLUMN "config_info"."id" IS 'id';
CREATE TABLE "config_info_gray" (
	"id" BIGSERIAL NOT NULL,
	"data_id" VARCHAR ( 255 ) NOT NULL,
	"group_id" VARCHAR ( 128 ) NOT NULL,
	"content" TEXT NOT NULL,
	"md5" VARCHAR ( 32 ),
	"src_user" TEXT,
	"src_ip" VARCHAR ( 100 ),
	"gmt_create" TIMESTAMP ( 3 ) NOT NULL DEFAULT CURRENT_TIMESTAMP ( 3 ),
	"gmt_modified" TIMESTAMP ( 3 ) NOT NULL DEFAULT CURRENT_TIMESTAMP ( 3 ),
	"app_name" VARCHAR ( 128 ),
	"tenant_id" VARCHAR ( 128 ) DEFAULT '',
	"gray_name" VARCHAR ( 128 ) NOT NULL,
	"gray_rule" TEXT NOT NULL,
	"encrypted_data_key" VARCHAR ( 256 ) NOT NULL DEFAULT '',
	PRIMARY KEY ( "id" ),
	UNIQUE ( "data_id", "group_id", "tenant_id", "gray_name" ) 
);
CREATE INDEX "idx_dataid_gmt_modified" ON "config_info_gray" ( "data_id", "gmt_modified" );
CREATE INDEX "idx_gmt_modified" ON "config_info_gray" ( "gmt_modified" );
COMMENT ON TABLE "config_info_gray" IS 'config_info_gray';
CREATE TABLE "config_tags_relation" (
	"id" BIGINT NOT NULL,
	"tag_name" VARCHAR ( 128 ) NOT NULL,
	"tag_type" VARCHAR ( 64 ),
	"data_id" VARCHAR ( 255 ) NOT NULL,
	"group_id" VARCHAR ( 128 ) NOT NULL,
	"tenant_id" VARCHAR ( 128 ) DEFAULT '',
	"nid" BIGSERIAL NOT NULL,
	PRIMARY KEY ( "nid" ),
	UNIQUE ( "id", "tag_name", "tag_type" ) 
);
CREATE INDEX "idx_tenant_id" ON "config_tags_relation" ( "tenant_id" );
COMMENT ON TABLE "config_tags_relation" IS 'config_tag_relation';
CREATE TABLE "group_capacity" (
	"id" BIGSERIAL NOT NULL,
	"group_id" VARCHAR ( 128 ) NOT NULL DEFAULT '',
	"quota" INTEGER NOT NULL DEFAULT 0,
	"usage" INTEGER NOT NULL DEFAULT 0,
	"max_size" INTEGER NOT NULL DEFAULT 0,
	"max_aggr_count" INTEGER NOT NULL DEFAULT 0,
	"max_aggr_size" INTEGER NOT NULL DEFAULT 0,
	"max_history_count" INTEGER NOT NULL DEFAULT 0,
	"gmt_create" TIMESTAMP NOT NULL DEFAULT CURRENT_TIMESTAMP,
	"gmt_modified" TIMESTAMP NOT NULL DEFAULT CURRENT_TIMESTAMP,
	PRIMARY KEY ( "id" ),
	UNIQUE ( "group_id" ) 
);
COMMENT ON TABLE "group_capacity" IS '集群、各Group容量信息表';
CREATE TABLE "users" ( "username" VARCHAR ( 50 ) NOT NULL PRIMARY KEY, "password" VARCHAR ( 500 ) NOT NULL, "enabled" BOOLEAN NOT NULL );
CREATE TABLE "roles" ( "username" VARCHAR ( 50 ) NOT NULL, "role" VARCHAR ( 50 ) NOT NULL, UNIQUE ( "username", "role" ) );
CREATE TABLE "permissions" (
	"role" VARCHAR ( 50 ) NOT NULL,
	"resource" VARCHAR ( 128 ) NOT NULL,
	"action" VARCHAR ( 8 ) NOT NULL,
	UNIQUE ( "role", "resource", "action" ) 
);
CREATE TABLE config_info_beta (
	ID INTEGER AUTO_INCREMENT NOT NULL,
	data_id VARCHAR ( 255 ) NOT NULL,
	group_id VARCHAR ( 128 ) NOT NULL,
	app_name VARCHAR ( 128 ) DEFAULT NULL,
	CONTENT TEXT NOT NULL,
	beta_ips TEXT DEFAULT NULL,
	md5 VARCHAR ( 32 ) DEFAULT NULL,
	gmt_create datetime NOT NULL DEFAULT CURRENT_TIMESTAMP,
	gmt_modified datetime NOT NULL DEFAULT CURRENT_TIMESTAMP,
	src_user TEXT,
	src_ip VARCHAR ( 20 ) DEFAULT NULL,
	tenant_id VARCHAR ( 128 ) DEFAULT '',
	encrypted_data_key TEXT 
);
COMMENT ON TABLE config_info_beta IS 'config_info_beta';
COMMENT ON COLUMN config_info_beta.gmt_create IS '创建时间';
COMMENT ON COLUMN config_info_beta.gmt_modified IS '修改时间';
COMMENT ON COLUMN config_info_beta.src_user IS 'source user';
COMMENT ON COLUMN config_info_beta.tenant_id IS '租户字段';
COMMENT ON COLUMN config_info_beta.encrypted_data_key IS '秘钥';
ALTER TABLE config_info_beta ADD CONSTRAINT pk_config_info_beta PRIMARY KEY ( ID ) ENABLE VALIDATE;
ALTER TABLE config_info_beta ADD CONSTRAINT uk_configinfobeta_datagrouptenant UNIQUE ( data_id, group_id, tenant_id ) ENABLE VALIDATE;
CREATE TABLE config_info_tag (
	ID INTEGER AUTO_INCREMENT NOT NULL,
	data_id VARCHAR ( 255 ) NOT NULL,
	group_id VARCHAR ( 128 ) NOT NULL,
	tenant_id VARCHAR ( 128 ) DEFAULT '',
	tag_id VARCHAR ( 128 ) NOT NULL,
	app_name VARCHAR ( 128 ) DEFAULT NULL,
	CONTENT TEXT NOT NULL,
	md5 VARCHAR ( 32 ) DEFAULT NULL,
	gmt_create datetime NOT NULL DEFAULT CURRENT_TIMESTAMP,
	gmt_modified datetime NOT NULL DEFAULT CURRENT_TIMESTAMP,
	src_user TEXT,
	src_ip VARCHAR ( 20 ) DEFAULT NULL 
);
COMMENT ON TABLE config_info_tag IS 'config_info_tag';
COMMENT ON COLUMN config_info_tag.gmt_create IS '创建时间';
COMMENT ON COLUMN config_info_tag.gmt_modified IS '修改时间';
COMMENT ON COLUMN config_info_tag.src_user IS 'source user';
COMMENT ON COLUMN config_info_tag.src_ip IS 'source ip';
ALTER TABLE config_info_tag ADD CONSTRAINT pk_config_info_tag PRIMARY KEY ( ID ) ENABLE VALIDATE;
ALTER TABLE config_info_tag ADD CONSTRAINT uk_configinfotag_datagrouptenanttag UNIQUE ( data_id, group_id, tenant_id, tag_id ) ENABLE VALIDATE;
CREATE TABLE his_config_info (
	ID BIGINT NOT NULL,
	nid BIGINT NOT NULL AUTO_INCREMENT,
	data_id VARCHAR ( 255 ) NOT NULL,
	group_id VARCHAR ( 128 ) NOT NULL,
	app_name VARCHAR ( 128 ) DEFAULT NULL,
	CONTENT TEXT NOT NULL,
	md5 VARCHAR ( 32 ) DEFAULT NULL,
	gmt_create datetime NOT NULL DEFAULT CURRENT_TIMESTAMP,
	gmt_modified datetime NOT NULL DEFAULT CURRENT_TIMESTAMP,
	src_user TEXT,
	src_ip VARCHAR ( 20 ) DEFAULT NULL,
	op_type CHAR ( 10 ) DEFAULT NULL,
	tenant_id VARCHAR ( 128 ) DEFAULT '',
	encrypted_data_key TEXT 
);
COMMENT ON TABLE his_config_info IS '多租户改造';
COMMENT ON COLUMN his_config_info.tenant_id IS '租户字段';
COMMENT ON COLUMN his_config_info.encrypted_data_key IS '秘钥';
ALTER TABLE his_config_info ADD CONSTRAINT pk_his_config_info PRIMARY KEY ( nid ) ENABLE VALIDATE;
CREATE INDEX idx_gmt_create ON his_config_info USING BTREE ( gmt_create ) TABLESPACE sys_default;
CREATE INDEX idx_gmt_modified ON his_config_info USING BTREE ( gmt_modified ) TABLESPACE sys_default;
CREATE INDEX idx_did ON his_config_info USING BTREE ( data_id ) TABLESPACE sys_default;
CREATE TABLE tenant_capacity (
	ID BIGINT NOT NULL AUTO_INCREMENT,
	tenant_id VARCHAR ( 128 ) NOT NULL DEFAULT '',
	quota INTEGER NOT NULL DEFAULT '0',
	USAGE INTEGER NOT NULL DEFAULT '0',
	max_size INTEGER NOT NULL DEFAULT '0',
	max_aggr_count INTEGER NOT NULL DEFAULT '0',
	max_aggr_size INTEGER NOT NULL DEFAULT '0',
	max_history_count INTEGER NOT NULL DEFAULT '0',
	gmt_create datetime NOT NULL DEFAULT CURRENT_TIMESTAMP,
	gmt_modified datetime NOT NULL DEFAULT CURRENT_TIMESTAMP 
);
COMMENT ON TABLE tenant_capacity IS '租户容量信息表';
COMMENT ON COLUMN tenant_capacity.ID IS '主键ID';
COMMENT ON COLUMN tenant_capacity.tenant_id IS 'Tenant ID';
COMMENT ON COLUMN tenant_capacity.quota IS '配额,0表示使用默认值';
COMMENT ON COLUMN tenant_capacity.USAGE IS '使用量';
COMMENT ON COLUMN tenant_capacity.max_size IS '单个配置大小上限,单位为字节,0表示使用默认值';
COMMENT ON COLUMN tenant_capacity.max_aggr_count IS '聚合子配置最大个数';
COMMENT ON COLUMN tenant_capacity.max_aggr_size IS '单个聚合数据的子配置大小上限,单位为字节,0表示使用默认值';
COMMENT ON COLUMN tenant_capacity.max_history_count IS '最大变更历史数量';
COMMENT ON COLUMN tenant_capacity.gmt_create IS '创建时间';
COMMENT ON COLUMN tenant_capacity.gmt_modified IS '修改时间';
ALTER TABLE tenant_capacity ADD CONSTRAINT pk_tenant_capacity PRIMARY KEY ( ID ) ENABLE VALIDATE;
ALTER TABLE tenant_capacity ADD CONSTRAINT uk_tenant_id UNIQUE ( tenant_id ) ENABLE VALIDATE;
CREATE TABLE tenant_info (
	ID BIGINT NOT NULL AUTO_INCREMENT,
	kp VARCHAR ( 128 ) NOT NULL,
	tenant_id VARCHAR ( 128 ) DEFAULT '',
	tenant_name VARCHAR ( 128 ) DEFAULT '',
	tenant_desc VARCHAR ( 256 ) DEFAULT NULL,
	create_source VARCHAR ( 32 ) DEFAULT NULL,
	gmt_create BIGINT NOT NULL,
	gmt_modified BIGINT NOT NULL 
);
COMMENT ON TABLE tenant_info IS 'tenant_info';
COMMENT ON COLUMN tenant_info.gmt_create IS '创建时间';
COMMENT ON COLUMN tenant_info.gmt_modified IS '修改时间';
ALTER TABLE tenant_info ADD CONSTRAINT pk_tenant_info PRIMARY KEY ( ID ) ENABLE VALIDATE;
ALTER TABLE tenant_info ADD CONSTRAINT uk_tenant_info_kptenantid UNIQUE ( kp, tenant_id ) ENABLE VALIDATE;
CREATE INDEX idx_tenant_id_2 ON tenant_info USING BTREE ( tenant_id ) TABLESPACE sys_default;
INSERT INTO tenant_info ( ID, kp, tenant_id, tenant_name, tenant_desc, create_source, gmt_create, gmt_modified )
VALUES
	( 1, '1', 'dev', 'dev', '开发环境', NULL, 1641741270448, 1641741287236 ),
	( 2, '1', 'prod', 'prod', '生产环境', NULL, 1641741270448, 1641741287236 ),
	( 3, '1', 'test', 'test', '测试环境', NULL, 1641741270448, 1641741287236 );

正常情况会生成如下库和表单

第七步:编写docker-compose.yml文件

这个配置文件放哪儿都可以,笔者放在/home/nacos下,配置内容如下

services:
  nacos:
    image: nacos/nacos-server:latest
    container_name: nacos
    environment:
      MODE: standalone
      JVM_XMS: 512m
      JVM_XMX: 512m
      JVM_XMN: 256m
      DB_POOL_CONFIG_DRIVERCLASSNAME: com.kingbase8.Driver
    volumes:
      - /data/nacos/libs/kingbase8-8.6.0.jar:/home/nacos/plugins/kingbase8-8.6.0.jar
      - /data/nacos/conf/application.properties:/home/nacos/conf/application.properties
      - /data/nacos/logs/:/home/nacos/logs
    privileged: true
    restart: always
    network_mode: "host"

第八步:启动Nacos容器并访问

# 【需要修改】进入刚才编写好的docker-compose.yml所在目录
cd /home/nacos
# 启动!
docker-compose -f up docker-compose.yml up -d

接着直接访问服务器ip的8848端口即可打开nacos管理页,首次登录会要求设置密码

完成以上步骤便大功告成