nacos2.1.0修改源码支持pg数据源,并构建docker镜像
当前2.1.0版本只有两个地方,都在/plugin-default-impl/src/main/java/com/alibaba/nacos/plugin/auth/impl/persistence下。docker build -t nacos-server .(注意此行命令nacos-server后面有一个空格 和 .),执行结束 ,docker images命令即可查看镜像。# LIKE '%
Nacos适配Postgresql数据源
一、本地运行nacos源码
1.下载nacos
nacos版本是2.1.0,下载
git clone GitHub - alibaba/nacos: an easy-to-use dynamic service discovery, configuration and service management platform for building cloud native applications. -b 2.1.0
项目结构如下,项目启动在于console模块,选择主程序Nacos运行
2.本地运行源码遇到的问题
1. consistency模块实体类的缺失
根目录下pom文件修改,protobuf-java的版本改为3.19.3
<protobuf-java.version>3.19.3</protobuf-java.version>
2. istio模块包的的缺失
在右侧maven菜单选择该模块install,缺失的包会下载
3. 启动报错Unable to start embedded Tomcat
主启动类配置单节点模式
二、修改源码支持pg数据库
1. 添加PostgreSQL依赖
① 根目录下的/pom.xml
<properties>
···
<postgresql.version>42.3.3</postgresql.version>
···
</properties>
···
<dependency>
<groupId>org.postgresql</groupId>
<artifactId>postgresql</artifactId>
<version>${postgresql.version}</version>
</dependency>
② /config/pom.xml
<dependency>
<groupId>org.postgresql</groupId>
<artifactId>postgresql</artifactId>
</dependency>
③ /naming/pom.xml
<dependency>
<groupId>org.postgresql</groupId>
<artifactId>postgresql</artifactId>
</dependency>
2. 添加PostgreSQL驱动代码
① PropertiesConstant.java
public static final String POSTGRESQL = "postgresql";
② PropertyUtil.java#loadSetting方法
// 支持postgresql与mysql
String platform = getString(PropertiesConstant.SPRING_DATASOURCE_PLATFORM, "");
setUseExternalDB(MYSQL.equalsIgnoreCase(platform) || POSTGRESQL.equalsIgnoreCase(platform));
③ ExternalDataSourceProperties.java
private static final String JDBC_DRIVER_NAME = "com.mysql.cj.jdbc.Driver";
/**
* 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) {
// ...
// 原代码
// poolProperties.setDriverClassName(JDBC_DRIVER_NAME);
// 修改后
// 支持postgresql与mysql
if (PropertiesConstant.POSTGRESQL.equalsIgnoreCase(
EnvUtil.getProperty(SPRING_DATASOURCE_PLATFORM))) {
// 增加对postgresql数据库的支持
poolProperties.setDriverClassName(JDBC_DRIVER_NAME_POSTGRESQL);
System.out.println("jdbcDriverName=增加对postgresql数据库的支持" + JDBC_DRIVER_NAME_POSTGRESQL);
} else {
// 默认使用mysql驱动
poolProperties.setDriverClassName(JDBC_DRIVER_NAME);
}
// ...
}
④ StartingApplicationListener.java
private void judgeStorageMode(ConfigurableEnvironment env) {
// ...
// External data sources are used by default in cluster mode
// 原代码
// boolean useExternalStorage = (DEFAULT_DATABASE.equalsIgnoreCase(env.getProperty(DATASOURCE_PLATFORM_PROPERTY, DEFAULT_DATASOURCE_PLATFORM)));
// 修改后
// 修改为支持postgresql与mysql
String platform = env.getProperty("spring.datasource.platform", "");
boolean useExternalStorage = ("mysql".equalsIgnoreCase(platform) || "postgresql".equalsIgnoreCase(platform));
// ...
}
3.兼容PostgreSQL
① 主键
# 由于postgresql无法通过Statement.RETURN_GENERATED_KEYS获取主键,因此只能显示的指定要寻找的主键
# 全局替换:
全局搜索,Statement.RETURN_GENERATED_KEYS
// PreparedStatement ps = connection.prepareStatement(sql, Statement.RETURN_GENERATED_KEYS);
// 修改为
boolean isPg = "postgresql".equals(EnvUtil.getProperty("spring.datasource.platform"));
// 兼容postgresql与mysql
PreparedStatement ps;
if (isPg) {
ps = connection.prepareStatement(sql, new String[]{"id"});
} else {
ps = connection.prepareStatement(sql, Statement.RETURN_GENERATED_KEYS);
}
② LIKE
当前2.1.0版本只有两个地方,都在/plugin-default-impl/src/main/java/com/alibaba/nacos/plugin/auth/impl/persistence下
① ExternalRolePersistServiceImpl#findRolesLikeRoleName
② ExternalUserPersistServiceImpl#findUserLikeUsername
#如上图类似替换
LIKE '%' ? '%' 替换成 LIKE ?
new String[] {username} 替换成 new String[] {String.format("%%%s%%", username)}
# LIKE '%' '%AD' '%'的方式,mysql可用,但并非标准sql
# LIKE '%%AD%'的方式,这是标准sql,因此mysql与postgresql都可使用
③ LIMIT
ExternalStoragePersistServiceImpl.java
// 此文件下所有的修改点都需要替换
搜索 "limit ?,?" “LIMIT ?, ?”
// 修改后
// 兼容mysql与postgresql, 将修改点的SQL改为使用下面的pageSql拼接上去, 根据使用的数据库选择对应的方言
boolean isPg = "postgresql".equals(EnvUtil.getProperty("spring.datasource.platform"));
String pageSql = isPg ? "offset ? limit ?" : "limit ?,?";
# 全局替换:
LIMIT \\?,\\? 替换为 OFFSET \\? LIMIT \\?
ExternalStoragePaginationHelperImpl#fetchPage
String selectSql = "";
if (isDerby()) {
selectSql = sqlFetchRows + " OFFSET " + startRow + " ROWS FETCH NEXT " + pageSize + " ROWS ONLY";
} else if (lastMaxId != null) {
selectSql = sqlFetchRows + " AND id > " + lastMaxId + " ORDER BY id ASC" + " LIMIT " + 0 + "," + pageSize;
} else {
// selectSql = sqlFetchRows + " LIMIT " + startRow + "," + pageSize;
// 修改为支持postgresql
// 支持postgresql,同时兼容mysql8
boolean isPg = "postgresql".equals(EnvUtil.getProperty("spring.datasource.platform"));
if (isPg) {
selectSql = sqlFetchRows + " limit " + pageSize + " offset " + startRow;
} else {
selectSql = sqlFetchRows + " LIMIT " + startRow + "," + pageSize;
}
}
4. BUG处理
这部分是官方上的bug,已提交了ISSUE,并且也已解决,后续版本应该没问题,解决方式在ISSUE中也提到了
# 1. ExternalStoragePersistServiceImpl#findAllConfigInfoForDumpAll
params.toArray() 替换为 new Object[] {(pageNo - 1) * pageSize, pageSize}
# 2. EmbeddedStoragePersistServiceImpl#findAllConfigInfoForDumpAll
EMPTY_ARRAY 替换为 new Object[] {(pageNo - 1) * pageSize, pageSize}
5. 配置文件
- application.properties
- nacos-postgresql.sql
① application.properties
spring.datasource.platform=postgresql
db.url.0=jdbc:postgresql://127.0.0.1:5432/nacos?characterEncoding=utf8&connectTimeout=1000&socketTimeout=3000&autoReconnect=true&useUnicode=true&useSSL=false&serverTimezone=UTC
db.user.0=postgres
db.password.0=nacos
② nacos-postgresql.sql
官方提供的是mysql与derby版的,需要使用postgresql版的,在下面提供。
DROP SEQUENCE IF EXISTS "public"."config_info_id_seq";
CREATE SEQUENCE "public"."config_info_id_seq"
INCREMENT 1
MINVALUE 1
MAXVALUE 9223372036854775807
START 1
CACHE 1;
DROP SEQUENCE IF EXISTS "public"."config_info_aggr_id_seq";
CREATE SEQUENCE "public"."config_info_aggr_id_seq"
INCREMENT 1
MINVALUE 1
MAXVALUE 9223372036854775807
START 1
CACHE 1;
DROP SEQUENCE IF EXISTS "public"."config_info_beta_id_seq";
CREATE SEQUENCE "public"."config_info_beta_id_seq"
INCREMENT 1
MINVALUE 1
MAXVALUE 9223372036854775807
START 1
CACHE 1;
DROP SEQUENCE IF EXISTS "public"."config_info_tag_id_seq";
CREATE SEQUENCE "public"."config_info_tag_id_seq"
INCREMENT 1
MINVALUE 1
MAXVALUE 9223372036854775807
START 1
CACHE 1;
DROP SEQUENCE IF EXISTS "public"."config_tags_relation_nid_seq";
CREATE SEQUENCE "public"."config_tags_relation_nid_seq"
INCREMENT 1
MINVALUE 1
MAXVALUE 9223372036854775807
START 1
CACHE 1;
DROP SEQUENCE IF EXISTS "public"."group_capacity_id_seq";
CREATE SEQUENCE "public"."group_capacity_id_seq"
INCREMENT 1
MINVALUE 1
MAXVALUE 9223372036854775807
START 1
CACHE 1;
DROP SEQUENCE IF EXISTS "public"."his_config_info_nid_seq";
CREATE SEQUENCE "public"."his_config_info_nid_seq"
INCREMENT 1
MINVALUE 1
MAXVALUE 9223372036854775807
START 1
CACHE 1;
DROP SEQUENCE IF EXISTS "public"."tenant_capacity_id_seq";
CREATE SEQUENCE "public"."tenant_capacity_id_seq"
INCREMENT 1
MINVALUE 1
MAXVALUE 9223372036854775807
START 1
CACHE 1;
DROP SEQUENCE IF EXISTS "public"."tenant_info_id_seq";
CREATE SEQUENCE "public"."tenant_info_id_seq"
INCREMENT 1
MINVALUE 1
MAXVALUE 9223372036854775807
START 1
CACHE 1;
-- ----------------------------
-- Table structure for config_info
-- ----------------------------
DROP TABLE IF EXISTS "public"."config_info";
CREATE TABLE "public"."config_info" (
"id" int4 NOT NULL DEFAULT nextval('config_info_id_seq'::regclass),
"data_id" varchar(255) COLLATE "pg_catalog"."default" NOT NULL,
"group_id" varchar(255) COLLATE "pg_catalog"."default" DEFAULT NULL::character varying,
"content" text COLLATE "pg_catalog"."default" NOT NULL,
"md5" varchar(32) COLLATE "pg_catalog"."default" DEFAULT NULL::character varying,
"gmt_create" timestamp(6) NOT NULL DEFAULT '2010-05-05 00:00:00'::timestamp without time zone,
"gmt_modified" timestamp(6) NOT NULL DEFAULT '2010-05-05 00:00:00'::timestamp without time zone,
"src_user" text COLLATE "pg_catalog"."default",
"src_ip" varchar(50) COLLATE "pg_catalog"."default" DEFAULT NULL::character varying,
"app_name" varchar(128) COLLATE "pg_catalog"."default" DEFAULT NULL::character varying,
"tenant_id" varchar(128) COLLATE "pg_catalog"."default" DEFAULT ''::character varying,
"c_desc" varchar(256) COLLATE "pg_catalog"."default" DEFAULT NULL::character varying,
"c_use" varchar(64) COLLATE "pg_catalog"."default" DEFAULT NULL::character varying,
"effect" varchar(64) COLLATE "pg_catalog"."default" DEFAULT NULL::character varying,
"type" varchar(64) COLLATE "pg_catalog"."default" DEFAULT NULL::character varying,
"c_schema" text COLLATE "pg_catalog"."default"
)
;
COMMENT ON COLUMN "public"."config_info"."id" IS 'id';
COMMENT ON COLUMN "public"."config_info"."content" IS 'content';
COMMENT ON COLUMN "public"."config_info"."md5" IS 'md5';
COMMENT ON COLUMN "public"."config_info"."gmt_create" IS '创建时间';
COMMENT ON COLUMN "public"."config_info"."gmt_modified" IS '修改时间';
COMMENT ON COLUMN "public"."config_info"."src_user" IS 'source user';
COMMENT ON COLUMN "public"."config_info"."src_ip" IS 'source ip';
COMMENT ON COLUMN "public"."config_info"."tenant_id" IS '租户字段';
COMMENT ON TABLE "public"."config_info" IS 'config_info';
-- ----------------------------
-- Table structure for config_info_aggr
-- ----------------------------
DROP TABLE IF EXISTS "public"."config_info_aggr";
CREATE TABLE "public"."config_info_aggr" (
"id" int4 NOT NULL DEFAULT nextval('config_info_aggr_id_seq'::regclass),
"data_id" varchar(255) COLLATE "pg_catalog"."default" NOT NULL,
"group_id" varchar(255) COLLATE "pg_catalog"."default" NOT NULL,
"datum_id" varchar(255) COLLATE "pg_catalog"."default" NOT NULL,
"content" text COLLATE "pg_catalog"."default" NOT NULL,
"gmt_modified" timestamp(6) NOT NULL,
"app_name" varchar(128) COLLATE "pg_catalog"."default" DEFAULT NULL::character varying,
"tenant_id" varchar(128) COLLATE "pg_catalog"."default" DEFAULT ''::character varying
)
;
COMMENT ON COLUMN "public"."config_info_aggr"."id" IS 'id';
COMMENT ON COLUMN "public"."config_info_aggr"."data_id" IS 'data_id';
COMMENT ON COLUMN "public"."config_info_aggr"."group_id" IS 'group_id';
COMMENT ON COLUMN "public"."config_info_aggr"."datum_id" IS 'datum_id';
COMMENT ON COLUMN "public"."config_info_aggr"."content" IS '内容';
COMMENT ON COLUMN "public"."config_info_aggr"."gmt_modified" IS '修改时间';
COMMENT ON COLUMN "public"."config_info_aggr"."tenant_id" IS '租户字段';
COMMENT ON TABLE "public"."config_info_aggr" IS '增加租户字段';
-- ----------------------------
-- Table structure for config_info_beta
-- ----------------------------
DROP TABLE IF EXISTS "public"."config_info_beta";
CREATE TABLE "public"."config_info_beta" (
"id" int4 NOT NULL DEFAULT nextval('config_info_beta_id_seq'::regclass),
"data_id" varchar(255) COLLATE "pg_catalog"."default" NOT NULL,
"group_id" varchar(128) COLLATE "pg_catalog"."default" NOT NULL,
"app_name" varchar(128) COLLATE "pg_catalog"."default" DEFAULT NULL::character varying,
"content" text COLLATE "pg_catalog"."default" NOT NULL,
"beta_ips" varchar(1024) COLLATE "pg_catalog"."default" DEFAULT NULL::character varying,
"md5" varchar(32) COLLATE "pg_catalog"."default" DEFAULT NULL::character varying,
"gmt_create" timestamp(6) NOT NULL DEFAULT '2010-05-05 00:00:00'::timestamp without time zone,
"gmt_modified" timestamp(6) NOT NULL DEFAULT '2010-05-05 00:00:00'::timestamp without time zone,
"src_user" text COLLATE "pg_catalog"."default",
"src_ip" varchar(128) COLLATE "pg_catalog"."default" DEFAULT NULL::character varying,
"tenant_id" varchar(128) COLLATE "pg_catalog"."default" DEFAULT ''::character varying
)
;
COMMENT ON COLUMN "public"."config_info_beta"."id" IS 'id';
COMMENT ON COLUMN "public"."config_info_beta"."data_id" IS 'data_id';
COMMENT ON COLUMN "public"."config_info_beta"."group_id" IS 'group_id';
COMMENT ON COLUMN "public"."config_info_beta"."app_name" IS 'app_name';
COMMENT ON COLUMN "public"."config_info_beta"."content" IS 'content';
COMMENT ON COLUMN "public"."config_info_beta"."beta_ips" IS 'betaIps';
COMMENT ON COLUMN "public"."config_info_beta"."md5" IS 'md5';
COMMENT ON COLUMN "public"."config_info_beta"."gmt_create" IS '创建时间';
COMMENT ON COLUMN "public"."config_info_beta"."gmt_modified" IS '修改时间';
COMMENT ON COLUMN "public"."config_info_beta"."src_user" IS 'source user';
COMMENT ON COLUMN "public"."config_info_beta"."src_ip" IS 'source ip';
COMMENT ON COLUMN "public"."config_info_beta"."tenant_id" IS '租户字段';
COMMENT ON TABLE "public"."config_info_beta" IS 'config_info_beta';
-- ----------------------------
-- Table structure for config_info_tag
-- ----------------------------
DROP TABLE IF EXISTS "public"."config_info_tag";
CREATE TABLE "public"."config_info_tag" (
"id" int4 NOT NULL DEFAULT nextval('config_info_tag_id_seq'::regclass),
"data_id" varchar(255) COLLATE "pg_catalog"."default" NOT NULL,
"group_id" varchar(128) COLLATE "pg_catalog"."default" NOT NULL,
"tenant_id" varchar(128) COLLATE "pg_catalog"."default" DEFAULT ''::character varying,
"tag_id" varchar(128) COLLATE "pg_catalog"."default" NOT NULL,
"app_name" varchar(128) COLLATE "pg_catalog"."default" DEFAULT NULL::character varying,
"content" text COLLATE "pg_catalog"."default" NOT NULL,
"md5" varchar(32) COLLATE "pg_catalog"."default" DEFAULT NULL::character varying,
"gmt_create" timestamp(6) NOT NULL DEFAULT '2010-05-05 00:00:00'::timestamp without time zone,
"gmt_modified" timestamp(6) NOT NULL DEFAULT '2010-05-05 00:00:00'::timestamp without time zone,
"src_user" text COLLATE "pg_catalog"."default",
"src_ip" varchar(50) COLLATE "pg_catalog"."default" DEFAULT NULL::character varying
)
;
COMMENT ON COLUMN "public"."config_info_tag"."id" IS 'id';
COMMENT ON COLUMN "public"."config_info_tag"."data_id" IS 'data_id';
COMMENT ON COLUMN "public"."config_info_tag"."group_id" IS 'group_id';
COMMENT ON COLUMN "public"."config_info_tag"."tenant_id" IS '租户字段';
COMMENT ON COLUMN "public"."config_info_tag"."tag_id" IS 'tag_id';
COMMENT ON COLUMN "public"."config_info_tag"."app_name" IS 'app_name';
COMMENT ON COLUMN "public"."config_info_tag"."content" IS 'content';
COMMENT ON COLUMN "public"."config_info_tag"."md5" IS 'md5';
COMMENT ON COLUMN "public"."config_info_tag"."gmt_create" IS '创建时间';
COMMENT ON COLUMN "public"."config_info_tag"."gmt_modified" IS '修改时间';
COMMENT ON COLUMN "public"."config_info_tag"."src_user" IS 'source user';
COMMENT ON COLUMN "public"."config_info_tag"."src_ip" IS 'source ip';
COMMENT ON TABLE "public"."config_info_tag" IS 'config_info_tag';
-- ----------------------------
-- Table structure for config_tags_relation
-- ----------------------------
DROP TABLE IF EXISTS "public"."config_tags_relation";
CREATE TABLE "public"."config_tags_relation" (
"id" int8 NOT NULL,
"tag_name" varchar(128) COLLATE "pg_catalog"."default" NOT NULL,
"tag_type" varchar(64) COLLATE "pg_catalog"."default" DEFAULT NULL::character varying,
"data_id" varchar(255) COLLATE "pg_catalog"."default" NOT NULL,
"group_id" varchar(128) COLLATE "pg_catalog"."default" NOT NULL,
"tenant_id" varchar(128) COLLATE "pg_catalog"."default" DEFAULT ''::character varying,
"nid" int4 NOT NULL DEFAULT nextval('config_tags_relation_nid_seq'::regclass)
)
;
COMMENT ON COLUMN "public"."config_tags_relation"."id" IS 'id';
COMMENT ON COLUMN "public"."config_tags_relation"."tag_name" IS 'tag_name';
COMMENT ON COLUMN "public"."config_tags_relation"."tag_type" IS 'tag_type';
COMMENT ON COLUMN "public"."config_tags_relation"."data_id" IS 'data_id';
COMMENT ON COLUMN "public"."config_tags_relation"."group_id" IS 'group_id';
COMMENT ON COLUMN "public"."config_tags_relation"."tenant_id" IS 'tenant_id';
COMMENT ON TABLE "public"."config_tags_relation" IS 'config_tag_relation';
-- ----------------------------
-- Table structure for group_capacity
-- ----------------------------
DROP TABLE IF EXISTS "public"."group_capacity";
CREATE TABLE "public"."group_capacity" (
"id" int4 NOT NULL DEFAULT nextval('group_capacity_id_seq'::regclass),
"group_id" varchar(128) COLLATE "pg_catalog"."default" NOT NULL DEFAULT ''::character varying,
"quota" int4 NOT NULL DEFAULT 0,
"usage" int4 NOT NULL DEFAULT 0,
"max_size" int4 NOT NULL DEFAULT 0,
"max_aggr_count" int4 NOT NULL DEFAULT 0,
"max_aggr_size" int4 NOT NULL DEFAULT 0,
"max_history_count" int4 NOT NULL DEFAULT 0,
"gmt_create" timestamp(6) NOT NULL DEFAULT '2010-05-05 00:00:00'::timestamp without time zone,
"gmt_modified" timestamp(6) NOT NULL DEFAULT '2010-05-05 00:00:00'::timestamp without time zone
)
;
COMMENT ON COLUMN "public"."group_capacity"."id" IS '主键ID';
COMMENT ON COLUMN "public"."group_capacity"."group_id" IS 'Group ID,空字符表示整个集群';
COMMENT ON COLUMN "public"."group_capacity"."quota" IS '配额,0表示使用默认值';
COMMENT ON COLUMN "public"."group_capacity"."usage" IS '使用量';
COMMENT ON COLUMN "public"."group_capacity"."max_size" IS '单个配置大小上限,单位为字节,0表示使用默认值';
COMMENT ON COLUMN "public"."group_capacity"."max_aggr_count" IS '聚合子配置最大个数,,0表示使用默认值';
COMMENT ON COLUMN "public"."group_capacity"."max_aggr_size" IS '单个聚合数据的子配置大小上限,单位为字节,0表示使用默认值';
COMMENT ON COLUMN "public"."group_capacity"."max_history_count" IS '最大变更历史数量';
COMMENT ON COLUMN "public"."group_capacity"."gmt_create" IS '创建时间';
COMMENT ON COLUMN "public"."group_capacity"."gmt_modified" IS '修改时间';
COMMENT ON TABLE "public"."group_capacity" IS '集群、各Group容量信息表';
-- ----------------------------
-- Table structure for his_config_info
-- ----------------------------
DROP TABLE IF EXISTS "public"."his_config_info";
CREATE TABLE "public"."his_config_info" (
"id" int8 NOT NULL,
"nid" int4 NOT NULL DEFAULT nextval('his_config_info_nid_seq'::regclass),
"data_id" varchar(255) COLLATE "pg_catalog"."default" NOT NULL,
"group_id" varchar(128) COLLATE "pg_catalog"."default" NOT NULL,
"app_name" varchar(128) COLLATE "pg_catalog"."default" DEFAULT NULL::character varying,
"content" text COLLATE "pg_catalog"."default" NOT NULL,
"md5" varchar(32) COLLATE "pg_catalog"."default" DEFAULT NULL::character varying,
"gmt_create" timestamp(6) NOT NULL DEFAULT '2010-05-05 00:00:00'::timestamp without time zone,
"gmt_modified" timestamp(6) NOT NULL DEFAULT '2010-05-05 00:00:00'::timestamp without time zone,
"src_user" text COLLATE "pg_catalog"."default",
"src_ip" varchar(50) COLLATE "pg_catalog"."default" DEFAULT NULL::character varying,
"op_type" char(10) COLLATE "pg_catalog"."default" DEFAULT NULL::bpchar,
"tenant_id" varchar(128) COLLATE "pg_catalog"."default" DEFAULT ''::character varying
)
;
COMMENT ON COLUMN "public"."his_config_info"."app_name" IS 'app_name';
COMMENT ON COLUMN "public"."his_config_info"."tenant_id" IS '租户字段';
COMMENT ON TABLE "public"."his_config_info" IS '多租户改造';
-- ----------------------------
-- Table structure for permissions
-- ----------------------------
DROP TABLE IF EXISTS "public"."permissions";
CREATE TABLE "public"."permissions" (
"role" varchar(50) COLLATE "pg_catalog"."default" NOT NULL,
"resource" varchar(255) COLLATE "pg_catalog"."default" NOT NULL,
"action" varchar(8) COLLATE "pg_catalog"."default" NOT NULL
)
;
-- ----------------------------
-- Table structure for roles
-- ----------------------------
DROP TABLE IF EXISTS "public"."roles";
CREATE TABLE "public"."roles" (
"username" varchar(50) COLLATE "pg_catalog"."default" NOT NULL,
"role" varchar(50) COLLATE "pg_catalog"."default" NOT NULL
)
;
-- ----------------------------
-- Table structure for tenant_capacity
-- ----------------------------
DROP TABLE IF EXISTS "public"."tenant_capacity";
CREATE TABLE "public"."tenant_capacity" (
"id" int4 NOT NULL DEFAULT nextval('tenant_capacity_id_seq'::regclass),
"tenant_id" varchar(128) COLLATE "pg_catalog"."default" NOT NULL DEFAULT ''::character varying,
"quota" int4 NOT NULL DEFAULT 0,
"usage" int4 NOT NULL DEFAULT 0,
"max_size" int4 NOT NULL DEFAULT 0,
"max_aggr_count" int4 NOT NULL DEFAULT 0,
"max_aggr_size" int4 NOT NULL DEFAULT 0,
"max_history_count" int4 NOT NULL DEFAULT 0,
"gmt_create" timestamp(6) NOT NULL DEFAULT '2010-05-05 00:00:00'::timestamp without time zone,
"gmt_modified" timestamp(6) NOT NULL DEFAULT '2010-05-05 00:00:00'::timestamp without time zone
)
;
COMMENT ON COLUMN "public"."tenant_capacity"."id" IS '主键ID';
COMMENT ON COLUMN "public"."tenant_capacity"."tenant_id" IS 'Tenant ID';
COMMENT ON COLUMN "public"."tenant_capacity"."quota" IS '配额,0表示使用默认值';
COMMENT ON COLUMN "public"."tenant_capacity"."usage" IS '使用量';
COMMENT ON COLUMN "public"."tenant_capacity"."max_size" IS '单个配置大小上限,单位为字节,0表示使用默认值';
COMMENT ON COLUMN "public"."tenant_capacity"."max_aggr_count" IS '聚合子配置最大个数';
COMMENT ON COLUMN "public"."tenant_capacity"."max_aggr_size" IS '单个聚合数据的子配置大小上限,单位为字节,0表示使用默认值';
COMMENT ON COLUMN "public"."tenant_capacity"."max_history_count" IS '最大变更历史数量';
COMMENT ON COLUMN "public"."tenant_capacity"."gmt_create" IS '创建时间';
COMMENT ON COLUMN "public"."tenant_capacity"."gmt_modified" IS '修改时间';
COMMENT ON TABLE "public"."tenant_capacity" IS '租户容量信息表';
-- ----------------------------
-- Table structure for tenant_info
-- ----------------------------
DROP TABLE IF EXISTS "public"."tenant_info";
CREATE TABLE "public"."tenant_info" (
"id" int4 NOT NULL DEFAULT nextval('tenant_info_id_seq'::regclass),
"kp" varchar(128) COLLATE "pg_catalog"."default" NOT NULL,
"tenant_id" varchar(128) COLLATE "pg_catalog"."default" DEFAULT ''::character varying,
"tenant_name" varchar(128) COLLATE "pg_catalog"."default" DEFAULT ''::character varying,
"tenant_desc" varchar(256) COLLATE "pg_catalog"."default" DEFAULT NULL::character varying,
"create_source" varchar(32) COLLATE "pg_catalog"."default" DEFAULT NULL::character varying,
"gmt_create" int8 NOT NULL,
"gmt_modified" int8 NOT NULL
)
;
COMMENT ON COLUMN "public"."tenant_info"."id" IS 'id';
COMMENT ON COLUMN "public"."tenant_info"."kp" IS 'kp';
COMMENT ON COLUMN "public"."tenant_info"."tenant_id" IS 'tenant_id';
COMMENT ON COLUMN "public"."tenant_info"."tenant_name" IS 'tenant_name';
COMMENT ON COLUMN "public"."tenant_info"."tenant_desc" IS 'tenant_desc';
COMMENT ON COLUMN "public"."tenant_info"."create_source" IS 'create_source';
COMMENT ON COLUMN "public"."tenant_info"."gmt_create" IS '创建时间';
COMMENT ON COLUMN "public"."tenant_info"."gmt_modified" IS '修改时间';
COMMENT ON TABLE "public"."tenant_info" IS 'tenant_info';
-- ----------------------------
-- Table structure for users
-- ----------------------------
DROP TABLE IF EXISTS "public"."users";
CREATE TABLE "public"."users" (
"username" varchar(50) COLLATE "pg_catalog"."default" NOT NULL,
"password" varchar(500) COLLATE "pg_catalog"."default" NOT NULL,
"enabled" bool NOT NULL
)
;
-- ----------------------------
-- Uniques structure for table config_info
-- ----------------------------
ALTER TABLE "public"."config_info" ADD CONSTRAINT "uk_configinfo_datagrouptenant" UNIQUE ("data_id", "group_id", "tenant_id");
-- ----------------------------
-- Primary Key structure for table config_info
-- ----------------------------
ALTER TABLE "public"."config_info" ADD CONSTRAINT "config_info_pkey" PRIMARY KEY ("id");
-- ----------------------------
-- Uniques structure for table config_info_aggr
-- ----------------------------
ALTER TABLE "public"."config_info_aggr" ADD CONSTRAINT "uk_configinfoaggr_datagrouptenantdatum" UNIQUE ("data_id", "group_id", "tenant_id", "datum_id");
-- ----------------------------
-- Primary Key structure for table config_info_aggr
-- ----------------------------
ALTER TABLE "public"."config_info_aggr" ADD CONSTRAINT "config_info_aggr_pkey" PRIMARY KEY ("id");
-- ----------------------------
-- Uniques structure for table config_info_beta
-- ----------------------------
ALTER TABLE "public"."config_info_beta" ADD CONSTRAINT "uk_configinfobeta_datagrouptenant" UNIQUE ("data_id", "group_id", "tenant_id");
-- ----------------------------
-- Primary Key structure for table config_info_beta
-- ----------------------------
ALTER TABLE "public"."config_info_beta" ADD CONSTRAINT "config_info_beta_pkey" PRIMARY KEY ("id");
-- ----------------------------
-- Uniques structure for table config_info_tag
-- ----------------------------
ALTER TABLE "public"."config_info_tag" ADD CONSTRAINT "uk_configinfotag_datagrouptenanttag" UNIQUE ("data_id", "group_id", "tenant_id", "tag_id");
-- ----------------------------
-- Primary Key structure for table config_info_tag
-- ----------------------------
ALTER TABLE "public"."config_info_tag" ADD CONSTRAINT "config_info_tag_pkey" PRIMARY KEY ("id");
-- ----------------------------
-- Uniques structure for table config_tags_relation
-- ----------------------------
ALTER TABLE "public"."config_tags_relation" ADD CONSTRAINT "uk_configtagrelation_configidtag" UNIQUE ("id", "tag_name", "tag_type");
-- ----------------------------
-- Primary Key structure for table config_tags_relation
-- ----------------------------
ALTER TABLE "public"."config_tags_relation" ADD CONSTRAINT "config_tags_relation_pkey" PRIMARY KEY ("nid");
-- ----------------------------
-- Uniques structure for table group_capacity
-- ----------------------------
ALTER TABLE "public"."group_capacity" ADD CONSTRAINT "uk_group_id" UNIQUE ("group_id");
-- ----------------------------
-- Checks structure for table group_capacity
-- ----------------------------
ALTER TABLE "public"."group_capacity" ADD CONSTRAINT "group_capacity_max_aggr_count_check" CHECK (max_aggr_count >= 0);
ALTER TABLE "public"."group_capacity" ADD CONSTRAINT "group_capacity_quota_check" CHECK (quota >= 0);
ALTER TABLE "public"."group_capacity" ADD CONSTRAINT "group_capacity_max_history_count_check" CHECK (max_history_count >= 0);
ALTER TABLE "public"."group_capacity" ADD CONSTRAINT "group_capacity_max_aggr_size_check" CHECK (max_aggr_size >= 0);
ALTER TABLE "public"."group_capacity" ADD CONSTRAINT "group_capacity_usage_check" CHECK (usage >= 0);
ALTER TABLE "public"."group_capacity" ADD CONSTRAINT "group_capacity_max_size_check" CHECK (max_size >= 0);
-- ----------------------------
-- Primary Key structure for table group_capacity
-- ----------------------------
ALTER TABLE "public"."group_capacity" ADD CONSTRAINT "group_capacity_pkey" PRIMARY KEY ("id");
-- ----------------------------
-- Checks structure for table his_config_info
-- ----------------------------
ALTER TABLE "public"."his_config_info" ADD CONSTRAINT "his_config_info_id_check" CHECK (id >= 0);
ALTER TABLE "public"."his_config_info" ADD CONSTRAINT "his_config_info_nid_check" CHECK (nid >= 0);
-- ----------------------------
-- Primary Key structure for table his_config_info
-- ----------------------------
ALTER TABLE "public"."his_config_info" ADD CONSTRAINT "his_config_info_pkey" PRIMARY KEY ("nid");
-- ----------------------------
-- Uniques structure for table tenant_capacity
-- ----------------------------
ALTER TABLE "public"."tenant_capacity" ADD CONSTRAINT "uk_tenant_id" UNIQUE ("tenant_id");
-- ----------------------------
-- Checks structure for table tenant_capacity
-- ----------------------------
ALTER TABLE "public"."tenant_capacity" ADD CONSTRAINT "tenant_capacity_max_size_check" CHECK (max_size >= 0);
ALTER TABLE "public"."tenant_capacity" ADD CONSTRAINT "tenant_capacity_id_check" CHECK (id >= 0);
ALTER TABLE "public"."tenant_capacity" ADD CONSTRAINT "tenant_capacity_max_aggr_size_check" CHECK (max_aggr_size >= 0);
ALTER TABLE "public"."tenant_capacity" ADD CONSTRAINT "tenant_capacity_max_history_count_check" CHECK (max_history_count >= 0);
ALTER TABLE "public"."tenant_capacity" ADD CONSTRAINT "tenant_capacity_max_aggr_count_check" CHECK (max_aggr_count >= 0);
ALTER TABLE "public"."tenant_capacity" ADD CONSTRAINT "tenant_capacity_quota_check" CHECK (quota >= 0);
ALTER TABLE "public"."tenant_capacity" ADD CONSTRAINT "tenant_capacity_usage_check" CHECK (usage >= 0);
-- ----------------------------
-- Primary Key structure for table tenant_capacity
-- ----------------------------
ALTER TABLE "public"."tenant_capacity" ADD CONSTRAINT "tenant_capacity_pkey" PRIMARY KEY ("id");
-- ----------------------------
-- Uniques structure for table tenant_info
-- ----------------------------
ALTER TABLE "public"."tenant_info" ADD CONSTRAINT "uk_tenant_info_kptenantid" UNIQUE ("kp", "tenant_id");
-- ----------------------------
-- Primary Key structure for table tenant_info
-- ----------------------------
ALTER TABLE "public"."tenant_info" ADD CONSTRAINT "tenant_info_pkey" PRIMARY KEY ("id");
-- ----------------------------
-- Primary Key structure for table users
-- ----------------------------
ALTER TABLE "public"."users" ADD CONSTRAINT "users_pkey" PRIMARY KEY ("username");
INSERT INTO users (username, password, enabled) VALUES ('nacos', '$2a$10$EuWPZHzz32dJN7jexM34MOeYirDdFAZm2kuWj7VEOJhhZkDrxfvUu', TRUE);
INSERT INTO roles (username, role) VALUES ('nacos', 'ROLE_ADMIN');
6、源码编译
在nacos源码根目录下打开terminal窗口执行,编译成功之后,distribution模块下生成target目录,里面有编译之后的文件
mvn -Prelease-nacos '-Dmaven.test.skip=true' '-Dcheckstyle.skip=true' clean install -U
注意:编译之前此处需要加上版本号,不用可能会报错,如下图(根据实际情决定是否需要)
7、启动Nacos
nacos-console模块: 使用console模块配置文件, 单机模式启动,注意配置
二、构建docker镜像
准备工作
首先使用git拉取nacos官方提供的镜像制作工具
git clone https://github.com/nacos-group/nacos-docker.git
拉取成功后目录是这样,我们只是制作一个镜像,只需要用到其中的build文件夹
1、将第一步中构建成功的tar包复制到build文件夹下,让他们出于同一目录
2、修改Dockerfile文件
3、修改conf/application.properties
4、将整个build文件夹上传到服务器的某个目录下
5、构建镜像和容器
方法一:
进入build目录下,利用dockerfile文件构建nacos镜像
docker build -t nacos-server . (注意此行命令nacos-server后面有一个空格 和 . ),执行结束 ,docker images命令即可查看镜像
通过镜像构建容器
docker run -d --name nacos-server -e MODE=standalone -e DB_SERVICE_HOST=127.0.0.1 -e DB_SERVICE_PORT=5432 -e DB_SERVICE_USER=postgres -e DB_SERVICE_PASSWORD=jsjm123.0 -e DB_SERVICE_DB_NAME=nacos -e SPRING_DATASOURCE_PLATFORM=postgresql -p 8848:8848 nacos-server
方法二:通过docker-compose文件,构建镜像和容器
编写docker-compose文件:然后 直接在docker-compose.yml文件所在的目录执行 docker-compose up -d nacos 即可完成镜像和容器的构建
6、访问nacos
更多推荐
所有评论(0)