Docker 环境下 Nacos 部署指南:适配人大金仓 PG 的元数据持久化方案
1、Kingbase准备数据库
1.1、创建middleware数据库/nacos_config模式
-- 1. 创建中间件专用数据库(编码强制UTF-8,避免中文乱码)
CREATE DATABASE middleware
ENCODING 'UTF8'
LC_COLLATE 'en_US.UTF-8' -- 排序规则(兼容中文排序,可根据实际需求调整为 zh_CN.UTF-8)
LC_CTYPE 'en_US.UTF-8' -- 字符分类(与编码一致,确保字符处理正常)
;
-- 2. 切换到创建好的 middleware 数据库(后续操作需在该库下执行)
\c middleware;
-- 3. 创建 Nacos 专用 Schema(隔离命名空间,避免表名冲突)
CREATE SCHEMA IF NOT EXISTS nacos_config;1.2、进入nacos_config模式,初始化数据
/*
* 适配人大金仓(KingbaseES)PostgreSQL 模式
* 数据库:middleware,Schema:nacos_config
* 最终修复:移除 CREATE TABLE 内联表注释,改用 COMMENT ON TABLE 单独声明
*/
/******************************************/
/* 表名称 = config_info */
/******************************************/
CREATE TABLE "config_info" (
"id" BIGSERIAL NOT NULL,
"data_id" VARCHAR(255) NOT NULL,
"group_id" VARCHAR(128) DEFAULT NULL,
"content" TEXT NOT NULL,
"md5" VARCHAR(32) DEFAULT NULL,
"gmt_create" TIMESTAMP NOT NULL DEFAULT CURRENT_TIMESTAMP,
"gmt_modified" TIMESTAMP NOT NULL DEFAULT CURRENT_TIMESTAMP,
"src_user" TEXT,
"src_ip" VARCHAR(50) DEFAULT NULL,
"app_name" VARCHAR(128) DEFAULT NULL,
"tenant_id" VARCHAR(128) DEFAULT '',
"c_desc" VARCHAR(256) DEFAULT NULL,
"c_use" VARCHAR(64) DEFAULT NULL,
"effect" VARCHAR(64) DEFAULT NULL,
"type" VARCHAR(64) DEFAULT NULL,
"c_schema" TEXT,
"encrypted_data_key" TEXT NOT NULL,
PRIMARY KEY ("id"),
CONSTRAINT "uk_configinfo_datagrouptenant" UNIQUE ("data_id", "group_id", "tenant_id")
);
-- 表注释(PG 标准语法)
COMMENT ON TABLE "config_info" IS 'config_info';
-- 字段注释
COMMENT ON COLUMN "config_info"."id" IS 'id';
COMMENT ON COLUMN "config_info"."data_id" IS 'data_id';
COMMENT ON COLUMN "config_info"."content" IS 'content';
COMMENT ON COLUMN "config_info"."md5" IS 'md5';
COMMENT ON COLUMN "config_info"."gmt_create" IS '创建时间';
COMMENT ON COLUMN "config_info"."gmt_modified" IS '修改时间';
COMMENT ON COLUMN "config_info"."src_user" IS 'source user';
COMMENT ON COLUMN "config_info"."src_ip" IS 'source ip';
COMMENT ON COLUMN "config_info"."tenant_id" IS '租户字段';
COMMENT ON COLUMN "config_info"."c_desc" IS '描述';
COMMENT ON COLUMN "config_info"."c_use" IS '用途';
COMMENT ON COLUMN "config_info"."effect" IS '生效方式';
COMMENT ON COLUMN "config_info"."type" IS '配置类型';
COMMENT ON COLUMN "config_info"."c_schema" IS '配置结构';
COMMENT ON COLUMN "config_info"."encrypted_data_key" IS '秘钥';
/******************************************/
/* 表名称 = config_info_aggr */
/******************************************/
CREATE TABLE "config_info_aggr" (
"id" BIGSERIAL NOT NULL,
"data_id" VARCHAR(255) NOT NULL,
"group_id" VARCHAR(128) NOT NULL,
"datum_id" VARCHAR(255) NOT NULL,
"content" TEXT NOT NULL,
"gmt_modified" TIMESTAMP NOT NULL,
"app_name" VARCHAR(128) DEFAULT NULL,
"tenant_id" VARCHAR(128) DEFAULT '',
PRIMARY KEY ("id"),
CONSTRAINT "uk_configinfoaggr_datagrouptenantdatum" UNIQUE ("data_id", "group_id", "tenant_id", "datum_id")
);
COMMENT ON TABLE "config_info_aggr" IS '增加租户字段';
COMMENT ON COLUMN "config_info_aggr"."id" IS 'id';
COMMENT ON COLUMN "config_info_aggr"."data_id" IS 'data_id';
COMMENT ON COLUMN "config_info_aggr"."group_id" IS 'group_id';
COMMENT ON COLUMN "config_info_aggr"."datum_id" IS 'datum_id';
COMMENT ON COLUMN "config_info_aggr"."content" IS '内容';
COMMENT ON COLUMN "config_info_aggr"."gmt_modified" IS '修改时间';
COMMENT ON COLUMN "config_info_aggr"."tenant_id" IS '租户字段';
/******************************************/
/* 表名称 = config_info_beta */
/******************************************/
CREATE TABLE "config_info_beta" (
"id" BIGSERIAL 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" VARCHAR(1024) DEFAULT NULL,
"md5" VARCHAR(32) DEFAULT NULL,
"gmt_create" TIMESTAMP NOT NULL DEFAULT CURRENT_TIMESTAMP,
"gmt_modified" TIMESTAMP NOT NULL DEFAULT CURRENT_TIMESTAMP,
"src_user" TEXT,
"src_ip" VARCHAR(50) DEFAULT NULL,
"tenant_id" VARCHAR(128) DEFAULT '',
"encrypted_data_key" TEXT NOT NULL,
PRIMARY KEY ("id"),
CONSTRAINT "uk_configinfobeta_datagrouptenant" UNIQUE ("data_id", "group_id", "tenant_id")
);
COMMENT ON TABLE "config_info_beta" IS 'config_info_beta';
COMMENT ON COLUMN "config_info_beta"."id" IS 'id';
COMMENT ON COLUMN "config_info_beta"."data_id" IS 'data_id';
COMMENT ON COLUMN "config_info_beta"."group_id" IS 'group_id';
COMMENT ON COLUMN "config_info_beta"."app_name" IS 'app_name';
COMMENT ON COLUMN "config_info_beta"."content" IS 'content';
COMMENT ON COLUMN "config_info_beta"."beta_ips" IS 'betaIps';
COMMENT ON COLUMN "config_info_beta"."md5" IS 'md5';
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"."src_ip" IS 'source ip';
COMMENT ON COLUMN "config_info_beta"."tenant_id" IS '租户字段';
COMMENT ON COLUMN "config_info_beta"."encrypted_data_key" IS '秘钥';
/******************************************/
/* 表名称 = config_info_tag */
/******************************************/
CREATE TABLE "config_info_tag" (
"id" BIGSERIAL 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" TIMESTAMP NOT NULL DEFAULT CURRENT_TIMESTAMP,
"gmt_modified" TIMESTAMP NOT NULL DEFAULT CURRENT_TIMESTAMP,
"src_user" TEXT,
"src_ip" VARCHAR(50) DEFAULT NULL,
PRIMARY KEY ("id"),
CONSTRAINT "uk_configinfotag_datagrouptenanttag" UNIQUE ("data_id", "group_id", "tenant_id", "tag_id")
);
COMMENT ON TABLE "config_info_tag" IS 'config_info_tag';
COMMENT ON COLUMN "config_info_tag"."id" IS 'id';
COMMENT ON COLUMN "config_info_tag"."data_id" IS 'data_id';
COMMENT ON COLUMN "config_info_tag"."group_id" IS 'group_id';
COMMENT ON COLUMN "config_info_tag"."tenant_id" IS 'tenant_id';
COMMENT ON COLUMN "config_info_tag"."tag_id" IS 'tag_id';
COMMENT ON COLUMN "config_info_tag"."app_name" IS 'app_name';
COMMENT ON COLUMN "config_info_tag"."content" IS 'content';
COMMENT ON COLUMN "config_info_tag"."md5" IS 'md5';
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';
/******************************************/
/* 表名称 = config_tags_relation */
/******************************************/
CREATE TABLE "config_tags_relation" (
"id" BIGINT NOT NULL,
"tag_name" VARCHAR(128) NOT NULL,
"tag_type" VARCHAR(64) DEFAULT NULL,
"data_id" VARCHAR(255) NOT NULL,
"group_id" VARCHAR(128) NOT NULL,
"tenant_id" VARCHAR(128) DEFAULT '',
"nid" BIGSERIAL NOT NULL,
PRIMARY KEY ("nid"),
CONSTRAINT "uk_configtagrelation_configidtag" UNIQUE ("id", "tag_name", "tag_type")
);
-- 普通索引单独创建(核心修复:移除 CONSTRAINT 关键字,用 CREATE INDEX)
CREATE INDEX "idx_tenant_id" ON "config_tags_relation" ("tenant_id");
COMMENT ON TABLE "config_tags_relation" IS 'config_tag_relation';
COMMENT ON COLUMN "config_tags_relation"."id" IS 'id';
COMMENT ON COLUMN "config_tags_relation"."tag_name" IS 'tag_name';
COMMENT ON COLUMN "config_tags_relation"."tag_type" IS 'tag_type';
COMMENT ON COLUMN "config_tags_relation"."data_id" IS 'data_id';
COMMENT ON COLUMN "config_tags_relation"."group_id" IS 'group_id';
COMMENT ON COLUMN "config_tags_relation"."tenant_id" IS 'tenant_id';
COMMENT ON COLUMN "config_tags_relation"."nid" IS '自增主键';
-- END
/******************************************/
/* 表名称 = group_capacity */
/******************************************/
CREATE TABLE "group_capacity" (
"id" BIGSERIAL NOT NULL,
"group_id" VARCHAR(128) NOT NULL DEFAULT '',
"quota" INTEGER NOT NULL DEFAULT 0 CHECK ("quota" >= 0), -- PG 非负约束
"usage" INTEGER NOT NULL DEFAULT 0 CHECK ("usage" >= 0),
"max_size" INTEGER NOT NULL DEFAULT 0 CHECK ("max_size" >= 0),
"max_aggr_count" INTEGER NOT NULL DEFAULT 0 CHECK ("max_aggr_count" >= 0),
"max_aggr_size" INTEGER NOT NULL DEFAULT 0 CHECK ("max_aggr_size" >= 0),
"max_history_count" INTEGER NOT NULL DEFAULT 0 CHECK ("max_history_count" >= 0),
"gmt_create" TIMESTAMP NOT NULL DEFAULT CURRENT_TIMESTAMP,
"gmt_modified" TIMESTAMP NOT NULL DEFAULT CURRENT_TIMESTAMP,
PRIMARY KEY ("id"),
CONSTRAINT "uk_group_id" UNIQUE ("group_id")
);
COMMENT ON TABLE "group_capacity" IS '集群、各Group容量信息表';
COMMENT ON COLUMN "group_capacity"."id" IS '主键ID';
COMMENT ON COLUMN "group_capacity"."group_id" IS 'Group ID,空字符表示整个集群';
COMMENT ON COLUMN "group_capacity"."quota" IS '配额,0表示使用默认值';
COMMENT ON COLUMN "group_capacity"."usage" IS '使用量';
COMMENT ON COLUMN "group_capacity"."max_size" IS '单个配置大小上限,单位为字节,0表示使用默认值';
COMMENT ON COLUMN "group_capacity"."max_aggr_count" IS '聚合子配置最大个数,0表示使用默认值';
COMMENT ON COLUMN "group_capacity"."max_aggr_size" IS '单个聚合数据的子配置大小上限,单位为字节,0表示使用默认值';
COMMENT ON COLUMN "group_capacity"."max_history_count" IS '最大变更历史数量';
COMMENT ON COLUMN "group_capacity"."gmt_create" IS '创建时间';
COMMENT ON COLUMN "group_capacity"."gmt_modified" IS '修改时间';
/******************************************/
/* 表名称 = his_config_info */
/******************************************/
CREATE TABLE "his_config_info" (
"id" BIGINT NOT NULL CHECK ("id" >= 0), -- 非负约束
"nid" BIGSERIAL NOT NULL,
"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" TIMESTAMP NOT NULL DEFAULT CURRENT_TIMESTAMP,
"gmt_modified" TIMESTAMP NOT NULL DEFAULT CURRENT_TIMESTAMP,
"src_user" TEXT,
"src_ip" VARCHAR(50) DEFAULT NULL,
"op_type" CHAR(10) DEFAULT NULL,
"tenant_id" VARCHAR(128) DEFAULT '',
"encrypted_data_key" TEXT NOT NULL,
PRIMARY KEY ("nid")
);
CREATE INDEX "idx_gmt_create" ON "his_config_info" ("gmt_create");
CREATE INDEX "idx_gmt_modified" ON "his_config_info" ("gmt_modified");
CREATE INDEX "idx_did" ON "his_config_info" ("data_id");
COMMENT ON TABLE "his_config_info" IS '多租户改造';
COMMENT ON COLUMN "his_config_info"."id" IS '原配置ID';
COMMENT ON COLUMN "his_config_info"."nid" IS '自增主键';
COMMENT ON COLUMN "his_config_info"."data_id" IS 'data_id';
COMMENT ON COLUMN "his_config_info"."group_id" IS 'group_id';
COMMENT ON COLUMN "his_config_info"."app_name" IS 'app_name';
COMMENT ON COLUMN "his_config_info"."content" IS '历史配置内容';
COMMENT ON COLUMN "his_config_info"."md5" IS 'md5';
COMMENT ON COLUMN "his_config_info"."gmt_create" IS '创建时间';
COMMENT ON COLUMN "his_config_info"."gmt_modified" IS '修改时间';
COMMENT ON COLUMN "his_config_info"."src_user" IS 'source user';
COMMENT ON COLUMN "his_config_info"."src_ip" IS 'source ip';
COMMENT ON COLUMN "his_config_info"."op_type" IS '操作类型(新增/修改/删除)';
COMMENT ON COLUMN "his_config_info"."tenant_id" IS '租户字段';
COMMENT ON COLUMN "his_config_info"."encrypted_data_key" IS '秘钥';
/******************************************/
/* 表名称 = tenant_capacity */
/******************************************/
CREATE TABLE "tenant_capacity" (
"id" BIGSERIAL NOT NULL,
"tenant_id" VARCHAR(128) NOT NULL DEFAULT '',
"quota" INTEGER NOT NULL DEFAULT 0 CHECK ("quota" >= 0),
"usage" INTEGER NOT NULL DEFAULT 0 CHECK ("usage" >= 0),
"max_size" INTEGER NOT NULL DEFAULT 0 CHECK ("max_size" >= 0),
"max_aggr_count" INTEGER NOT NULL DEFAULT 0 CHECK ("max_aggr_count" >= 0),
"max_aggr_size" INTEGER NOT NULL DEFAULT 0 CHECK ("max_aggr_size" >= 0),
"max_history_count" INTEGER NOT NULL DEFAULT 0 CHECK ("max_history_count" >= 0),
"gmt_create" TIMESTAMP NOT NULL DEFAULT CURRENT_TIMESTAMP,
"gmt_modified" TIMESTAMP NOT NULL DEFAULT CURRENT_TIMESTAMP,
PRIMARY KEY ("id"),
CONSTRAINT "uk_tenant_id" UNIQUE ("tenant_id")
);
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 '修改时间';
/******************************************/
/* 表名称 = tenant_info */
/******************************************/
CREATE TABLE "tenant_info" (
"id" BIGSERIAL NOT NULL,
"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 CHECK ("gmt_create" >= 0),
"gmt_modified" BIGINT NOT NULL CHECK ("gmt_modified" >= 0),
PRIMARY KEY ("id"),
CONSTRAINT "uk_tenant_info_kptenantid" UNIQUE ("kp", "tenant_id")
);
CREATE INDEX "idx_tenant_id_tenantinfo" ON "tenant_info" ("tenant_id");
COMMENT ON TABLE "tenant_info" IS 'tenant_info';
COMMENT ON COLUMN "tenant_info"."id" IS 'id';
COMMENT ON COLUMN "tenant_info"."kp" IS 'kp';
COMMENT ON COLUMN "tenant_info"."tenant_id" IS 'tenant_id';
COMMENT ON COLUMN "tenant_info"."tenant_name" IS 'tenant_name';
COMMENT ON COLUMN "tenant_info"."tenant_desc" IS 'tenant_desc';
COMMENT ON COLUMN "tenant_info"."create_source" IS 'create_source';
COMMENT ON COLUMN "tenant_info"."gmt_create" IS '创建时间';
COMMENT ON COLUMN "tenant_info"."gmt_modified" IS '修改时间';
/******************************************/
/* 表名称 = users */
/******************************************/
CREATE TABLE "users" (
"username" VARCHAR(50) NOT NULL,
"password" VARCHAR(500) NOT NULL,
"enabled" BOOLEAN NOT NULL,
PRIMARY KEY ("username")
);
COMMENT ON TABLE "users" IS '用户表';
COMMENT ON COLUMN "users"."username" IS '用户名';
COMMENT ON COLUMN "users"."password" IS '密码(BCrypt加密)';
COMMENT ON COLUMN "users"."enabled" IS '是否启用(true/false)';
/******************************************/
/* 表名称 = roles */
/******************************************/
CREATE TABLE "roles" (
"username" VARCHAR(50) NOT NULL,
"role" VARCHAR(50) NOT NULL,
CONSTRAINT "uk_user_role" UNIQUE ("username", "role")
);
COMMENT ON TABLE "roles" IS '用户角色表';
COMMENT ON COLUMN "roles"."username" IS '用户名(关联users表)';
COMMENT ON COLUMN "roles"."role" IS '角色名称(如ROLE_ADMIN)';
/******************************************/
/* 表名称 = permissions */
/******************************************/
CREATE TABLE "permissions" (
"role" VARCHAR(50) NOT NULL,
"resource" VARCHAR(255) NOT NULL,
"action" VARCHAR(8) NOT NULL,
CONSTRAINT "uk_role_permission" UNIQUE ("role", "resource", "action")
);
COMMENT ON TABLE "permissions" IS '角色权限表';
COMMENT ON COLUMN "permissions"."role" IS '角色名称(关联roles表)';
COMMENT ON COLUMN "permissions"."resource" IS '资源路径';
COMMENT ON COLUMN "permissions"."action" IS '操作类型(如read/write)';
/******************************************/
/* 初始化默认用户和角色 */
/******************************************/
-- 布尔值兼容:部分PG版本需用 't'/'f' 替代 TRUE/FALSE,按需切换
INSERT INTO "users" ("username", "password", "enabled")
VALUES ('nacos', '$2a$10$EuWPZHzz32dJN7jexM34MOeYirDdFAZm2kuWj7VEOJhhZkDrxfvUu', 't');
INSERT INTO "roles" ("username", "role")
VALUES ('nacos', 'ROLE_ADMIN');1.3、创建用户及授权
人大金仓创建用户
-- =============================================
-- 步骤1:切换到目标数据库(middleware)
-- =============================================
\c middleware; -- psql/ksql客户端语法,若用图形化工具可手动选中middleware数据库
-- =============================================
-- 步骤2:创建中间件用户(设置密码为blackMonday%1)
-- =============================================
-- 注:KINGBASEES中CREATE USER等价于CREATE ROLE + LOGIN权限
CREATE USER middleware_user -- 用户名可自定义(如middleware)
WITH
LOGIN -- 允许登录(中间件必须)
PASSWORD 'blackMonday%1' -- 密码包含特殊字符,单引号包裹
NOSUPERUSER -- 禁止超级用户权限(安全最佳实践)
NOCREATEDB -- 禁止创建数据库
NOCREATEROLE -- 禁止创建角色
INHERIT -- 继承所属角色权限
CONNECTION LIMIT 100; -- 限制并发连接数(按需调整)
-- =============================================
-- 步骤3:授予middleware数据库下所有模式的访问权限
-- 核心:覆盖「模式可见性+对象操作+默认权限」三层授权
-- =============================================
-- 3.1 授予数据库连接权限(基础)
GRANT CONNECT ON DATABASE middleware TO middleware_user;
-- 3.2 授予当前已存在的模式的USAGE权限(比如 nacos_config,按需添加)
GRANT USAGE ON SCHEMA nacos_config TO middleware_user;
GRANT SELECT, INSERT, UPDATE, DELETE ON ALL TABLES IN SCHEMA nacos_config TO middleware_user;
GRANT EXECUTE ON ALL FUNCTIONS IN SCHEMA nacos_config TO middleware_user;
-- 授予默认权限(未来新建对象)
ALTER DEFAULT PRIVILEGES IN SCHEMA nacos_config GRANT SELECT, INSERT, UPDATE, DELETE ON TABLES TO middleware_user;2、准备nacos配置文件及数据库驱动
2.1、进入容器挂载文件夹
/Users/dftshine/Career/LocalDocker/docker_volumes2.2、创建文件夹
(base) dftshine@bogon docker_volumes % tree -L 1 nacos nacos ├── application.properties ├── init.d ├── logs ├── nacos-postgresql-datasource-plugin-ext-1.0.0-SNAPSHOT.jar └── postgresql-42.7.4.jar
2.3、nacos配置文件(application.properties)
#*************** Spring Boot Related Configurations ***************#
### Default web context path:
server.servlet.contextPath=/nacos
### Include message field
server.error.include-message=ON_PARAM
### Default web server port:
server.port=8848
#*************** Network Related Configurations ***************#
### If prefer hostname over ip for Nacos server addresses in cluster.conf:
# nacos.inetutils.prefer-hostname-over-ip=false
### Specify local server's IP:
#nacos.inetutils.ip-address=127.0.0.1
#*************** Config Module Related Configurations ***************#
### If use MySQL as datasource:
spring.datasource.platform=postgresql
### Count of DB:
db.num=1
### Connect URL of DB:
db.url.0=jdbc:postgresql://host.docker.internal:54321/middleware?currentSchema=nacos_config&tcpKeepAlive=true&reWriteBatchedInserts=true&ApplicationName=nacos_java
db.user=middleware_user
db.password=blackMonday%1
db.pool.config.driverClassName=org.postgresql.Driver
### Connection pool configuration: hikariCP
db.pool.config.connectionTimeout=30000
db.pool.config.validationTimeout=10000
db.pool.config.maximumPoolSize=20
db.pool.config.minimumIdle=2
# 连接超时时间(毫秒),默认 30000
db.pool.config.connectionTimeout=60000
# 最大连接尝试次数(可选,部分版本支持)
# hikari.maxLifetime=300000
# 连接测试查询(确保数据库支持)
db.pool.config.validationQuery=SELECT 1
#*************** Naming Module Related Configurations ***************#
### Data dispatch task execution period in milliseconds: Will removed on v2.1.X, replace with nacos.core.protocol.distro.data.sync.delayMs
# nacos.naming.distro.taskDispatchPeriod=200
### Data count of batch sync task: Will removed on v2.1.X. Deprecated
# nacos.naming.distro.batchSyncKeyCount=1000
### Retry delay in milliseconds if sync task failed: Will removed on v2.1.X, replace with nacos.core.protocol.distro.data.sync.retryDelayMs
# nacos.naming.distro.syncRetryDelay=5000
### If enable data warmup. If set to false, the server would accept request without local data preparation:
# nacos.naming.data.warmup=true
### If enable the instance auto expiration, kind like of health check of instance:
# nacos.naming.expireInstance=true
### will be removed and replaced by `nacos.naming.clean` properties
nacos.naming.empty-service.auto-clean=true
nacos.naming.empty-service.clean.initial-delay-ms=50000
nacos.naming.empty-service.clean.period-time-ms=30000
### Add in 2.0.0
### The interval to clean empty service, unit: milliseconds.
# nacos.naming.clean.empty-service.interval=60000
### The expired time to clean empty service, unit: milliseconds.
# nacos.naming.clean.empty-service.expired-time=60000
### The interval to clean expired metadata, unit: milliseconds.
# nacos.naming.clean.expired-metadata.interval=5000
### The expired time to clean metadata, unit: milliseconds.
# nacos.naming.clean.expired-metadata.expired-time=60000
### The delay time before push task to execute from service changed, unit: milliseconds.
# nacos.naming.push.pushTaskDelay=500
### The timeout for push task execute, unit: milliseconds.
# nacos.naming.push.pushTaskTimeout=5000
### The delay time for retrying failed push task, unit: milliseconds.
# nacos.naming.push.pushTaskRetryDelay=1000
### Since 2.0.3
### The expired time for inactive client, unit: milliseconds.
# nacos.naming.client.expired.time=180000
#*************** CMDB Module Related Configurations ***************#
### The interval to dump external CMDB in seconds:
# nacos.cmdb.dumpTaskInterval=3600
### The interval of polling data change event in seconds:
# nacos.cmdb.eventTaskInterval=10
### The interval of loading labels in seconds:
# nacos.cmdb.labelTaskInterval=300
### If turn on data loading task:
# nacos.cmdb.loadDataAtStart=false
#*************** Metrics Related Configurations ***************#
### 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
#*************** Access Log Related Configurations ***************#
### If turn on the access log:
server.tomcat.accesslog.enabled=true
### The access log pattern:
server.tomcat.accesslog.pattern=%h %l %u %t "%r" %s %b %D %{User-Agent}i %{Request-Source}i
### The directory of access log:
server.tomcat.basedir=file:.
#*************** Access Control Related Configurations ***************#
### If enable spring security, this option is deprecated in 1.2.0:
#spring.security.enabled=false
### The ignore urls of auth, is deprecated in 1.2.0:
nacos.security.ignore.urls=/,/error,/**/*.css,/**/*.js,/**/*.html,/**/*.map,/**/*.svg,/**/*.png,/**/*.ico,/console-ui/public/**,/v1/auth/**,/v1/console/health/**,/actuator/**,/v1/console/server/**
### The auth system to use, currently only 'nacos' and 'ldap' is supported:
nacos.core.auth.system.type=nacos
### If turn on auth system:
nacos.core.auth.enabled=false
### 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=true
### Since 1.4.1, Turn on/off white auth for user-agent: nacos-server, only for upgrade from old version.
nacos.core.auth.enable.userAgentAuthWhite=false
### Since 1.4.1, worked when nacos.core.auth.enabled=true and nacos.core.auth.enable.userAgentAuthWhite=false.
### The two properties is the white list for auth and used by identity the request from other server.
nacos.core.auth.server.identity.key=nacos
nacos.core.auth.server.identity.value=Naocs@2025
### worked when nacos.core.auth.system.type=nacos
### The token expiration in seconds:
nacos.core.auth.plugin.nacos.token.expire.seconds=18000
### The default token:
nacos.core.auth.plugin.nacos.token.secret.key=TmFjb3NAMjAyNS0xMC44My4xLjUzLTIwMjUwNzI1LWVuZXJneS1jbG91ZC0yMDI1
#*************** Istio Related Configurations ***************#
### If turn on the MCP server:
nacos.istio.mcp.server.enabled=false2.4、nacos数据库驱动
nacos-postgresql-datasource-plugin-ext-1.0.0-SNAPSHOT.jar2.5、其他文件夹
logs 用来存放日志
init.d3、docker-compose-nacos.yml
services:
nacos:
image: nacos/nacos-server:v2.2.3
container_name: nacos-standalone
ports:
- "8848:8848"
- "9848:9848"
- "9849:9849"
volumes:
- .\docker_volumes\nacos\application.properties:/home/nacos/conf/application.properties
- .\docker_volumes\nacos\logs:/home/nacos/logs
- .\docker_volumes\nacos\init.d:/home/nacos/init.d
- .\docker_volumes\nacos\nacos-postgresql-datasource-plugin-ext-1.0.0-SNAPSHOT.jar:/home/nacos/plugins/nacos-postgresql-datasource-plugin-ext-1.0.0-SNAPSHOT.jar # 挂载数据库插件
environment:
- PREFER_HOST_MODE=hostname
- MODE=standalone
- SPRING_CLOUD_NACOS_DISCOVERY_IP=host.docker.internal
restart: always
networks:
- nepsp-network
networks:
nepsp-network: {}4、运行
4.1、运行命令
(base) dftshine@bogon LocalDocker % docker-compose -f 02-docker-compose-naocs.yml up -d4.2、查看
http://localhost:8848/nacos默认账号是 nacos nacos 人工更改为 Nacos@2025
4.3、测试持久化
创建命令空间 test, 删除容器,重新运行容器,可以看到test还在,也可以看到数据库中 tenant_capacity 表存在test记录。
