升级net10成功,部署脚本适配postgresql数据库
This commit is contained in:
parent
f6bb769797
commit
6e98f5d4a9
1
DockerComposeShells/Untitled
Normal file
1
DockerComposeShells/Untitled
Normal file
@ -0,0 +1 @@
|
|||||||
|
jisheiotdata
|
||||||
@ -4,7 +4,7 @@
|
|||||||
"CorsOrigins": "https://*.IoT.com,http://localhost:4200,http://localhost:3100,http://localhost:80,http://10.10.70.11:4200,http://47.110.53.196:30711,http://192.168.111.174:30711"
|
"CorsOrigins": "https://*.IoT.com,http://localhost:4200,http://localhost:3100,http://localhost:80,http://10.10.70.11:4200,http://47.110.53.196:30711,http://192.168.111.174:30711"
|
||||||
},
|
},
|
||||||
"ConnectionStrings": {
|
"ConnectionStrings": {
|
||||||
"Default": "Data Source=mysql;Port=3306;Database=JiSheIoTProDB;uid=root;pwd=JiShe!aqG#5kGgh&0;charset=utf8mb4;Allow User Variables=true;AllowLoadLocalInfile=true;"
|
"Default": "Host=postgres;Port=5432;Database=jisheiotprodb;Username=postgres;Password=JiShe!aqG#5kGgh&0;Encoding=UTF8;Pooling=true;Pooling=true;Minimum Pool Size=5;Maximum Pool Size=100;"
|
||||||
},
|
},
|
||||||
"Hangfire": {
|
"Hangfire": {
|
||||||
"Redis": {
|
"Redis": {
|
||||||
|
|||||||
@ -4,7 +4,7 @@
|
|||||||
"CorsOrigins": "https://*.IoT.com,http://localhost:4200,http://localhost:3100,http://localhost:80,http://10.10.70.11:4200,http://47.110.53.196:30711,http://192.168.111.174:30711"
|
"CorsOrigins": "https://*.IoT.com,http://localhost:4200,http://localhost:3100,http://localhost:80,http://10.10.70.11:4200,http://47.110.53.196:30711,http://192.168.111.174:30711"
|
||||||
},
|
},
|
||||||
"ConnectionStrings": {
|
"ConnectionStrings": {
|
||||||
"Default": "Data Source=mysql;Port=3306;Database=JiSheIoTProDB;uid=root;pwd=JiShe!aqG#5kGgh&0;charset=utf8mb4;Allow User Variables=true;AllowLoadLocalInfile=true;"
|
"Default": "Host=postgres;Port=5432;Database=jisheiotprodb;Username=postgres;Password=JiShe!aqG#5kGgh&0;Encoding=UTF8;Pooling=true;Pooling=true;Minimum Pool Size=5;Maximum Pool Size=100;"
|
||||||
},
|
},
|
||||||
"Hangfire": {
|
"Hangfire": {
|
||||||
"Redis": {
|
"Redis": {
|
||||||
|
|||||||
@ -236,36 +236,38 @@ services:
|
|||||||
networks:
|
networks:
|
||||||
- pulsar-net
|
- pulsar-net
|
||||||
|
|
||||||
mysql-service:
|
postgres-service:
|
||||||
image: registry.cn-qingdao.aliyuncs.com/jisheyun/mysql:8.4.6
|
image: registry.cn-qingdao.aliyuncs.com/jisheyun/postgres:18.1-alpine
|
||||||
container_name: mysql
|
container_name: postgres
|
||||||
hostname: mysql
|
hostname: postgres
|
||||||
restart: always
|
restart: unless-stopped
|
||||||
privileged: true
|
|
||||||
user: "1000:1000" # 使用宿主机用户ID
|
|
||||||
ports:
|
ports:
|
||||||
- "${MYSQL_PORT}:3306"
|
- "${POSTGRES_PORT:-5432}:5432"
|
||||||
environment:
|
environment:
|
||||||
MYSQL_ROOT_PASSWORD: ${MYSQL_ROOT_PASSWORD}
|
- POSTGRES_PASSWORD=${POSTGRES_PASSWORD:-JiShe!aqG#5kGgh&0}
|
||||||
TZ: Asia/Shanghai
|
- POSTGRES_DB=${POSTGRES_DB:-jisheiotprodb}
|
||||||
volumes:
|
- POSTGRES_INITDB_ARGS=--encoding=UTF8 --lc-collate=C --lc-ctype=C
|
||||||
- ./mysql/log:/var/log/mysql
|
- TZ=Asia/Shanghai
|
||||||
- ./mysql/data:/var/lib/mysql
|
volumes:
|
||||||
- ./mysql/init:/docker-entrypoint-initdb.d
|
- ./postgresql/data:/var/lib/postgresql
|
||||||
command:
|
- ./postgresql/init:/docker-entrypoint-initdb.d
|
||||||
- --character-set-server=utf8mb4
|
|
||||||
- --collation-server=utf8mb4_unicode_ci
|
|
||||||
- --user=mysql # 确保MySQL以mysql用户运行
|
|
||||||
- --binlog-expire-logs-seconds=604800 # 设置binlog保留7天(7*24*60*60=604800秒)
|
|
||||||
deploy:
|
deploy:
|
||||||
resources:
|
resources:
|
||||||
limits:
|
limits:
|
||||||
cpus: "2.0"
|
cpus: "2.0"
|
||||||
memory: 2g
|
memory: 2g
|
||||||
stdin_open: true
|
|
||||||
tty: true
|
|
||||||
networks:
|
networks:
|
||||||
- pulsar-net
|
- pulsar-net
|
||||||
|
healthcheck:
|
||||||
|
test: ["CMD-SHELL", "pg_isready -U postgres"]
|
||||||
|
interval: 10s
|
||||||
|
timeout: 5s
|
||||||
|
retries: 5
|
||||||
|
logging:
|
||||||
|
driver: "json-file"
|
||||||
|
options:
|
||||||
|
max-size: "100m"
|
||||||
|
max-file: "5"
|
||||||
|
|
||||||
admin-api-service:
|
admin-api-service:
|
||||||
image: registry.cn-qingdao.aliyuncs.com/jisheyun/jishe.iot.admin:2025.1216.1440
|
image: registry.cn-qingdao.aliyuncs.com/jisheyun/jishe.iot.admin:2025.1216.1440
|
||||||
@ -285,8 +287,8 @@ services:
|
|||||||
stdin_open: true
|
stdin_open: true
|
||||||
tty: true
|
tty: true
|
||||||
depends_on:
|
depends_on:
|
||||||
mysql-service:
|
postgres-service:
|
||||||
condition: service_started
|
condition: service_healthy
|
||||||
redis-service:
|
redis-service:
|
||||||
condition: service_started
|
condition: service_started
|
||||||
iotdb-standalone-service:
|
iotdb-standalone-service:
|
||||||
@ -324,8 +326,8 @@ networks:
|
|||||||
ipam:
|
ipam:
|
||||||
driver: default
|
driver: default
|
||||||
config:
|
config:
|
||||||
- subnet: 172.23.0.0/16
|
- subnet: 172.24.0.0/16
|
||||||
gateway: 172.23.0.1
|
gateway: 172.24.0.1
|
||||||
|
|
||||||
volumes:
|
volumes:
|
||||||
pulsar-zookeeper-data:
|
pulsar-zookeeper-data:
|
||||||
|
|||||||
18
DockerComposeShells/docker-compose-postgresql.yml
Normal file
18
DockerComposeShells/docker-compose-postgresql.yml
Normal file
@ -0,0 +1,18 @@
|
|||||||
|
postgres:
|
||||||
|
image: registry.cn-qingdao.aliyuncs.com/jisheyun/postgres:18.1-alpine
|
||||||
|
container_name: postgres
|
||||||
|
environment:
|
||||||
|
- POSTGRES_PASSWORD=JiShe!aqG#5kGgh&0
|
||||||
|
- POSTGRES_DB=jisheiotprodb
|
||||||
|
- POSTGRES_INITDB_ARGS=--encoding=UTF8 --lc-collate=C --lc-ctype=C
|
||||||
|
volumes:
|
||||||
|
- /mnt/dockerdata/postgresql/data:/var/lib/postgresql
|
||||||
|
ports:
|
||||||
|
- "5432:5432"
|
||||||
|
restart: unless-stopped
|
||||||
|
healthcheck:
|
||||||
|
# 修改为默认的 postgres 用户
|
||||||
|
test: ["CMD-SHELL", "pg_isready -U postgres"]
|
||||||
|
interval: 10s
|
||||||
|
timeout: 5s
|
||||||
|
retries: 5
|
||||||
@ -215,34 +215,32 @@ services:
|
|||||||
max-size: "50m"
|
max-size: "50m"
|
||||||
max-file: "3"
|
max-file: "3"
|
||||||
|
|
||||||
mysql-service:
|
postgres-service:
|
||||||
image: registry.cn-qingdao.aliyuncs.com/jisheyun/mysql:8.4.6
|
image: registry.cn-qingdao.aliyuncs.com/jisheyun/postgres:18.1-alpine
|
||||||
container_name: mysql
|
container_name: postgres
|
||||||
hostname: mysql
|
hostname: postgres
|
||||||
restart: always
|
restart: unless-stopped
|
||||||
privileged: true
|
|
||||||
user: "1000:1000" # 使用宿主机用户ID
|
|
||||||
ports:
|
ports:
|
||||||
- "${MYSQL_PORT}:3306"
|
- "${POSTGRES_PORT:-5432}:5432"
|
||||||
environment:
|
environment:
|
||||||
MYSQL_ROOT_PASSWORD: ${MYSQL_ROOT_PASSWORD}
|
- POSTGRES_PASSWORD=${POSTGRES_PASSWORD:-JiShe!aqG#5kGgh&0}
|
||||||
TZ: Asia/Shanghai
|
- POSTGRES_DB=${POSTGRES_DB:-jisheiotprodb}
|
||||||
volumes:
|
- POSTGRES_INITDB_ARGS=--encoding=UTF8 --lc-collate=C --lc-ctype=C
|
||||||
- ./mysql/log:/var/log/mysql
|
- TZ=Asia/Shanghai
|
||||||
- ./mysql/data:/var/lib/mysql
|
volumes:
|
||||||
command:
|
- ./postgresql/data:/var/lib/postgresql
|
||||||
- --character-set-server=utf8mb4
|
|
||||||
- --collation-server=utf8mb4_unicode_ci
|
|
||||||
- --binlog-expire-logs-seconds=604800 # 设置binlog保留7天(7*24*60*60=604800秒)
|
|
||||||
deploy:
|
deploy:
|
||||||
resources:
|
resources:
|
||||||
limits:
|
limits:
|
||||||
cpus: "2.0"
|
cpus: "2.0"
|
||||||
memory: 2g
|
memory: 2g
|
||||||
stdin_open: true
|
|
||||||
tty: true
|
|
||||||
networks:
|
networks:
|
||||||
- pulsar-net
|
- pulsar-net
|
||||||
|
healthcheck:
|
||||||
|
test: ["CMD-SHELL", "pg_isready -U postgres"]
|
||||||
|
interval: 10s
|
||||||
|
timeout: 5s
|
||||||
|
retries: 5
|
||||||
logging:
|
logging:
|
||||||
driver: "json-file"
|
driver: "json-file"
|
||||||
options:
|
options:
|
||||||
@ -266,8 +264,8 @@ services:
|
|||||||
stdin_open: true
|
stdin_open: true
|
||||||
tty: true
|
tty: true
|
||||||
depends_on:
|
depends_on:
|
||||||
mysql-service:
|
postgres-service:
|
||||||
condition: service_started
|
condition: service_healthy
|
||||||
redis-service:
|
redis-service:
|
||||||
condition: service_started
|
condition: service_started
|
||||||
iotdb-standalone-service:
|
iotdb-standalone-service:
|
||||||
@ -315,8 +313,8 @@ networks:
|
|||||||
ipam:
|
ipam:
|
||||||
driver: default
|
driver: default
|
||||||
config:
|
config:
|
||||||
- subnet: 172.23.0.0/16
|
- subnet: 172.24.0.0/16
|
||||||
gateway: 172.23.0.1
|
gateway: 172.24.0.1
|
||||||
|
|
||||||
volumes:
|
volumes:
|
||||||
pulsar-zookeeper-data:
|
pulsar-zookeeper-data:
|
||||||
|
|||||||
@ -63,34 +63,32 @@ services:
|
|||||||
max-size: "50m"
|
max-size: "50m"
|
||||||
max-file: "3"
|
max-file: "3"
|
||||||
|
|
||||||
mysql-service:
|
postgres-service:
|
||||||
image: registry.cn-qingdao.aliyuncs.com/jisheyun/mysql:8.4.6
|
image: registry.cn-qingdao.aliyuncs.com/jisheyun/postgres:18.1-alpine
|
||||||
container_name: mysql
|
container_name: postgres
|
||||||
hostname: mysql
|
hostname: postgres
|
||||||
restart: always
|
restart: unless-stopped
|
||||||
privileged: true
|
|
||||||
user: "1000:1000" # 使用宿主机用户ID
|
|
||||||
ports:
|
ports:
|
||||||
- "${MYSQL_PORT}:3306"
|
- "${POSTGRES_PORT:-5432}:5432"
|
||||||
environment:
|
environment:
|
||||||
MYSQL_ROOT_PASSWORD: ${MYSQL_ROOT_PASSWORD}
|
- POSTGRES_PASSWORD=${POSTGRES_PASSWORD:-JiShe!aqG#5kGgh&0}
|
||||||
TZ: Asia/Shanghai
|
- POSTGRES_DB=${POSTGRES_DB:-jisheiotprodb}
|
||||||
volumes:
|
- POSTGRES_INITDB_ARGS=--encoding=UTF8 --lc-collate=C --lc-ctype=C
|
||||||
- ./mysql/log:/var/log/mysql
|
- TZ=Asia/Shanghai
|
||||||
- ./mysql/data:/var/lib/mysql
|
volumes:
|
||||||
command:
|
- ./postgresql/data:/var/lib/postgresql/data
|
||||||
- --character-set-server=utf8mb4
|
|
||||||
- --collation-server=utf8mb4_unicode_ci
|
|
||||||
- --binlog-expire-logs-seconds=604800 # 设置binlog保留7天(7*24*60*60=604800秒)
|
|
||||||
deploy:
|
deploy:
|
||||||
resources:
|
resources:
|
||||||
limits:
|
limits:
|
||||||
cpus: "2.0"
|
cpus: "2.0"
|
||||||
memory: 2g
|
memory: 2g
|
||||||
stdin_open: true
|
|
||||||
tty: true
|
|
||||||
networks:
|
networks:
|
||||||
- pulsar-net
|
- pulsar-net
|
||||||
|
healthcheck:
|
||||||
|
test: ["CMD-SHELL", "pg_isready -U postgres"]
|
||||||
|
interval: 10s
|
||||||
|
timeout: 5s
|
||||||
|
retries: 5
|
||||||
logging:
|
logging:
|
||||||
driver: "json-file"
|
driver: "json-file"
|
||||||
options:
|
options:
|
||||||
@ -114,8 +112,8 @@ services:
|
|||||||
stdin_open: true
|
stdin_open: true
|
||||||
tty: true
|
tty: true
|
||||||
depends_on:
|
depends_on:
|
||||||
mysql-service:
|
postgres-service:
|
||||||
condition: service_started
|
condition: service_healthy
|
||||||
redis-service:
|
redis-service:
|
||||||
condition: service_started
|
condition: service_started
|
||||||
iotdb-standalone-service:
|
iotdb-standalone-service:
|
||||||
|
|||||||
@ -53,36 +53,38 @@ services:
|
|||||||
networks:
|
networks:
|
||||||
- pulsar-net
|
- pulsar-net
|
||||||
|
|
||||||
mysql-service:
|
postgres-service:
|
||||||
image: registry.cn-qingdao.aliyuncs.com/jisheyun/mysql:8.4.6
|
image: registry.cn-qingdao.aliyuncs.com/jisheyun/postgres:18.1-alpine
|
||||||
container_name: mysql
|
container_name: postgres
|
||||||
hostname: mysql
|
hostname: postgres
|
||||||
restart: always
|
restart: unless-stopped
|
||||||
privileged: true
|
|
||||||
user: "1000:1000" # 使用宿主机用户ID
|
|
||||||
ports:
|
ports:
|
||||||
- "${MYSQL_PORT}:3306"
|
- "${POSTGRES_PORT:-5432}:5432"
|
||||||
environment:
|
environment:
|
||||||
MYSQL_ROOT_PASSWORD: ${MYSQL_ROOT_PASSWORD}
|
- POSTGRES_PASSWORD=${POSTGRES_PASSWORD:-JiShe!aqG#5kGgh&0}
|
||||||
TZ: Asia/Shanghai
|
- POSTGRES_DB=${POSTGRES_DB:-jisheiotprodb}
|
||||||
volumes:
|
- POSTGRES_INITDB_ARGS=--encoding=UTF8 --lc-collate=C --lc-ctype=C
|
||||||
- ./mysql/log:/var/log/mysql
|
- TZ=Asia/Shanghai
|
||||||
- ./mysql/data:/var/lib/mysql
|
volumes:
|
||||||
- ./mysql/init:/docker-entrypoint-initdb.d
|
- ./postgresql/data:/var/lib/postgresql/data
|
||||||
command:
|
- ./postgresql/init:/docker-entrypoint-initdb.d
|
||||||
- --character-set-server=utf8mb4
|
|
||||||
- --collation-server=utf8mb4_unicode_ci
|
|
||||||
- --user=mysql # 确保MySQL以mysql用户运行
|
|
||||||
- --binlog-expire-logs-seconds=604800 # 设置binlog保留7天(7*24*60*60=604800秒)
|
|
||||||
deploy:
|
deploy:
|
||||||
resources:
|
resources:
|
||||||
limits:
|
limits:
|
||||||
cpus: "2.0"
|
cpus: "2.0"
|
||||||
memory: 2g
|
memory: 2g
|
||||||
stdin_open: true
|
|
||||||
tty: true
|
|
||||||
networks:
|
networks:
|
||||||
- pulsar-net
|
- pulsar-net
|
||||||
|
healthcheck:
|
||||||
|
test: ["CMD-SHELL", "pg_isready -U postgres"]
|
||||||
|
interval: 10s
|
||||||
|
timeout: 5s
|
||||||
|
retries: 5
|
||||||
|
logging:
|
||||||
|
driver: "json-file"
|
||||||
|
options:
|
||||||
|
max-size: "100m"
|
||||||
|
max-file: "5"
|
||||||
|
|
||||||
admin-api-service:
|
admin-api-service:
|
||||||
image: registry.cn-qingdao.aliyuncs.com/jisheyun/jishe.iot.admin:2025.1216.1440
|
image: registry.cn-qingdao.aliyuncs.com/jisheyun/jishe.iot.admin:2025.1216.1440
|
||||||
@ -102,8 +104,8 @@ services:
|
|||||||
stdin_open: true
|
stdin_open: true
|
||||||
tty: true
|
tty: true
|
||||||
depends_on:
|
depends_on:
|
||||||
mysql-service:
|
postgres-service:
|
||||||
condition: service_started
|
condition: service_healthy
|
||||||
redis-service:
|
redis-service:
|
||||||
condition: service_started
|
condition: service_started
|
||||||
iotdb-standalone-service:
|
iotdb-standalone-service:
|
||||||
|
|||||||
@ -13,8 +13,10 @@ IOTDB_PORT=30710
|
|||||||
# Redis配置
|
# Redis配置
|
||||||
REDIS_PORT=30712
|
REDIS_PORT=30712
|
||||||
|
|
||||||
# MySQL配置
|
# PostgreSQL配置
|
||||||
MYSQL_PORT=13306
|
POSTGRES_PORT=5432
|
||||||
|
POSTGRES_PASSWORD=JiShe!aqG#5kGgh&0
|
||||||
|
POSTGRES_DB=jisheiotprodb
|
||||||
|
|
||||||
# Admin API配置
|
# Admin API配置
|
||||||
ADMIN_API_PORT=28080
|
ADMIN_API_PORT=28080
|
||||||
@ -26,4 +28,3 @@ ADMIN_WEB_PORT=30711
|
|||||||
PULSAR_ADMIN_USER=admin
|
PULSAR_ADMIN_USER=admin
|
||||||
PULSAR_ADMIN_PASSWORD=0fd7afb8b0d04e6abc4fdfdac2190a79
|
PULSAR_ADMIN_PASSWORD=0fd7afb8b0d04e6abc4fdfdac2190a79
|
||||||
IOTDB_ROOT_PASSWORD=Lixiao@1980
|
IOTDB_ROOT_PASSWORD=Lixiao@1980
|
||||||
MYSQL_ROOT_PASSWORD=JiShe!aqG#5kGgh&0
|
|
||||||
|
|||||||
@ -1,5 +1,7 @@
|
|||||||
CREATE TABLE IF NOT EXISTS CTWingAepReceiveMessageEntity( time TIMESTAMP TIME, IoTDataType STRING TAG, DeviceType STRING TAG, DeviceAddress STRING TAG, PlatformTenantId STRING FIELD, ProductId STRING FIELD, ServiceId STRING FIELD, IoTPlatformDeviceOpenInfo STRING FIELD, MessageType STRING FIELD, Protocol STRING FIELD, RawMessage STRING FIELD, ReceivedPayload STRING FIELD, ReceivedTimestamps INT64 FIELD, IMSI STRING FIELD, IMEI STRING FIELD ) COMMENT 'CTWingAepReceiveMessageEntity';
|
CREATE DATABASE jisheiotdata;USE jisheiotdata;
|
||||||
|
|
||||||
CREATE TABLE IF NOT EXISTS DeviceTelemetryPacketTaskInfo( time TIMESTAMP TIME, IoTDataType STRING TAG, DeviceType STRING TAG, DeviceAddress STRING TAG, IoTPlatformProductId STRING FIELD, IoTPlatformDeviceOpenInfo STRING FIELD, IoTPlatformProductName STRING FIELD, IoTPlatformAccountId STRING FIELD, AccountPhoneNumber STRING FIELD, IssueRawMessage STRING FIELD, IssuePayload STRING FIELD, ResponseRawMessage STRING FIELD, ResponsePayload STRING FIELD, TelemetrySource INT32 FIELD, IoTPlatform INT32 FIELD, RetryCount INT32 FIELD, LastIssueTime TIMESTAMP FIELD, IssueStatus INT32 FIELD ) COMMENT 'DeviceTelemetryPacketTaskInfo';
|
CREATE TABLE IF NOT EXISTS CTWingAepReceiveMessageEntity( time TIMESTAMP TIME, IoTDataType STRING TAG, DeviceType STRING TAG, DeviceAddress STRING TAG, PlatformTenantId STRING FIELD, ProductId STRING FIELD, ServiceId STRING FIELD, IoTPlatformDeviceOpenInfo STRING FIELD, MessageType STRING FIELD, Protocol STRING FIELD, RawMessage STRING FIELD, ReceivedPayload STRING FIELD, ReceivedTimestamps INT64 FIELD, IMSI STRING FIELD, IMEI STRING FIELD ) COMMENT 'CTWingAepReceiveMessageEntity' ;
|
||||||
|
|
||||||
CREATE TABLE IF NOT EXISTS OneNETReceiveMessageEntity( time TIMESTAMP TIME, IoTDataType STRING TAG, DeviceType STRING TAG, DeviceAddress STRING TAG, ProductId STRING FIELD, IoTPlatformDeviceOpenInfo STRING FIELD, MessageType STRING FIELD, Protocol STRING FIELD, RawMessage STRING FIELD, IsEncrypted BOOLEAN FIELD, PlaintextMessage STRING FIELD, ReceivedPayload STRING FIELD, ReceivedTimestamps INT64 FIELD ) COMMENT 'OneNETReceiveMessageEntity';
|
CREATE TABLE IF NOT EXISTS DeviceTelemetryPacketTaskInfo( time TIMESTAMP TIME, IoTDataType STRING TAG, DeviceType STRING TAG, DeviceAddress STRING TAG, IoTPlatformProductId STRING FIELD, IoTPlatformDeviceOpenInfo STRING FIELD, IoTPlatformProductName STRING FIELD, IoTPlatformAccountId STRING FIELD, AccountPhoneNumber STRING FIELD, IssueRawMessage STRING FIELD, IssuePayload STRING FIELD, ResponseRawMessage STRING FIELD, ResponsePayload STRING FIELD, TelemetrySource INT32 FIELD, IoTPlatform INT32 FIELD, RetryCount INT32 FIELD, LastIssueTime TIMESTAMP FIELD, IssueStatus INT32 FIELD ) COMMENT 'DeviceTelemetryPacketTaskInfo' ;
|
||||||
|
|
||||||
|
CREATE TABLE IF NOT EXISTS OneNETReceiveMessageEntity( time TIMESTAMP TIME, IoTDataType STRING TAG, DeviceType STRING TAG, DeviceAddress STRING TAG, ProductId STRING FIELD, IoTPlatformDeviceOpenInfo STRING FIELD, MessageType STRING FIELD, Protocol STRING FIELD, RawMessage STRING FIELD, IsEncrypted BOOLEAN FIELD, PlaintextMessage STRING FIELD, ReceivedPayload STRING FIELD, ReceivedTimestamps INT64 FIELD ) COMMENT 'OneNETReceiveMessageEntity'
|
||||||
25
DockerComposeShells/postgresql/init/01-create-user.sql
Normal file
25
DockerComposeShells/postgresql/init/01-create-user.sql
Normal file
@ -0,0 +1,25 @@
|
|||||||
|
-- PostgreSQL 初始化脚本:创建应用程序用户
|
||||||
|
-- 此脚本会在数据库首次初始化时自动执行
|
||||||
|
|
||||||
|
-- 创建应用程序用户 iotmanage(如果不存在)
|
||||||
|
DO $$
|
||||||
|
BEGIN
|
||||||
|
IF NOT EXISTS (SELECT FROM pg_catalog.pg_user WHERE usename = 'iotmanage') THEN
|
||||||
|
CREATE USER iotmanage WITH PASSWORD 'Iage@Passo#43tMand123!';
|
||||||
|
RAISE NOTICE '用户 iotmanage 创建成功';
|
||||||
|
ELSE
|
||||||
|
RAISE NOTICE '用户 iotmanage 已存在';
|
||||||
|
END IF;
|
||||||
|
END
|
||||||
|
$$;
|
||||||
|
|
||||||
|
-- 授予数据库权限
|
||||||
|
-- 将 jisheiotprodb 数据库的所有权限授予 iotmanage 用户
|
||||||
|
GRANT ALL PRIVILEGES ON DATABASE jisheiotprodb TO iotmanage;
|
||||||
|
|
||||||
|
-- 授予创建数据库权限(如果需要)
|
||||||
|
ALTER USER iotmanage CREATEDB;
|
||||||
|
|
||||||
|
-- 注意:schema 权限需要在连接到具体数据库后授予
|
||||||
|
-- 由于初始化脚本在创建数据库后执行,schema 权限会在数据库创建后自动授予
|
||||||
|
-- 如果需要更细粒度的权限控制,可以创建单独的脚本文件
|
||||||
@ -0,0 +1,17 @@
|
|||||||
|
-- 授予 schema 权限给 iotmanage 用户
|
||||||
|
-- 此脚本会在数据库创建后执行,此时可以连接到具体数据库
|
||||||
|
|
||||||
|
-- 连接到 jisheiotprodb 数据库并授予权限
|
||||||
|
-- 注意:在初始化脚本中,每个 SQL 文件都会自动连接到 POSTGRES_DB 指定的数据库
|
||||||
|
|
||||||
|
-- 授予 public schema 的所有权限
|
||||||
|
GRANT ALL ON SCHEMA public TO iotmanage;
|
||||||
|
|
||||||
|
-- 设置默认权限:新创建的表和序列自动授予 iotmanage 用户
|
||||||
|
ALTER DEFAULT PRIVILEGES IN SCHEMA public GRANT ALL ON TABLES TO iotmanage;
|
||||||
|
ALTER DEFAULT PRIVILEGES IN SCHEMA public GRANT ALL ON SEQUENCES TO iotmanage;
|
||||||
|
ALTER DEFAULT PRIVILEGES IN SCHEMA public GRANT ALL ON FUNCTIONS TO iotmanage;
|
||||||
|
|
||||||
|
-- 如果已有表,需要手动授予权限(在表创建后执行)
|
||||||
|
-- GRANT ALL PRIVILEGES ON ALL TABLES IN SCHEMA public TO iotmanage;
|
||||||
|
-- GRANT ALL PRIVILEGES ON ALL SEQUENCES IN SCHEMA public TO iotmanage;
|
||||||
58
DockerComposeShells/postgresql/init/README.md
Normal file
58
DockerComposeShells/postgresql/init/README.md
Normal file
@ -0,0 +1,58 @@
|
|||||||
|
# PostgreSQL 初始化脚本说明
|
||||||
|
|
||||||
|
## 目录说明
|
||||||
|
|
||||||
|
`./postgresql/init/` 目录下的脚本会在 PostgreSQL 容器**首次启动**时自动执行。
|
||||||
|
|
||||||
|
## 执行规则
|
||||||
|
|
||||||
|
1. **仅执行一次**:只有当数据目录为空时才会执行
|
||||||
|
2. **执行顺序**:按文件名字母顺序执行
|
||||||
|
3. **支持格式**:
|
||||||
|
- `.sh` - Shell 脚本
|
||||||
|
- `.sql` - SQL 脚本
|
||||||
|
- `.sql.gz` - 压缩的 SQL 脚本
|
||||||
|
|
||||||
|
## 用户说明
|
||||||
|
|
||||||
|
### postgres 用户
|
||||||
|
- **默认超级用户**,总是存在,无法删除
|
||||||
|
- 拥有所有权限
|
||||||
|
- 用于数据库管理操作
|
||||||
|
|
||||||
|
### iotmanage 用户
|
||||||
|
- **应用程序用户**,通过初始化脚本创建
|
||||||
|
- 拥有指定数据库的权限
|
||||||
|
- 用于应用程序连接
|
||||||
|
|
||||||
|
## 文件命名建议
|
||||||
|
|
||||||
|
建议使用数字前缀来确保执行顺序:
|
||||||
|
- `01-create-user.sql` - 创建用户
|
||||||
|
- `02-create-schema.sql` - 创建 schema
|
||||||
|
- `03-create-tables.sql` - 创建表结构
|
||||||
|
- `04-insert-data.sql` - 插入初始数据
|
||||||
|
|
||||||
|
## 注意事项
|
||||||
|
|
||||||
|
1. 如果数据目录已有数据,这些脚本**不会再次执行**
|
||||||
|
2. 如果需要重新初始化,需要删除数据目录:`rm -rf ./postgresql/data/*`
|
||||||
|
3. 脚本中的密码建议使用环境变量,不要硬编码
|
||||||
|
4. 确保脚本具有幂等性(可以安全地重复执行)
|
||||||
|
|
||||||
|
## 示例:使用环境变量
|
||||||
|
|
||||||
|
```sql
|
||||||
|
-- 从环境变量读取密码(需要在脚本中处理)
|
||||||
|
CREATE USER iotmanage WITH PASSWORD :'IOTMANAGE_PASSWORD';
|
||||||
|
```
|
||||||
|
|
||||||
|
## 验证用户
|
||||||
|
|
||||||
|
```bash
|
||||||
|
# 查看所有用户
|
||||||
|
docker exec -it postgres psql -U postgres -c "\du"
|
||||||
|
|
||||||
|
# 测试 iotmanage 用户连接
|
||||||
|
docker exec -it postgres psql -U iotmanage -d jisheiotprodb -c "SELECT current_user;"
|
||||||
|
```
|
||||||
@ -62,25 +62,23 @@ echo "✅ 认证配置完成 - 用户名: ${PULSAR_ADMIN_USER}, 密码: ${PULSAR
|
|||||||
|
|
||||||
# 创建数据目录
|
# 创建数据目录
|
||||||
echo "📁 创建数据目录..."
|
echo "📁 创建数据目录..."
|
||||||
sudo mkdir -p /mnt/dockerdata/appservice/{pulsar,redis,mysql,iotdb,adminapi}
|
sudo mkdir -p /mnt/dockerdata/appservice/{pulsar,redis,postgresql,iotdb,adminapi}
|
||||||
sudo mkdir -p /mnt/dockerdata/appservice/pulsar/{zookeeper-data,bookkeeper-data,pulsar-data}
|
sudo mkdir -p /mnt/dockerdata/appservice/pulsar/{zookeeper-data,bookkeeper-data,pulsar-data}
|
||||||
sudo mkdir -p /mnt/dockerdata/appservice/{redis/{outdata,conf},mysql/{conf,log,data},iotdb/{conf,data,logs},adminapi/{conf,logs}}
|
sudo mkdir -p /mnt/dockerdata/appservice/{redis/{outdata,conf},postgresql/data,iotdb/{conf,data,logs},adminapi/{conf,logs}}
|
||||||
sudo chown -R 10000:0 /mnt/dockerdata/appservice/pulsar/
|
sudo chown -R 10000:0 /mnt/dockerdata/appservice/pulsar/
|
||||||
|
|
||||||
# 创建本地目录的软链接(如果不存在)
|
# 创建本地目录的软链接(如果不存在)
|
||||||
echo "🔗 创建本地目录链接..."
|
echo "🔗 创建本地目录链接..."
|
||||||
mkdir -p ./pulsar/{zookeeper-data,bookkeeper-data,pulsar-data,auth}
|
mkdir -p ./pulsar/{zookeeper-data,bookkeeper-data,pulsar-data,auth}
|
||||||
mkdir -p ./redis/{outdata,conf}
|
mkdir -p ./redis/{outdata,conf}
|
||||||
mkdir -p ./mysql/{conf,log,data}
|
mkdir -p ./postgresql/{data,init}
|
||||||
mkdir -p ./iotdb/{conf,data,logs}
|
mkdir -p ./iotdb/{conf,data,logs}
|
||||||
mkdir -p ./adminapi/{conf,logs}
|
mkdir -p ./adminapi/{conf,logs}
|
||||||
|
|
||||||
# 修复MySQL目录权限
|
# 修复PostgreSQL目录权限
|
||||||
echo "🔧 修复MySQL目录权限..."
|
echo "🔧 修复PostgreSQL目录权限..."
|
||||||
sudo chown -R 1000:1000 ./mysql/data
|
sudo chown -R 999:999 ./postgresql/data 2>/dev/null || true
|
||||||
sudo chown -R 1000:1000 ./mysql/log
|
sudo chmod -R 755 ./postgresql/data 2>/dev/null || true
|
||||||
sudo chmod -R 755 ./mysql/data
|
|
||||||
sudo chmod -R 755 ./mysql/log
|
|
||||||
|
|
||||||
sudo chmod -R 755 ./adminapi/logs
|
sudo chmod -R 755 ./adminapi/logs
|
||||||
|
|
||||||
@ -124,19 +122,21 @@ sudo rm -rf ./iotdb/data/*
|
|||||||
sudo rm -rf ./iotdb/logs/*
|
sudo rm -rf ./iotdb/logs/*
|
||||||
echo "✅ IoTDB数据目录已清理,配置目录已保留"
|
echo "✅ IoTDB数据目录已清理,配置目录已保留"
|
||||||
|
|
||||||
# MySQL配置检查
|
# PostgreSQL配置检查
|
||||||
echo "⚙️ 检查MySQL配置..."
|
echo "⚙️ 检查PostgreSQL配置..."
|
||||||
if [ ! -d "./mysql/init" ]; then
|
if [ ! -d "./postgresql/init" ]; then
|
||||||
echo "❌ MySQL初始化脚本目录不存在,请检查"
|
echo "⚠️ PostgreSQL初始化脚本目录不存在,将创建目录(可选)"
|
||||||
exit 1
|
mkdir -p ./postgresql/init
|
||||||
fi
|
fi
|
||||||
|
|
||||||
if [ ! -f "./mysql/init/init-db.sql" ]; then
|
# PostgreSQL初始化脚本是可选的,不强制要求
|
||||||
echo "❌ MySQL初始化脚本不存在,请检查"
|
if [ -f "./postgresql/init/init-db.sql" ]; then
|
||||||
exit 1
|
echo "✅ PostgreSQL初始化脚本已存在"
|
||||||
|
else
|
||||||
|
echo "ℹ️ PostgreSQL初始化脚本不存在(可选,将在首次启动时使用环境变量创建数据库)"
|
||||||
fi
|
fi
|
||||||
|
|
||||||
echo "✅ MySQL配置检查通过"
|
echo "✅ PostgreSQL配置检查通过"
|
||||||
|
|
||||||
# 删除服务订阅模式配置文件(如果存在)
|
# 删除服务订阅模式配置文件(如果存在)
|
||||||
echo "🗑️ 清理服务订阅模式配置文件..."
|
echo "🗑️ 清理服务订阅模式配置文件..."
|
||||||
@ -170,7 +170,7 @@ sleep 10
|
|||||||
echo "IoTDB服务已就绪,开始创建表模型数据库和设置root账号密码..."
|
echo "IoTDB服务已就绪,开始创建表模型数据库和设置root账号密码..."
|
||||||
|
|
||||||
# 使用非交互式方式创建表模型数据库
|
# 使用非交互式方式创建表模型数据库
|
||||||
echo "CREATE TABLE IF NOT EXISTS CTWingAepReceiveMessageEntity(time TIMESTAMP TIME, IoTDataType STRING TAG, DeviceType STRING TAG, DeviceAddress STRING TAG, SubDevice STRING TAG, PlatformTenantId STRING FIELD, ProductId STRING FIELD, ServiceId STRING FIELD, IoTPlatformDeviceOpenInfo STRING FIELD, MessageType STRING FIELD, Protocol STRING FIELD, RawMessage STRING FIELD, ReceivedPayload STRING FIELD, ReceivedTimestamps INT64 FIELD, IMSI STRING FIELD, IMEI STRING FIELD ) COMMENT 'CTWingAepReceiveMessageEntity';CREATE TABLE IF NOT EXISTS DeviceTelemetryPacketTaskInfo(time TIMESTAMP TIME, IoTDataType STRING TAG, DeviceType STRING TAG, DeviceAddress STRING TAG, SubDevice STRING TAG, IoTPlatformProductId STRING FIELD, IoTPlatformDeviceOpenInfo STRING FIELD, IoTPlatformProductName STRING FIELD, IoTPlatformAccountId STRING FIELD, AccountPhoneNumber STRING FIELD, TelemetryType INT32 FIELD, IssueRawMessage STRING FIELD, IssuePayload STRING FIELD, ResponseRawMessage STRING FIELD, ResponsePayload STRING FIELD, TelemetrySource INT32 FIELD, IoTPlatform INT32 FIELD, RetryCount INT32 FIELD, LastIssueTime TIMESTAMP FIELD, IssueStatus INT32 FIELD ) COMMENT 'DeviceTelemetryPacketTaskInfo';CREATE TABLE IF NOT EXISTS OneNETReceiveMessageEntity(time TIMESTAMP TIME, IoTDataType STRING TAG, DeviceType STRING TAG, DeviceAddress STRING TAG, SubDevice STRING TAG, ProductId STRING FIELD, IoTPlatformDeviceOpenInfo STRING FIELD, MessageType STRING FIELD, Protocol STRING FIELD, RawMessage STRING FIELD, IsEncrypted BOOLEAN FIELD, PlaintextMessage STRING FIELD, ReceivedPayload STRING FIELD, ReceivedTimestamps INT64 FIELD ) COMMENT 'OneNETReceiveMessageEntity';" | ./start-cli.sh -h iotdb-standalone -sql_dialect table
|
echo "CREATE DATABASE jisheiotdata;USE jisheiotdata;CREATE TABLE IF NOT EXISTS CTWingAepReceiveMessageEntity( time TIMESTAMP TIME, IoTDataType STRING TAG, DeviceType STRING TAG, DeviceAddress STRING TAG, PlatformTenantId STRING FIELD, ProductId STRING FIELD, ServiceId STRING FIELD, IoTPlatformDeviceOpenInfo STRING FIELD, MessageType STRING FIELD, Protocol STRING FIELD, RawMessage STRING FIELD, ReceivedPayload STRING FIELD, ReceivedTimestamps INT64 FIELD, IMSI STRING FIELD, IMEI STRING FIELD ) COMMENT 'CTWingAepReceiveMessageEntity' ;CREATE TABLE IF NOT EXISTS DeviceTelemetryPacketTaskInfo( time TIMESTAMP TIME, IoTDataType STRING TAG, DeviceType STRING TAG, DeviceAddress STRING TAG, IoTPlatformProductId STRING FIELD, IoTPlatformDeviceOpenInfo STRING FIELD, IoTPlatformProductName STRING FIELD, IoTPlatformAccountId STRING FIELD, AccountPhoneNumber STRING FIELD, IssueRawMessage STRING FIELD, IssuePayload STRING FIELD, ResponseRawMessage STRING FIELD, ResponsePayload STRING FIELD, TelemetrySource INT32 FIELD, IoTPlatform INT32 FIELD, RetryCount INT32 FIELD, LastIssueTime TIMESTAMP FIELD, IssueStatus INT32 FIELD ) COMMENT 'DeviceTelemetryPacketTaskInfo' ;CREATE TABLE IF NOT EXISTS OneNETReceiveMessageEntity( time TIMESTAMP TIME, IoTDataType STRING TAG, DeviceType STRING TAG, DeviceAddress STRING TAG, ProductId STRING FIELD, IoTPlatformDeviceOpenInfo STRING FIELD, MessageType STRING FIELD, Protocol STRING FIELD, RawMessage STRING FIELD, IsEncrypted BOOLEAN FIELD, PlaintextMessage STRING FIELD, ReceivedPayload STRING FIELD, ReceivedTimestamps INT64 FIELD ) COMMENT 'OneNETReceiveMessageEntity'" | ./start-cli.sh -h iotdb-standalone -sql_dialect table
|
||||||
|
|
||||||
# 使用非交互式方式设置密码
|
# 使用非交互式方式设置密码
|
||||||
echo "ALTER USER root SET PASSWORD '${IOTDB_ROOT_PASSWORD}';" | ./start-cli.sh -h iotdb-standalone
|
echo "ALTER USER root SET PASSWORD '${IOTDB_ROOT_PASSWORD}';" | ./start-cli.sh -h iotdb-standalone
|
||||||
@ -188,7 +188,7 @@ echo " Pulsar Broker: ${SERVER_IP}:${PULSAR_BROKER_PORT}"
|
|||||||
echo " Pulsar Admin: http://${SERVER_IP}:${PULSAR_ADMIN_PORT}"
|
echo " Pulsar Admin: http://${SERVER_IP}:${PULSAR_ADMIN_PORT}"
|
||||||
echo " IoTDB: ${SERVER_IP}:${IOTDB_PORT} (root/${IOTDB_ROOT_PASSWORD})"
|
echo " IoTDB: ${SERVER_IP}:${IOTDB_PORT} (root/${IOTDB_ROOT_PASSWORD})"
|
||||||
echo " Redis: ${SERVER_IP}:6379"
|
echo " Redis: ${SERVER_IP}:6379"
|
||||||
echo " MySQL: ${SERVER_IP}:${MYSQL_PORT}"
|
echo " PostgreSQL: ${SERVER_IP}:${POSTGRES_PORT:-5432} (postgres/${POSTGRES_PASSWORD:-JiShe!aqG#5kGgh&0})"
|
||||||
echo " Admin API: http://${SERVER_IP}:${ADMIN_API_PORT}"
|
echo " Admin API: http://${SERVER_IP}:${ADMIN_API_PORT}"
|
||||||
echo " Admin UI: http://${SERVER_IP}:${ADMIN_WEB_PORT}"
|
echo " Admin UI: http://${SERVER_IP}:${ADMIN_WEB_PORT}"
|
||||||
echo " 用户名: ${PULSAR_ADMIN_USER}"
|
echo " 用户名: ${PULSAR_ADMIN_USER}"
|
||||||
@ -202,7 +202,7 @@ echo ""
|
|||||||
echo "🧪 测试连接:"
|
echo "🧪 测试连接:"
|
||||||
echo " Pulsar: curl -u ${PULSAR_ADMIN_USER}:${PULSAR_ADMIN_PASSWORD} http://${SERVER_IP}:${PULSAR_ADMIN_PORT}/admin/v2/clusters"
|
echo " Pulsar: curl -u ${PULSAR_ADMIN_USER}:${PULSAR_ADMIN_PASSWORD} http://${SERVER_IP}:${PULSAR_ADMIN_PORT}/admin/v2/clusters"
|
||||||
echo " Redis: redis-cli -h ${SERVER_IP} -p 6379 ping"
|
echo " Redis: redis-cli -h ${SERVER_IP} -p 6379 ping"
|
||||||
echo " MySQL: mysql -h ${SERVER_IP} -P ${MYSQL_PORT} -uroot -p${MYSQL_ROOT_PASSWORD} -e 'SELECT 1'"
|
echo " PostgreSQL: PGPASSWORD=${POSTGRES_PASSWORD:-JiShe!aqG#5kGgh&0} psql -h ${SERVER_IP} -p ${POSTGRES_PORT:-5432} -U postgres -d ${POSTGRES_DB:-jisheiotprodb} -c 'SELECT 1'"
|
||||||
echo " IoTDB: docker exec -it iotdb-standalone ./start-cli.sh -h iotdb-standalone -u root -p Lixiao@1980"
|
echo " IoTDB: docker exec -it iotdb-standalone ./start-cli.sh -h iotdb-standalone -u root -p Lixiao@1980"
|
||||||
echo ""
|
echo ""
|
||||||
echo "🎯 等待服务启动完成..."
|
echo "🎯 等待服务启动完成..."
|
||||||
|
|||||||
@ -42,22 +42,20 @@ echo "=== 采集端一键启动脚本 ==="
|
|||||||
|
|
||||||
# 创建数据目录
|
# 创建数据目录
|
||||||
echo "📁 创建数据目录..."
|
echo "📁 创建数据目录..."
|
||||||
sudo mkdir -p /mnt/dockerdata/appservice/{redis,mysql,iotdb,adminapi}
|
sudo mkdir -p /mnt/dockerdata/appservice/{redis,postgresql,iotdb,adminapi}
|
||||||
sudo mkdir -p /mnt/dockerdata/appservice/{redis/{outdata,conf},mysql/{conf,log,data},iotdb/{conf,data,logs},adminapi/{conf,logs}}
|
sudo mkdir -p /mnt/dockerdata/appservice/{redis/{outdata,conf},postgresql/data,iotdb/{conf,data,logs},adminapi/{conf,logs}}
|
||||||
|
|
||||||
# 创建本地目录的软链接(如果不存在)
|
# 创建本地目录的软链接(如果不存在)
|
||||||
echo "🔗 创建本地目录链接..."
|
echo "🔗 创建本地目录链接..."
|
||||||
mkdir -p ./redis/{outdata,conf}
|
mkdir -p ./redis/{outdata,conf}
|
||||||
mkdir -p ./mysql/{conf,log,data}
|
mkdir -p ./postgresql/{data,init}
|
||||||
mkdir -p ./iotdb/{conf,data,logs}
|
mkdir -p ./iotdb/{conf,data,logs}
|
||||||
mkdir -p ./adminapi/{conf,logs}
|
mkdir -p ./adminapi/{conf,logs}
|
||||||
|
|
||||||
# 修复MySQL目录权限
|
# 修复PostgreSQL目录权限
|
||||||
echo "🔧 修复MySQL目录权限..."
|
echo "🔧 修复PostgreSQL目录权限..."
|
||||||
sudo chown -R 1000:1000 ./mysql/data
|
sudo chown -R 999:999 ./postgresql/data 2>/dev/null || true
|
||||||
sudo chown -R 1000:1000 ./mysql/log
|
sudo chmod -R 755 ./postgresql/data 2>/dev/null || true
|
||||||
sudo chmod -R 755 ./mysql/data
|
|
||||||
sudo chmod -R 755 ./mysql/log
|
|
||||||
|
|
||||||
sudo chmod -R 755 ./adminapi/logs
|
sudo chmod -R 755 ./adminapi/logs
|
||||||
|
|
||||||
@ -101,19 +99,21 @@ sudo rm -rf ./iotdb/data/*
|
|||||||
sudo rm -rf ./iotdb/logs/*
|
sudo rm -rf ./iotdb/logs/*
|
||||||
echo "✅ IoTDB数据目录已清理,配置目录已保留"
|
echo "✅ IoTDB数据目录已清理,配置目录已保留"
|
||||||
|
|
||||||
# MySQL配置检查
|
# PostgreSQL配置检查
|
||||||
echo "⚙️ 检查MySQL配置..."
|
echo "⚙️ 检查PostgreSQL配置..."
|
||||||
if [ ! -d "./mysql/init" ]; then
|
if [ ! -d "./postgresql/init" ]; then
|
||||||
echo "❌ MySQL初始化脚本目录不存在,请检查"
|
echo "⚠️ PostgreSQL初始化脚本目录不存在,将创建目录(可选)"
|
||||||
exit 1
|
mkdir -p ./postgresql/init
|
||||||
fi
|
fi
|
||||||
|
|
||||||
if [ ! -f "./mysql/init/init-db.sql" ]; then
|
# PostgreSQL初始化脚本是可选的,不强制要求
|
||||||
echo "❌ MySQL初始化脚本不存在,请检查"
|
if [ -f "./postgresql/init/init-db.sql" ]; then
|
||||||
exit 1
|
echo "✅ PostgreSQL初始化脚本已存在"
|
||||||
|
else
|
||||||
|
echo "ℹ️ PostgreSQL初始化脚本不存在(可选,将在首次启动时使用环境变量创建数据库)"
|
||||||
fi
|
fi
|
||||||
|
|
||||||
echo "✅ MySQL配置检查通过"
|
echo "✅ PostgreSQL配置检查通过"
|
||||||
|
|
||||||
# 处理 Admin API 配置文件
|
# 处理 Admin API 配置文件
|
||||||
echo "📝 配置 Admin API 配置文件..."
|
echo "📝 配置 Admin API 配置文件..."
|
||||||
@ -157,7 +157,7 @@ sleep 10
|
|||||||
echo "IoTDB服务已就绪,开始创建表模型数据库和设置root账号密码..."
|
echo "IoTDB服务已就绪,开始创建表模型数据库和设置root账号密码..."
|
||||||
|
|
||||||
# 使用非交互式方式创建表模型数据库
|
# 使用非交互式方式创建表模型数据库
|
||||||
echo "CREATE TABLE IF NOT EXISTS CTWingAepReceiveMessageEntity(time TIMESTAMP TIME, IoTDataType STRING TAG, DeviceType STRING TAG, DeviceAddress STRING TAG, SubDevice STRING TAG, PlatformTenantId STRING FIELD, ProductId STRING FIELD, ServiceId STRING FIELD, IoTPlatformDeviceOpenInfo STRING FIELD, MessageType STRING FIELD, Protocol STRING FIELD, RawMessage STRING FIELD, ReceivedPayload STRING FIELD, ReceivedTimestamps INT64 FIELD, IMSI STRING FIELD, IMEI STRING FIELD ) COMMENT 'CTWingAepReceiveMessageEntity';CREATE TABLE IF NOT EXISTS DeviceTelemetryPacketTaskInfo(time TIMESTAMP TIME, IoTDataType STRING TAG, DeviceType STRING TAG, DeviceAddress STRING TAG, SubDevice STRING TAG, IoTPlatformProductId STRING FIELD, IoTPlatformDeviceOpenInfo STRING FIELD, IoTPlatformProductName STRING FIELD, IoTPlatformAccountId STRING FIELD, AccountPhoneNumber STRING FIELD, TelemetryType INT32 FIELD, IssueRawMessage STRING FIELD, IssuePayload STRING FIELD, ResponseRawMessage STRING FIELD, ResponsePayload STRING FIELD, TelemetrySource INT32 FIELD, IoTPlatform INT32 FIELD, RetryCount INT32 FIELD, LastIssueTime TIMESTAMP FIELD, IssueStatus INT32 FIELD ) COMMENT 'DeviceTelemetryPacketTaskInfo';CREATE TABLE IF NOT EXISTS OneNETReceiveMessageEntity(time TIMESTAMP TIME, IoTDataType STRING TAG, DeviceType STRING TAG, DeviceAddress STRING TAG, SubDevice STRING TAG, ProductId STRING FIELD, IoTPlatformDeviceOpenInfo STRING FIELD, MessageType STRING FIELD, Protocol STRING FIELD, RawMessage STRING FIELD, IsEncrypted BOOLEAN FIELD, PlaintextMessage STRING FIELD, ReceivedPayload STRING FIELD, ReceivedTimestamps INT64 FIELD ) COMMENT 'OneNETReceiveMessageEntity';" | ./start-cli.sh -h iotdb-standalone -sql_dialect table
|
echo "CREATE DATABASE jisheiotdata;USE jisheiotdata;CREATE TABLE IF NOT EXISTS CTWingAepReceiveMessageEntity( time TIMESTAMP TIME, IoTDataType STRING TAG, DeviceType STRING TAG, DeviceAddress STRING TAG, PlatformTenantId STRING FIELD, ProductId STRING FIELD, ServiceId STRING FIELD, IoTPlatformDeviceOpenInfo STRING FIELD, MessageType STRING FIELD, Protocol STRING FIELD, RawMessage STRING FIELD, ReceivedPayload STRING FIELD, ReceivedTimestamps INT64 FIELD, IMSI STRING FIELD, IMEI STRING FIELD ) COMMENT 'CTWingAepReceiveMessageEntity' ;CREATE TABLE IF NOT EXISTS DeviceTelemetryPacketTaskInfo( time TIMESTAMP TIME, IoTDataType STRING TAG, DeviceType STRING TAG, DeviceAddress STRING TAG, IoTPlatformProductId STRING FIELD, IoTPlatformDeviceOpenInfo STRING FIELD, IoTPlatformProductName STRING FIELD, IoTPlatformAccountId STRING FIELD, AccountPhoneNumber STRING FIELD, IssueRawMessage STRING FIELD, IssuePayload STRING FIELD, ResponseRawMessage STRING FIELD, ResponsePayload STRING FIELD, TelemetrySource INT32 FIELD, IoTPlatform INT32 FIELD, RetryCount INT32 FIELD, LastIssueTime TIMESTAMP FIELD, IssueStatus INT32 FIELD ) COMMENT 'DeviceTelemetryPacketTaskInfo' ;CREATE TABLE IF NOT EXISTS OneNETReceiveMessageEntity( time TIMESTAMP TIME, IoTDataType STRING TAG, DeviceType STRING TAG, DeviceAddress STRING TAG, ProductId STRING FIELD, IoTPlatformDeviceOpenInfo STRING FIELD, MessageType STRING FIELD, Protocol STRING FIELD, RawMessage STRING FIELD, IsEncrypted BOOLEAN FIELD, PlaintextMessage STRING FIELD, ReceivedPayload STRING FIELD, ReceivedTimestamps INT64 FIELD ) COMMENT 'OneNETReceiveMessageEntity'" | ./start-cli.sh -h iotdb-standalone -sql_dialect table
|
||||||
|
|
||||||
# 使用非交互式方式设置密码
|
# 使用非交互式方式设置密码
|
||||||
echo "ALTER USER root SET PASSWORD '${IOTDB_ROOT_PASSWORD}';" | ./start-cli.sh -h iotdb-standalone
|
echo "ALTER USER root SET PASSWORD '${IOTDB_ROOT_PASSWORD}';" | ./start-cli.sh -h iotdb-standalone
|
||||||
@ -171,7 +171,7 @@ echo ""
|
|||||||
echo "📋 连接信息:"
|
echo "📋 连接信息:"
|
||||||
echo " IoTDB: ${SERVER_IP}:${IOTDB_PORT} (root/${IOTDB_ROOT_PASSWORD})"
|
echo " IoTDB: ${SERVER_IP}:${IOTDB_PORT} (root/${IOTDB_ROOT_PASSWORD})"
|
||||||
echo " Redis: ${SERVER_IP}:6379"
|
echo " Redis: ${SERVER_IP}:6379"
|
||||||
echo " MySQL: ${SERVER_IP}:${MYSQL_PORT}"
|
echo " PostgreSQL: ${SERVER_IP}:${POSTGRES_PORT:-5432} (postgres/${POSTGRES_PASSWORD:-JiShe!aqG#5kGgh&0})"
|
||||||
echo " Admin API: http://${SERVER_IP}:${ADMIN_API_PORT}"
|
echo " Admin API: http://${SERVER_IP}:${ADMIN_API_PORT}"
|
||||||
echo " Admin UI: http://${SERVER_IP}:${ADMIN_WEB_PORT}"
|
echo " Admin UI: http://${SERVER_IP}:${ADMIN_WEB_PORT}"
|
||||||
echo ""
|
echo ""
|
||||||
@ -182,7 +182,7 @@ echo " 停止服务: docker compose down"
|
|||||||
echo ""
|
echo ""
|
||||||
echo "🧪 测试连接:"
|
echo "🧪 测试连接:"
|
||||||
echo " Redis: redis-cli -h ${SERVER_IP} -p 6379 ping"
|
echo " Redis: redis-cli -h ${SERVER_IP} -p 6379 ping"
|
||||||
echo " MySQL: mysql -h ${SERVER_IP} -P ${MYSQL_PORT} -uroot -p${MYSQL_ROOT_PASSWORD} -e 'SELECT 1'"
|
echo " PostgreSQL: PGPASSWORD=${POSTGRES_PASSWORD:-JiShe!aqG#5kGgh&0} psql -h ${SERVER_IP} -p ${POSTGRES_PORT:-5432} -U postgres -d ${POSTGRES_DB:-jisheiotprodb} -c 'SELECT 1'"
|
||||||
echo " IoTDB: docker exec -it iotdb-standalone ./start-cli.sh -h iotdb-standalone -u root -p Lixiao@1980"
|
echo " IoTDB: docker exec -it iotdb-standalone ./start-cli.sh -h iotdb-standalone -u root -p Lixiao@1980"
|
||||||
echo ""
|
echo ""
|
||||||
echo "🎯 等待服务启动完成..."
|
echo "🎯 等待服务启动完成..."
|
||||||
|
|||||||
@ -268,15 +268,15 @@ namespace JiShe.IoT.DeviceAggregation
|
|||||||
/// </summary>
|
/// </summary>
|
||||||
/// <param name="input"></param>
|
/// <param name="input"></param>
|
||||||
/// <param name="pushResult">推送结果原始信息</param>
|
/// <param name="pushResult">推送结果原始信息</param>
|
||||||
/// <param name="securityKey">设备接入鉴权key</param>
|
/// <param name="platformPassword">设备接入鉴权key</param>
|
||||||
/// <returns></returns>
|
/// <returns></returns>
|
||||||
/// <exception cref="UserFriendlyException"></exception>
|
/// <exception cref="UserFriendlyException"></exception>
|
||||||
private async Task<DeviceManagementInfoDto> DeviceUpdateHandler(DeviceManagementInfoDto input, HttpDataResult pushResult, string securityKey = null)
|
private async Task<DeviceManagementInfoDto> DeviceUpdateHandler(DeviceManagementInfoDto input, HttpDataResult pushResult, string platformPassword = null)
|
||||||
{
|
{
|
||||||
UpdateDeviceInput updateDeviceInput = input.Adapt<UpdateDeviceInput>();
|
UpdateDeviceInput updateDeviceInput = input.Adapt<UpdateDeviceInput>();
|
||||||
updateDeviceInput.IoTPlatformResponse = pushResult.Serialize();
|
updateDeviceInput.IoTPlatformResponse = pushResult.Serialize();
|
||||||
updateDeviceInput.IsPlatformPushSuccess = true;
|
updateDeviceInput.IsPlatformPushSuccess = true;
|
||||||
updateDeviceInput.SecurityKey = securityKey;
|
updateDeviceInput.PlatformPassword = platformPassword;
|
||||||
|
|
||||||
|
|
||||||
var updateResult = await deviceAppService.UpdateAsync(updateDeviceInput);
|
var updateResult = await deviceAppService.UpdateAsync(updateDeviceInput);
|
||||||
|
|||||||
@ -13,7 +13,7 @@ using Volo.Abp.EntityFrameworkCore;
|
|||||||
namespace JiShe.IoT.Migrations
|
namespace JiShe.IoT.Migrations
|
||||||
{
|
{
|
||||||
[DbContext(typeof(IoTDbContext))]
|
[DbContext(typeof(IoTDbContext))]
|
||||||
[Migration("20260115084844_InitialCreate")]
|
[Migration("20260116085116_InitialCreate")]
|
||||||
partial class InitialCreate
|
partial class InitialCreate
|
||||||
{
|
{
|
||||||
/// <inheritdoc />
|
/// <inheritdoc />
|
||||||
@ -435,8 +435,8 @@ namespace JiShe.IoT.Migrations
|
|||||||
|
|
||||||
b.Property<string>("Code")
|
b.Property<string>("Code")
|
||||||
.IsRequired()
|
.IsRequired()
|
||||||
.HasMaxLength(64)
|
.HasMaxLength(256)
|
||||||
.HasColumnType("character varying(64)");
|
.HasColumnType("character varying(256)");
|
||||||
|
|
||||||
b.Property<string>("ConcurrencyStamp")
|
b.Property<string>("ConcurrencyStamp")
|
||||||
.IsConcurrencyToken()
|
.IsConcurrencyToken()
|
||||||
@ -468,8 +468,8 @@ namespace JiShe.IoT.Migrations
|
|||||||
|
|
||||||
b.Property<string>("DisplayText")
|
b.Property<string>("DisplayText")
|
||||||
.IsRequired()
|
.IsRequired()
|
||||||
.HasMaxLength(64)
|
.HasMaxLength(256)
|
||||||
.HasColumnType("character varying(64)");
|
.HasColumnType("character varying(256)");
|
||||||
|
|
||||||
b.Property<string>("ExtraProperties")
|
b.Property<string>("ExtraProperties")
|
||||||
.IsRequired()
|
.IsRequired()
|
||||||
@ -509,8 +509,8 @@ namespace JiShe.IoT.Migrations
|
|||||||
|
|
||||||
b.Property<string>("Code")
|
b.Property<string>("Code")
|
||||||
.IsRequired()
|
.IsRequired()
|
||||||
.HasMaxLength(64)
|
.HasMaxLength(256)
|
||||||
.HasColumnType("character varying(64)");
|
.HasColumnType("character varying(256)");
|
||||||
|
|
||||||
b.Property<DateTime>("CreationTime")
|
b.Property<DateTime>("CreationTime")
|
||||||
.HasColumnType("timestamp with time zone")
|
.HasColumnType("timestamp with time zone")
|
||||||
@ -528,12 +528,12 @@ namespace JiShe.IoT.Migrations
|
|||||||
.HasColumnType("character varying(1024)");
|
.HasColumnType("character varying(1024)");
|
||||||
|
|
||||||
b.Property<string>("DisplayText")
|
b.Property<string>("DisplayText")
|
||||||
.HasMaxLength(64)
|
.HasMaxLength(256)
|
||||||
.HasColumnType("character varying(64)");
|
.HasColumnType("character varying(256)");
|
||||||
|
|
||||||
b.Property<string>("ExtendedAttribute")
|
b.Property<string>("ExtendedAttribute")
|
||||||
.HasMaxLength(64)
|
.HasMaxLength(256)
|
||||||
.HasColumnType("character varying(64)");
|
.HasColumnType("character varying(256)");
|
||||||
|
|
||||||
b.Property<bool>("IsEnabled")
|
b.Property<bool>("IsEnabled")
|
||||||
.HasColumnType("boolean");
|
.HasColumnType("boolean");
|
||||||
@ -731,11 +731,6 @@ namespace JiShe.IoT.Migrations
|
|||||||
.HasColumnType("character varying(40)")
|
.HasColumnType("character varying(40)")
|
||||||
.HasComment("设备地址");
|
.HasComment("设备地址");
|
||||||
|
|
||||||
b.Property<string>("DeviceBrandCode")
|
|
||||||
.HasMaxLength(50)
|
|
||||||
.HasColumnType("character varying(50)")
|
|
||||||
.HasComment("设备品牌编码");
|
|
||||||
|
|
||||||
b.Property<string>("DeviceName")
|
b.Property<string>("DeviceName")
|
||||||
.IsRequired()
|
.IsRequired()
|
||||||
.HasMaxLength(128)
|
.HasMaxLength(128)
|
||||||
@ -852,11 +847,6 @@ namespace JiShe.IoT.Migrations
|
|||||||
.HasColumnType("text")
|
.HasColumnType("text")
|
||||||
.HasComment("备注");
|
.HasComment("备注");
|
||||||
|
|
||||||
b.Property<string>("SecurityKey")
|
|
||||||
.HasMaxLength(256)
|
|
||||||
.HasColumnType("character varying(256)")
|
|
||||||
.HasComment("设备接入鉴权key");
|
|
||||||
|
|
||||||
b.Property<Guid?>("TenantId")
|
b.Property<Guid?>("TenantId")
|
||||||
.HasColumnType("uuid")
|
.HasColumnType("uuid")
|
||||||
.HasColumnName("TenantId")
|
.HasColumnName("TenantId")
|
||||||
@ -109,8 +109,8 @@ namespace JiShe.IoT.Migrations
|
|||||||
{
|
{
|
||||||
Id = table.Column<Guid>(type: "uuid", nullable: false),
|
Id = table.Column<Guid>(type: "uuid", nullable: false),
|
||||||
TenantId = table.Column<Guid>(type: "uuid", nullable: true),
|
TenantId = table.Column<Guid>(type: "uuid", nullable: true),
|
||||||
Code = table.Column<string>(type: "character varying(64)", maxLength: 64, nullable: false),
|
Code = table.Column<string>(type: "character varying(256)", maxLength: 256, nullable: false),
|
||||||
DisplayText = table.Column<string>(type: "character varying(64)", maxLength: 64, nullable: false),
|
DisplayText = table.Column<string>(type: "character varying(256)", maxLength: 256, nullable: false),
|
||||||
Description = table.Column<string>(type: "character varying(1024)", maxLength: 1024, nullable: false),
|
Description = table.Column<string>(type: "character varying(1024)", maxLength: 1024, nullable: false),
|
||||||
ExtraProperties = table.Column<string>(type: "text", nullable: false),
|
ExtraProperties = table.Column<string>(type: "text", nullable: false),
|
||||||
ConcurrencyStamp = table.Column<string>(type: "character varying(40)", maxLength: 40, nullable: false),
|
ConcurrencyStamp = table.Column<string>(type: "character varying(40)", maxLength: 40, nullable: false),
|
||||||
@ -739,8 +739,6 @@ namespace JiShe.IoT.Migrations
|
|||||||
DeviceThingModelDataId = table.Column<Guid>(type: "uuid", nullable: true, comment: "设备物模型数据Id"),
|
DeviceThingModelDataId = table.Column<Guid>(type: "uuid", nullable: true, comment: "设备物模型数据Id"),
|
||||||
FirmwareVersion = table.Column<string>(type: "character varying(50)", maxLength: 50, nullable: true, comment: "固件版本"),
|
FirmwareVersion = table.Column<string>(type: "character varying(50)", maxLength: 50, nullable: true, comment: "固件版本"),
|
||||||
UpgradeDate = table.Column<DateTime>(type: "timestamp with time zone", nullable: true, comment: "升级日期"),
|
UpgradeDate = table.Column<DateTime>(type: "timestamp with time zone", nullable: true, comment: "升级日期"),
|
||||||
SecurityKey = table.Column<string>(type: "character varying(256)", maxLength: 256, nullable: true, comment: "设备接入鉴权key"),
|
|
||||||
DeviceBrandCode = table.Column<string>(type: "character varying(50)", maxLength: 50, nullable: true, comment: "设备品牌编码"),
|
|
||||||
BusinessSystemDeviceDataId = table.Column<long>(type: "bigint", nullable: true, comment: "业务系统设备数据Id"),
|
BusinessSystemDeviceDataId = table.Column<long>(type: "bigint", nullable: true, comment: "业务系统设备数据Id"),
|
||||||
ConcurrencyStamp = table.Column<string>(type: "character varying(40)", maxLength: 40, nullable: false),
|
ConcurrencyStamp = table.Column<string>(type: "character varying(40)", maxLength: 40, nullable: false),
|
||||||
CreationTime = table.Column<DateTime>(type: "timestamp with time zone", nullable: false),
|
CreationTime = table.Column<DateTime>(type: "timestamp with time zone", nullable: false),
|
||||||
@ -1205,12 +1203,12 @@ namespace JiShe.IoT.Migrations
|
|||||||
{
|
{
|
||||||
Id = table.Column<Guid>(type: "uuid", nullable: false),
|
Id = table.Column<Guid>(type: "uuid", nullable: false),
|
||||||
DataDictionaryId = table.Column<Guid>(type: "uuid", nullable: false),
|
DataDictionaryId = table.Column<Guid>(type: "uuid", nullable: false),
|
||||||
Code = table.Column<string>(type: "character varying(64)", maxLength: 64, nullable: false),
|
Code = table.Column<string>(type: "character varying(256)", maxLength: 256, nullable: false),
|
||||||
Order = table.Column<int>(type: "integer", nullable: false),
|
Order = table.Column<int>(type: "integer", nullable: false),
|
||||||
DisplayText = table.Column<string>(type: "character varying(64)", maxLength: 64, nullable: true),
|
DisplayText = table.Column<string>(type: "character varying(256)", maxLength: 256, nullable: true),
|
||||||
Description = table.Column<string>(type: "character varying(1024)", maxLength: 1024, nullable: true),
|
Description = table.Column<string>(type: "character varying(1024)", maxLength: 1024, nullable: true),
|
||||||
IsEnabled = table.Column<bool>(type: "boolean", nullable: false),
|
IsEnabled = table.Column<bool>(type: "boolean", nullable: false),
|
||||||
ExtendedAttribute = table.Column<string>(type: "character varying(64)", maxLength: 64, nullable: true),
|
ExtendedAttribute = table.Column<string>(type: "character varying(256)", maxLength: 256, nullable: true),
|
||||||
CreationTime = table.Column<DateTime>(type: "timestamp with time zone", nullable: false),
|
CreationTime = table.Column<DateTime>(type: "timestamp with time zone", nullable: false),
|
||||||
CreatorId = table.Column<Guid>(type: "uuid", nullable: true),
|
CreatorId = table.Column<Guid>(type: "uuid", nullable: true),
|
||||||
LastModificationTime = table.Column<DateTime>(type: "timestamp with time zone", nullable: true),
|
LastModificationTime = table.Column<DateTime>(type: "timestamp with time zone", nullable: true),
|
||||||
@ -432,8 +432,8 @@ namespace JiShe.IoT.Migrations
|
|||||||
|
|
||||||
b.Property<string>("Code")
|
b.Property<string>("Code")
|
||||||
.IsRequired()
|
.IsRequired()
|
||||||
.HasMaxLength(64)
|
.HasMaxLength(256)
|
||||||
.HasColumnType("character varying(64)");
|
.HasColumnType("character varying(256)");
|
||||||
|
|
||||||
b.Property<string>("ConcurrencyStamp")
|
b.Property<string>("ConcurrencyStamp")
|
||||||
.IsConcurrencyToken()
|
.IsConcurrencyToken()
|
||||||
@ -465,8 +465,8 @@ namespace JiShe.IoT.Migrations
|
|||||||
|
|
||||||
b.Property<string>("DisplayText")
|
b.Property<string>("DisplayText")
|
||||||
.IsRequired()
|
.IsRequired()
|
||||||
.HasMaxLength(64)
|
.HasMaxLength(256)
|
||||||
.HasColumnType("character varying(64)");
|
.HasColumnType("character varying(256)");
|
||||||
|
|
||||||
b.Property<string>("ExtraProperties")
|
b.Property<string>("ExtraProperties")
|
||||||
.IsRequired()
|
.IsRequired()
|
||||||
@ -506,8 +506,8 @@ namespace JiShe.IoT.Migrations
|
|||||||
|
|
||||||
b.Property<string>("Code")
|
b.Property<string>("Code")
|
||||||
.IsRequired()
|
.IsRequired()
|
||||||
.HasMaxLength(64)
|
.HasMaxLength(256)
|
||||||
.HasColumnType("character varying(64)");
|
.HasColumnType("character varying(256)");
|
||||||
|
|
||||||
b.Property<DateTime>("CreationTime")
|
b.Property<DateTime>("CreationTime")
|
||||||
.HasColumnType("timestamp with time zone")
|
.HasColumnType("timestamp with time zone")
|
||||||
@ -525,12 +525,12 @@ namespace JiShe.IoT.Migrations
|
|||||||
.HasColumnType("character varying(1024)");
|
.HasColumnType("character varying(1024)");
|
||||||
|
|
||||||
b.Property<string>("DisplayText")
|
b.Property<string>("DisplayText")
|
||||||
.HasMaxLength(64)
|
.HasMaxLength(256)
|
||||||
.HasColumnType("character varying(64)");
|
.HasColumnType("character varying(256)");
|
||||||
|
|
||||||
b.Property<string>("ExtendedAttribute")
|
b.Property<string>("ExtendedAttribute")
|
||||||
.HasMaxLength(64)
|
.HasMaxLength(256)
|
||||||
.HasColumnType("character varying(64)");
|
.HasColumnType("character varying(256)");
|
||||||
|
|
||||||
b.Property<bool>("IsEnabled")
|
b.Property<bool>("IsEnabled")
|
||||||
.HasColumnType("boolean");
|
.HasColumnType("boolean");
|
||||||
@ -728,11 +728,6 @@ namespace JiShe.IoT.Migrations
|
|||||||
.HasColumnType("character varying(40)")
|
.HasColumnType("character varying(40)")
|
||||||
.HasComment("设备地址");
|
.HasComment("设备地址");
|
||||||
|
|
||||||
b.Property<string>("DeviceBrandCode")
|
|
||||||
.HasMaxLength(50)
|
|
||||||
.HasColumnType("character varying(50)")
|
|
||||||
.HasComment("设备品牌编码");
|
|
||||||
|
|
||||||
b.Property<string>("DeviceName")
|
b.Property<string>("DeviceName")
|
||||||
.IsRequired()
|
.IsRequired()
|
||||||
.HasMaxLength(128)
|
.HasMaxLength(128)
|
||||||
@ -849,11 +844,6 @@ namespace JiShe.IoT.Migrations
|
|||||||
.HasColumnType("text")
|
.HasColumnType("text")
|
||||||
.HasComment("备注");
|
.HasComment("备注");
|
||||||
|
|
||||||
b.Property<string>("SecurityKey")
|
|
||||||
.HasMaxLength(256)
|
|
||||||
.HasColumnType("character varying(256)")
|
|
||||||
.HasComment("设备接入鉴权key");
|
|
||||||
|
|
||||||
b.Property<Guid?>("TenantId")
|
b.Property<Guid?>("TenantId")
|
||||||
.HasColumnType("uuid")
|
.HasColumnType("uuid")
|
||||||
.HasColumnName("TenantId")
|
.HasColumnName("TenantId")
|
||||||
|
|||||||
Loading…
x
Reference in New Issue
Block a user