Skip to content

Docker 环境下 Nacos 部署指南:适配人大金仓 PG 的元数据持久化方案

约 3643 字大约 12 分钟

DockerNacos人大金仓

2025-11-17

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_volumes

2.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=false

2.4、nacos数据库驱动

nacos-postgresql-datasource-plugin-ext-1.0.0-SNAPSHOT.jar

2.5、其他文件夹

logs     用来存放日志
init.d

3、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 -d

4.2、查看

http://localhost:8848/nacos

默认账号是 nacos nacos 人工更改为 Nacos@2025

4.3、测试持久化

创建命令空间 test, 删除容器,重新运行容器,可以看到test还在,也可以看到数据库中 tenant_capacity 表存在test记录。