mirror of
https://gitee.com/pnoker/iot-dc3.git
synced 2026-11-03 19:52:27 +08:00
Security (CRITICAL): - KeyUtil: read JWT signing key from DC3_SECURITY_KEY env/property - UserPasswordServiceImpl: read default password from DC3_SECURITY_DEFAULT_PASSWORD env - KeyLoader: read OPC-UA keystore password from OPCUA_KEYSTORE_PASSWORD env - WebFilterConfig: return 401 on malformed X-Auth-User header - AlgorithmConstant: document deprecated hardcoded constants Thread safety (HIGH): - Fix TOCTOU races in 4 driver connectors (computeIfAbsent) - Fix PlcS7 lock leak, OpcUa connect timeout (5s) - CoapClientManager: synchronize setURI to prevent URI race - PointValueJob, MqttScheduleJob: add @DisallowConcurrentExecution - SystemHealthServiceImpl: preserve interrupt flag - WindowSampleBuffer: local AtomicInteger → int Performance (MEDIUM): - EntityStateExpiryScanner: batch alarm saves (saveBatch) - ImportDeviceServiceImpl: batch config saves - ResourceRegistrySyncServiceImpl: batch-load nodes, eliminate N+1 COUNTs - DriverSenderServiceImpl: debug-gate hot-path logging - PointServiceImpl: stream().count() → size() Null safety (LOW): - RegexUtil: null guards on isName/isPhone/isMail/isPassword/isHost - HostUtil: null-check getNetworkInterfaces() return - TimeUtil: log parse failures instead of silent null Infrastructure: - Add spring-boot-starter-cache + @EnableCaching CacheConfig - Replace embedded modbus4j/plc-s7 jars with external Maven dependencies - Add dc3-driver-modbus-rtu module
408 lines
12 KiB
YAML
408 lines
12 KiB
YAML
#
|
|
# Copyright 2016-present the IoT DC3 original author or authors.
|
|
#
|
|
# This program is free software: you can redistribute it and/or modify
|
|
# it under the terms of the GNU Affero General Public License as
|
|
# published by the Free Software Foundation, either version 3 of the
|
|
# License, or (at your option) any later version.
|
|
#
|
|
# This program is distributed in the hope that it will be useful,
|
|
# but WITHOUT ANY WARRANTY; without even the implied warranty of
|
|
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
|
# GNU Affero General Public License for more details.
|
|
#
|
|
# You should have received a copy of the GNU Affero General Public License
|
|
# along with this program. If not, see <https://www.gnu.org/licenses/>.
|
|
#
|
|
|
|
x-logging: &default-logging
|
|
driver: json-file
|
|
options:
|
|
max-size: ${DC3_LOG_MAX_SIZE:-10M}
|
|
max-file: "${DC3_LOG_MAX_FILE:-20}"
|
|
|
|
services:
|
|
gateway:
|
|
build:
|
|
context: ..
|
|
dockerfile: Dockerfile
|
|
target: dc3-gateway
|
|
image: ${DC3_IMAGE_REGISTRY:-pnoker}/dc3-gateway:${DC3_IMAGE_TAG:-2026.5}
|
|
restart: always
|
|
depends_on:
|
|
auth:
|
|
condition: service_healthy
|
|
manager:
|
|
condition: service_healthy
|
|
data:
|
|
condition: service_healthy
|
|
agentic:
|
|
condition: service_healthy
|
|
ports:
|
|
- "${DC3_BIND_HOST:-127.0.0.1}:${DC3_GATEWAY_PORT:-8000}:8000"
|
|
environment:
|
|
- NODE_ENV=test
|
|
- APM_AGENT_ENABLE=${APM_AGENT_ENABLE:-false}
|
|
- AUTH_HMAC_SECRET=${AUTH_HMAC_SECRET:-io.github.pnoker.dc3}
|
|
container_name: dc3-gateway
|
|
hostname: dc3-gateway
|
|
volumes:
|
|
- logs:/dc3-gateway/dc3/logs
|
|
healthcheck:
|
|
test: [ "CMD-SHELL", "curl -fsS http://127.0.0.1:8000/actuator/health/readiness >/dev/null || exit 1" ]
|
|
interval: 15s
|
|
timeout: 5s
|
|
retries: 10
|
|
start_period: 30s
|
|
logging: *default-logging
|
|
networks:
|
|
dc3net:
|
|
aliases:
|
|
- dc3-gateway
|
|
|
|
auth:
|
|
build:
|
|
context: ..
|
|
dockerfile: Dockerfile
|
|
target: dc3-center-auth
|
|
image: ${DC3_IMAGE_REGISTRY:-pnoker}/dc3-center-auth:${DC3_IMAGE_TAG:-2026.5}
|
|
restart: always
|
|
ports:
|
|
- "${DC3_BIND_HOST:-127.0.0.1}:${DC3_AUTH_PORT:-8300}:8300"
|
|
- "${DC3_BIND_HOST:-127.0.0.1}:${DC3_AUTH_GRPC_PORT:-9300}:9300"
|
|
environment:
|
|
- NODE_ENV=test
|
|
- APM_AGENT_ENABLE=${APM_AGENT_ENABLE:-false}
|
|
- AUTH_HMAC_SECRET=${AUTH_HMAC_SECRET:-io.github.pnoker.dc3}
|
|
container_name: dc3-center-auth
|
|
hostname: dc3-center-auth
|
|
volumes:
|
|
- logs:/dc3-center/dc3-center-auth/dc3/logs
|
|
healthcheck:
|
|
test: [ "CMD-SHELL", "curl -fsS http://127.0.0.1:8300/auth/actuator/health/readiness >/dev/null || exit 1" ]
|
|
interval: 15s
|
|
timeout: 5s
|
|
retries: 10
|
|
start_period: 40s
|
|
logging: *default-logging
|
|
networks:
|
|
dc3net:
|
|
aliases:
|
|
- dc3-center-auth
|
|
|
|
manager:
|
|
build:
|
|
context: ..
|
|
dockerfile: Dockerfile
|
|
target: dc3-center-manager
|
|
image: ${DC3_IMAGE_REGISTRY:-pnoker}/dc3-center-manager:${DC3_IMAGE_TAG:-2026.5}
|
|
restart: always
|
|
depends_on:
|
|
auth:
|
|
condition: service_healthy
|
|
ports:
|
|
- "${DC3_BIND_HOST:-127.0.0.1}:${DC3_MANAGER_PORT:-8400}:8400"
|
|
- "${DC3_BIND_HOST:-127.0.0.1}:${DC3_MANAGER_GRPC_PORT:-9400}:9400"
|
|
environment:
|
|
- NODE_ENV=test
|
|
- APM_AGENT_ENABLE=${APM_AGENT_ENABLE:-false}
|
|
- AUTH_HMAC_SECRET=${AUTH_HMAC_SECRET:-io.github.pnoker.dc3}
|
|
container_name: dc3-center-manager
|
|
hostname: dc3-center-manager
|
|
volumes:
|
|
- logs:/dc3-center/dc3-center-manager/dc3/logs
|
|
healthcheck:
|
|
test: [ "CMD-SHELL", "curl -fsS http://127.0.0.1:8400/manager/actuator/health/readiness >/dev/null || exit 1" ]
|
|
interval: 15s
|
|
timeout: 5s
|
|
retries: 10
|
|
start_period: 40s
|
|
logging: *default-logging
|
|
networks:
|
|
dc3net:
|
|
aliases:
|
|
- dc3-center-manager
|
|
|
|
data:
|
|
build:
|
|
context: ..
|
|
dockerfile: Dockerfile
|
|
target: dc3-center-data
|
|
image: ${DC3_IMAGE_REGISTRY:-pnoker}/dc3-center-data:${DC3_IMAGE_TAG:-2026.5}
|
|
restart: always
|
|
depends_on:
|
|
auth:
|
|
condition: service_healthy
|
|
manager:
|
|
condition: service_healthy
|
|
ports:
|
|
- "${DC3_BIND_HOST:-127.0.0.1}:${DC3_DATA_PORT:-8500}:8500"
|
|
- "${DC3_BIND_HOST:-127.0.0.1}:${DC3_DATA_GRPC_PORT:-9500}:9500"
|
|
environment:
|
|
- NODE_ENV=test
|
|
- APM_AGENT_ENABLE=${APM_AGENT_ENABLE:-false}
|
|
- AUTH_HMAC_SECRET=${AUTH_HMAC_SECRET:-io.github.pnoker.dc3}
|
|
container_name: dc3-center-data
|
|
hostname: dc3-center-data
|
|
volumes:
|
|
- logs:/dc3-center/dc3-center-data/dc3/logs
|
|
healthcheck:
|
|
test: [ "CMD-SHELL", "curl -fsS http://127.0.0.1:8500/data/actuator/health/readiness >/dev/null || exit 1" ]
|
|
interval: 15s
|
|
timeout: 5s
|
|
retries: 10
|
|
start_period: 40s
|
|
logging: *default-logging
|
|
networks:
|
|
dc3net:
|
|
aliases:
|
|
- dc3-center-data
|
|
|
|
agentic:
|
|
build:
|
|
context: ..
|
|
dockerfile: Dockerfile
|
|
target: dc3-center-agentic
|
|
image: ${DC3_IMAGE_REGISTRY:-pnoker}/dc3-center-agentic:${DC3_IMAGE_TAG:-2026.5}
|
|
restart: always
|
|
depends_on:
|
|
auth:
|
|
condition: service_healthy
|
|
manager:
|
|
condition: service_healthy
|
|
data:
|
|
condition: service_healthy
|
|
ports:
|
|
- "${DC3_BIND_HOST:-127.0.0.1}:${DC3_AGENTIC_PORT:-8600}:8600"
|
|
environment:
|
|
- NODE_ENV=test
|
|
- APM_AGENT_ENABLE=${APM_AGENT_ENABLE:-false}
|
|
- AUTH_HMAC_SECRET=${AUTH_HMAC_SECRET:-io.github.pnoker.dc3}
|
|
- AGENTIC_FALLBACK_OPENAI_BASE_URL=${AGENTIC_FALLBACK_OPENAI_BASE_URL:-https://api.openai.com}
|
|
- AGENTIC_FALLBACK_OPENAI_API_KEY=${AGENTIC_FALLBACK_OPENAI_API_KEY:-}
|
|
- AGENTIC_FALLBACK_OPENAI_MODEL=${AGENTIC_FALLBACK_OPENAI_MODEL:-gpt-4o}
|
|
- AGENTIC_FALLBACK_OPENAI_TEMPERATURE=${AGENTIC_FALLBACK_OPENAI_TEMPERATURE:-0.7}
|
|
- AGENTIC_FALLBACK_OPENAI_MAX_TOKENS=${AGENTIC_FALLBACK_OPENAI_MAX_TOKENS:-2048}
|
|
- AGENTIC_MEMORY_SCHEMA_INIT=${AGENTIC_MEMORY_SCHEMA_INIT:-never}
|
|
- AGENTIC_MEMORY_ENABLED=${AGENTIC_MEMORY_ENABLED:-false}
|
|
- AGENTIC_TOOL_CALLING_ENABLED=${AGENTIC_TOOL_CALLING_ENABLED:-true}
|
|
- AGENTIC_MEMORY_MAX_MESSAGES=${AGENTIC_MEMORY_MAX_MESSAGES:-50}
|
|
- AGENTIC_ATTACHMENT_STORAGE_PATH=${AGENTIC_ATTACHMENT_STORAGE_PATH:-dc3/data/agentic/attachments}
|
|
container_name: dc3-center-agentic
|
|
hostname: dc3-center-agentic
|
|
volumes:
|
|
- logs:/dc3-center/dc3-center-agentic/dc3/logs
|
|
healthcheck:
|
|
test: [ "CMD-SHELL", "curl -fsS http://127.0.0.1:8600/agentic/actuator/health/readiness >/dev/null || exit 1" ]
|
|
interval: 15s
|
|
timeout: 5s
|
|
retries: 10
|
|
start_period: 40s
|
|
logging: *default-logging
|
|
networks:
|
|
dc3net:
|
|
aliases:
|
|
- dc3-center-agentic
|
|
|
|
listening-virtual:
|
|
build:
|
|
context: ..
|
|
dockerfile: Dockerfile
|
|
target: dc3-driver-listening-virtual
|
|
image: ${DC3_IMAGE_REGISTRY:-pnoker}/dc3-driver-listening-virtual:${DC3_IMAGE_TAG:-2026.5}
|
|
restart: always
|
|
depends_on:
|
|
manager:
|
|
condition: service_healthy
|
|
ports:
|
|
- "${DC3_BIND_HOST:-127.0.0.1}:${DC3_LISTENING_VIRTUAL_TCP_PORT:-6270}:6270"
|
|
- "${DC3_BIND_HOST:-127.0.0.1}:${DC3_LISTENING_VIRTUAL_UDP_PORT:-6271}:6271"
|
|
environment:
|
|
- NODE_ENV=test
|
|
- APM_AGENT_ENABLE=${APM_AGENT_ENABLE:-false}
|
|
- AUTH_HMAC_SECRET=${AUTH_HMAC_SECRET:-io.github.pnoker.dc3}
|
|
container_name: dc3-driver-listening-virtual
|
|
hostname: dc3-driver-listening-virtual
|
|
volumes:
|
|
- logs:/dc3-driver/dc3-driver-listening-virtual/dc3/logs
|
|
logging: *default-logging
|
|
networks:
|
|
dc3net:
|
|
aliases:
|
|
- dc3-driver-listening-virtual
|
|
|
|
modbus-tcp:
|
|
build:
|
|
context: ..
|
|
dockerfile: Dockerfile
|
|
target: dc3-driver-modbus-tcp
|
|
image: ${DC3_IMAGE_REGISTRY:-pnoker}/dc3-driver-modbus-tcp:${DC3_IMAGE_TAG:-2026.5}
|
|
restart: always
|
|
depends_on:
|
|
manager:
|
|
condition: service_healthy
|
|
environment:
|
|
- NODE_ENV=test
|
|
- APM_AGENT_ENABLE=${APM_AGENT_ENABLE:-false}
|
|
- AUTH_HMAC_SECRET=${AUTH_HMAC_SECRET:-io.github.pnoker.dc3}
|
|
container_name: dc3-driver-modbus-tcp
|
|
hostname: dc3-driver-modbus-tcp
|
|
volumes:
|
|
- logs:/dc3-driver/dc3-driver-modbus-tcp/dc3/logs
|
|
logging: *default-logging
|
|
networks:
|
|
dc3net:
|
|
aliases:
|
|
- dc3-driver-modbus-tcp
|
|
|
|
modbus-rtu:
|
|
build:
|
|
context: ..
|
|
dockerfile: Dockerfile
|
|
target: dc3-driver-modbus-rtu
|
|
image: ${DC3_IMAGE_REGISTRY:-pnoker}/dc3-driver-modbus-rtu:${DC3_IMAGE_TAG:-2026.5}
|
|
restart: always
|
|
depends_on:
|
|
manager:
|
|
condition: service_healthy
|
|
environment:
|
|
- NODE_ENV=test
|
|
- APM_AGENT_ENABLE=${APM_AGENT_ENABLE:-false}
|
|
- AUTH_HMAC_SECRET=${AUTH_HMAC_SECRET:-io.github.pnoker.dc3}
|
|
container_name: dc3-driver-modbus-rtu
|
|
hostname: dc3-driver-modbus-rtu
|
|
volumes:
|
|
- logs:/dc3-driver/dc3-driver-modbus-rtu/dc3/logs
|
|
logging: *default-logging
|
|
networks:
|
|
dc3net:
|
|
aliases:
|
|
- dc3-driver-modbus-rtu
|
|
|
|
mqtt:
|
|
build:
|
|
context: ..
|
|
dockerfile: Dockerfile
|
|
target: dc3-driver-mqtt
|
|
image: ${DC3_IMAGE_REGISTRY:-pnoker}/dc3-driver-mqtt:${DC3_IMAGE_TAG:-2026.5}
|
|
restart: always
|
|
depends_on:
|
|
manager:
|
|
condition: service_healthy
|
|
environment:
|
|
- NODE_ENV=test
|
|
- APM_AGENT_ENABLE=${APM_AGENT_ENABLE:-false}
|
|
- AUTH_HMAC_SECRET=${AUTH_HMAC_SECRET:-io.github.pnoker.dc3}
|
|
container_name: dc3-driver-mqtt
|
|
hostname: dc3-driver-mqtt
|
|
volumes:
|
|
- logs:/dc3-driver/dc3-driver-mqtt/dc3/logs
|
|
logging: *default-logging
|
|
networks:
|
|
dc3net:
|
|
aliases:
|
|
- dc3-driver-mqtt
|
|
|
|
opc-da:
|
|
build:
|
|
context: ..
|
|
dockerfile: Dockerfile
|
|
target: dc3-driver-opc-da
|
|
image: ${DC3_IMAGE_REGISTRY:-pnoker}/dc3-driver-opc-da:${DC3_IMAGE_TAG:-2026.5}
|
|
restart: always
|
|
depends_on:
|
|
manager:
|
|
condition: service_healthy
|
|
environment:
|
|
- NODE_ENV=test
|
|
- APM_AGENT_ENABLE=${APM_AGENT_ENABLE:-false}
|
|
- AUTH_HMAC_SECRET=${AUTH_HMAC_SECRET:-io.github.pnoker.dc3}
|
|
container_name: dc3-driver-opc-da
|
|
hostname: dc3-driver-opc-da
|
|
volumes:
|
|
- logs:/dc3-driver/dc3-driver-opc-da/dc3/logs
|
|
logging: *default-logging
|
|
networks:
|
|
dc3net:
|
|
aliases:
|
|
- dc3-driver-opc-da
|
|
|
|
opc-ua:
|
|
build:
|
|
context: ..
|
|
dockerfile: Dockerfile
|
|
target: dc3-driver-opc-ua
|
|
image: ${DC3_IMAGE_REGISTRY:-pnoker}/dc3-driver-opc-ua:${DC3_IMAGE_TAG:-2026.5}
|
|
restart: always
|
|
depends_on:
|
|
manager:
|
|
condition: service_healthy
|
|
environment:
|
|
- NODE_ENV=test
|
|
- APM_AGENT_ENABLE=${APM_AGENT_ENABLE:-false}
|
|
- AUTH_HMAC_SECRET=${AUTH_HMAC_SECRET:-io.github.pnoker.dc3}
|
|
container_name: dc3-driver-opc-ua
|
|
hostname: dc3-driver-opc-ua
|
|
volumes:
|
|
- logs:/dc3-driver/dc3-driver-opc-ua/dc3/logs
|
|
logging: *default-logging
|
|
networks:
|
|
dc3net:
|
|
aliases:
|
|
- dc3-driver-opc-ua
|
|
|
|
plcs7:
|
|
build:
|
|
context: ..
|
|
dockerfile: Dockerfile
|
|
target: dc3-driver-plcs7
|
|
image: ${DC3_IMAGE_REGISTRY:-pnoker}/dc3-driver-plcs7:${DC3_IMAGE_TAG:-2026.5}
|
|
restart: always
|
|
depends_on:
|
|
manager:
|
|
condition: service_healthy
|
|
environment:
|
|
- NODE_ENV=test
|
|
- APM_AGENT_ENABLE=${APM_AGENT_ENABLE:-false}
|
|
- AUTH_HMAC_SECRET=${AUTH_HMAC_SECRET:-io.github.pnoker.dc3}
|
|
container_name: dc3-driver-plcs7
|
|
hostname: dc3-driver-plcs7
|
|
volumes:
|
|
- logs:/dc3-driver/dc3-driver-plcs7/dc3/logs
|
|
logging: *default-logging
|
|
networks:
|
|
dc3net:
|
|
aliases:
|
|
- dc3-driver-plcs7
|
|
|
|
virtual:
|
|
build:
|
|
context: ..
|
|
dockerfile: Dockerfile
|
|
target: dc3-driver-virtual
|
|
image: ${DC3_IMAGE_REGISTRY:-pnoker}/dc3-driver-virtual:${DC3_IMAGE_TAG:-2026.5}
|
|
restart: always
|
|
depends_on:
|
|
manager:
|
|
condition: service_healthy
|
|
environment:
|
|
- NODE_ENV=test
|
|
- APM_AGENT_ENABLE=${APM_AGENT_ENABLE:-false}
|
|
- AUTH_HMAC_SECRET=${AUTH_HMAC_SECRET:-io.github.pnoker.dc3}
|
|
container_name: dc3-driver-virtual
|
|
hostname: dc3-driver-virtual
|
|
volumes:
|
|
- logs:/dc3-driver/dc3-driver-virtual/dc3/logs
|
|
logging: *default-logging
|
|
networks:
|
|
dc3net:
|
|
aliases:
|
|
- dc3-driver-virtual
|
|
|
|
volumes:
|
|
logs:
|
|
|
|
networks:
|
|
dc3net:
|
|
driver: bridge
|