Files
iot-dc3/dc3/docker-compose-single.yml
pnoker 929761d132 chore(db): resync schema fingerprint pins after the agentic permission seed
The agentic permission seed changed the initdb bytes, so the canonical
hash moved from 0d9ad80328ef1a6ba91e53cf0c6db25812b8bd236e280939f967beee687d5108
to 78692f01fac7814f6a225ff87532502536a23972bf05dd0ab8768e629be19dc8;
resync the embedded ddl_hash and the compose/env pins with
schema_fingerprint.py --sync. Databases initialized before the seed
converge via migrations/05-agentic-permission-resources.sql plus a
public.dc3_schema_fingerprint ddl_hash update at cutover.
2026-10-24 02:04:27 +08:00

1034 lines
30 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/>.
#
# Single-center topology: the aggregated dc3-center-single (native) replaces the four
# distributed centers. The gateway runs with DC3_GATEWAY_TOPOLOGY=single, which activates
# the route post-processor in SingleGatewayRouteConfig - every api/v3 route proxies to the
# single service with StripPrefix=3 + PrefixPath=/single, so the web frontend keeps its
# unchanged protocol. Drivers stay on the JVM and depend on the single service's health.
#
# Dependency services (postgres, rabbitmq) come from docker-compose-db.yml, the same as
# docker-compose-dev.yml.
#
x-logging: &default-logging
driver: json-file
options:
max-size: ${DC3_LOG_MAX_SIZE:-10M}
max-file: "${DC3_LOG_MAX_FILE:-20}"
x-app-runtime-env: &app-runtime-env
NODE_ENV: test
# Align the MQ group tag with the center (dev + user.name): the driver
# and center must publish/consume on the same exchange or point values
# pile up unread on a group-less queue.
SPRING_ENV: dev
SPRING_GROUP: root
APM_AGENT_ENABLE: ${APM_AGENT_ENABLE:-false}
DC3_SECURITY_KEY: ${DC3_SECURITY_KEY:-dc3.security.key.2026.io.github.pnoker} # dev-only default; never reuse in pre/pro
# Internal async-plane broker selection; rabbitmq is the default
DC3_MQ_TYPE: "${DC3_MQ_TYPE:-rabbitmq}"
# Relational dialect selection; postgres is the default
# Non-rabbitmq adapter connection settings (only used when DC3_MQ_TYPE matches)
DC3_MQ_KAFKA_BOOTSTRAP: "${DC3_MQ_KAFKA_BOOTSTRAP:-kafka:9092}"
DC3_MQ_PULSAR_URL: "${DC3_MQ_PULSAR_URL:-pulsar://pulsar:6650}"
DC3_MQ_MQTT_HOST: "${DC3_MQ_MQTT_HOST:-dc3-rabbitmq}"
DC3_MQ_MQTT_PORT: "${DC3_MQ_MQTT_PORT:-1883}"
AUTH_HMAC_SECRET: ${AUTH_HMAC_SECRET:-io.github.pnoker.dc3} # dev-only default; never reuse in pre/pro
POSTGRES_HOST: dc3-postgres
POSTGRES_PORT: "5432"
POSTGRES_USERNAME: ${POSTGRES_USERNAME:-dc3}
POSTGRES_PASSWORD: ${POSTGRES_PASSWORD:-dc3dc3dc3}
POSTGRES_DB: ${POSTGRES_DB:-dc3}
DC3_R2DBC_URL: "${DC3_R2DBC_URL:-r2dbc:postgresql://dc3-postgres:5432/dc3}"
DC3_SCHEMA_FINGERPRINT: "${DC3_SCHEMA_FINGERPRINT:-78692f01fac7814f6a225ff87532502536a23972bf05dd0ab8768e629be19dc8}"
DC3_SCHEMA_CONTRACT: "${DC3_SCHEMA_CONTRACT:-r2dbc-flag-day-v1}"
RABBITMQ_VIRTUAL_HOST: ${RABBITMQ_VIRTUAL_HOST:-dc3}
# Drivers register with the manager center over gRPC; in the single
# topology the manager lives inside dc3-center-single:9100.
CENTER_MANAGER_HOST: dc3-center-single
CENTER_MANAGER_GRPC_PORT: "9100"
RABBITMQ_HOST: dc3-rabbitmq
RABBITMQ_PORT: "${RABBITMQ_CONTAINER_PORT:-5672}"
RABBITMQ_USERNAME: ${RABBITMQ_USERNAME:-dc3}
RABBITMQ_PASSWORD: ${RABBITMQ_PASSWORD:-dc3dc3dc3}
RABBITMQ_SSL_ENABLED: "${RABBITMQ_SSL_ENABLED:-false}"
RABBITMQ_SSL_ALGORITHM: "${RABBITMQ_SSL_ALGORITHM:-TLS}"
RABBITMQ_SSL_VALIDATE_SERVER_CERTIFICATE: "${RABBITMQ_SSL_VALIDATE_SERVER_CERTIFICATE:-false}"
RABBITMQ_SSL_VERIFY_HOSTNAME: "${RABBITMQ_SSL_VERIFY_HOSTNAME:-false}"
MQTT_BROKER_HOST: dc3-rabbitmq
MQTT_BROKER_PORT: "1883"
MQTT_USERNAME: ${MQTT_USERNAME:-dc3}
MQTT_PASSWORD: ${MQTT_PASSWORD:-dc3dc3dc3}
POINT_BATCH_SIZE: "${POINT_BATCH_SIZE:-500}"
POINT_BATCH_RECEIVE_TIMEOUT_MILLIS: "${POINT_BATCH_RECEIVE_TIMEOUT_MILLIS:-100}"
POINT_CONCURRENT_CONSUMERS: "${POINT_CONCURRENT_CONSUMERS:-4}"
POINT_MAX_CONCURRENT_CONSUMERS: "${POINT_MAX_CONCURRENT_CONSUMERS:-16}"
POINT_PREFETCH_COUNT: "${POINT_PREFETCH_COUNT:-1000}"
POINT_RETRY_MAX_RETRIES: "${POINT_RETRY_MAX_RETRIES:-3}"
POINT_RETRY_INITIAL_INTERVAL_MILLIS: "${POINT_RETRY_INITIAL_INTERVAL_MILLIS:-1000}"
POINT_RETRY_MULTIPLIER: "${POINT_RETRY_MULTIPLIER:-2}"
POINT_RETRY_MAX_INTERVAL_MILLIS: "${POINT_RETRY_MAX_INTERVAL_MILLIS:-10000}"
DC3_DRIVER_LEASE_SECONDS: "${DC3_DRIVER_LEASE_SECONDS:-30}"
DC3_DRIVER_LEASE_RENEW_CRON: "${DC3_DRIVER_LEASE_RENEW_CRON:-0/10 * * * * ?}"
DC3_DRIVER_LEASE_QUEUE_EXPIRES_MILLIS: "${DC3_DRIVER_LEASE_QUEUE_EXPIRES_MILLIS:-300000}"
services:
web:
# Frontend follows the same DC3_IMAGE_REGISTRY switch as backend services
# (so `make app REGISTRY=cn` retags everything together), and shares
# the unified DC3_VERSION for the whole monorepo. nginx proxies /api to
# the gateway, so the built app works against both topologies unchanged.
image: ${DC3_IMAGE_REGISTRY:-pnoker}/dc3-web:${DC3_VERSION:-latest}
build:
context: ..
dockerfile: dc3-web/Dockerfile
restart: always
depends_on:
gateway:
condition: service_healthy
ports:
- "${DC3_BIND_HOST:-127.0.0.1}:${DC3_WEB_HTTP_PORT:-8080}:80"
environment:
- APP_API_HOST=${APP_API_HOST:-dc3-gateway}
- APP_API_PORT=${APP_API_PORT:-8000}
container_name: dc3-web
hostname: dc3-web
volumes:
- nginx:/var/log/nginx
healthcheck:
test: [ "CMD-SHELL", "curl -fsS http://127.0.0.1/ >/dev/null || exit 1" ]
interval: 15s
timeout: 5s
retries: 10
start_period: 10s
logging: *default-logging
networks:
dc3net:
aliases:
- dc3-web
gateway:
build:
context: ..
dockerfile: Dockerfile
target: dc3-gateway-native
image: ${DC3_IMAGE_REGISTRY:-pnoker}/dc3-gateway:${DC3_IMAGE_TAG:-2026.9}-native
restart: always
depends_on:
single:
condition: service_healthy
ports:
- "${DC3_BIND_HOST:-127.0.0.1}:${DC3_GATEWAY_PORT:-8000}:8000"
environment:
<<: *app-runtime-env
# RS256 ticket verification on API routes (token-unification-mcp-first-cli.md)
DC3_GATEWAY_OAUTH_ENABLED: ${DC3_GATEWAY_OAUTH_ENABLED:-false}
# Single topology: the gateway's route post-processor rewrites every
# api/v3 route to the aggregated single service; the Authentic filter's
# permission gRPC channel re-points at single:9100.
DC3_GATEWAY_TOPOLOGY: single
CENTER_AUTH_HOST: dc3-center-single
CENTER_AUTH_GRPC_PORT: "9100"
DC3_GATEWAY_OAUTH_JWKS_URL: ${DC3_GATEWAY_OAUTH_JWKS_URL:-http://dc3-center-single:8100/single/oauth2/jwks}
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
single:
build:
context: ..
dockerfile: Dockerfile
target: dc3-center-single-native
image: ${DC3_IMAGE_REGISTRY:-pnoker}/dc3-center-single:${DC3_IMAGE_TAG:-2026.9}-native
restart: always
ports:
- "${DC3_BIND_HOST:-127.0.0.1}:${DC3_SINGLE_PORT:-8100}:8100"
- "${DC3_BIND_HOST:-127.0.0.1}:${DC3_SINGLE_GRPC_PORT:-9100}:9100"
environment:
<<: *app-runtime-env
# The single center embeds the agentic center; its attachments live under
# the service workdir and persist on the agentic_data volume below.
AGENTIC_ATTACHMENT_STORAGE_PATH: ${AGENTIC_ATTACHMENT_STORAGE_PATH:-dc3/data/agentic/attachments}
container_name: dc3-center-single
hostname: dc3-center-single
volumes:
- logs:/dc3-center/dc3-center-single/dc3/logs
- agentic_data:/dc3-center/dc3-center-single/dc3/data
healthcheck:
test: [ "CMD-SHELL", "curl -fsS http://127.0.0.1:8100/single/actuator/health/readiness >/dev/null || exit 1" ]
interval: 15s
timeout: 5s
retries: 10
start_period: 40s
logging: *default-logging
networks:
dc3net:
aliases:
- dc3-center-single
listening-virtual:
build:
context: ..
dockerfile: Dockerfile
target: dc3-driver-listening-virtual
image: ${DC3_IMAGE_REGISTRY:-pnoker}/dc3-driver-listening-virtual:${DC3_IMAGE_TAG:-2026.9}
restart: always
depends_on:
single:
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:
<<: *app-runtime-env
container_name: dc3-driver-listening-virtual
hostname: dc3-driver-listening-virtual
volumes:
- logs:/dc3-driver/dc3-driver-listening-virtual/dc3/logs
- driver_data:/dc3-driver/dc3-driver-listening-virtual/dc3/data
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.9}
restart: always
depends_on:
single:
condition: service_healthy
environment:
<<: *app-runtime-env
container_name: dc3-driver-modbus-tcp
hostname: dc3-driver-modbus-tcp
volumes:
- logs:/dc3-driver/dc3-driver-modbus-tcp/dc3/logs
- driver_data:/dc3-driver/dc3-driver-modbus-tcp/dc3/data
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.9}
restart: always
depends_on:
single:
condition: service_healthy
environment:
<<: *app-runtime-env
container_name: dc3-driver-modbus-rtu
hostname: dc3-driver-modbus-rtu
volumes:
- logs:/dc3-driver/dc3-driver-modbus-rtu/dc3/logs
- driver_data:/dc3-driver/dc3-driver-modbus-rtu/dc3/data
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.9}
restart: always
depends_on:
single:
condition: service_healthy
environment:
<<: *app-runtime-env
container_name: dc3-driver-mqtt
hostname: dc3-driver-mqtt
volumes:
- logs:/dc3-driver/dc3-driver-mqtt/dc3/logs
- driver_data:/dc3-driver/dc3-driver-mqtt/dc3/data
logging: *default-logging
networks:
dc3net:
aliases:
- dc3-driver-mqtt
bacnet-ip:
build:
context: ..
dockerfile: Dockerfile
target: dc3-driver-bacnet-ip
image: ${DC3_IMAGE_REGISTRY:-pnoker}/dc3-driver-bacnet-ip:${DC3_IMAGE_TAG:-2026.9}
restart: always
depends_on:
single:
condition: service_healthy
environment:
<<: *app-runtime-env
container_name: dc3-driver-bacnet-ip
hostname: dc3-driver-bacnet-ip
volumes:
- logs:/dc3-driver/dc3-driver-bacnet-ip/dc3/logs
- driver_data:/dc3-driver/dc3-driver-bacnet-ip/dc3/data
logging: *default-logging
networks:
dc3net:
aliases:
- dc3-driver-bacnet-ip
ble:
build:
context: ..
dockerfile: Dockerfile
target: dc3-driver-ble
image: ${DC3_IMAGE_REGISTRY:-pnoker}/dc3-driver-ble:${DC3_IMAGE_TAG:-2026.9}
restart: always
depends_on:
single:
condition: service_healthy
environment:
<<: *app-runtime-env
container_name: dc3-driver-ble
hostname: dc3-driver-ble
volumes:
- logs:/dc3-driver/dc3-driver-ble/dc3/logs
- driver_data:/dc3-driver/dc3-driver-ble/dc3/data
logging: *default-logging
networks:
dc3net:
aliases:
- dc3-driver-ble
can:
build:
context: ..
dockerfile: Dockerfile
target: dc3-driver-can
image: ${DC3_IMAGE_REGISTRY:-pnoker}/dc3-driver-can:${DC3_IMAGE_TAG:-2026.9}
restart: always
depends_on:
single:
condition: service_healthy
environment:
<<: *app-runtime-env
container_name: dc3-driver-can
hostname: dc3-driver-can
volumes:
- logs:/dc3-driver/dc3-driver-can/dc3/logs
- driver_data:/dc3-driver/dc3-driver-can/dc3/data
logging: *default-logging
networks:
dc3net:
aliases:
- dc3-driver-can
coap:
build:
context: ..
dockerfile: Dockerfile
target: dc3-driver-coap
image: ${DC3_IMAGE_REGISTRY:-pnoker}/dc3-driver-coap:${DC3_IMAGE_TAG:-2026.9}
restart: always
depends_on:
single:
condition: service_healthy
environment:
<<: *app-runtime-env
container_name: dc3-driver-coap
hostname: dc3-driver-coap
volumes:
- logs:/dc3-driver/dc3-driver-coap/dc3/logs
- driver_data:/dc3-driver/dc3-driver-coap/dc3/data
logging: *default-logging
networks:
dc3net:
aliases:
- dc3-driver-coap
dlms:
build:
context: ..
dockerfile: Dockerfile
target: dc3-driver-dlms
image: ${DC3_IMAGE_REGISTRY:-pnoker}/dc3-driver-dlms:${DC3_IMAGE_TAG:-2026.9}
restart: always
depends_on:
single:
condition: service_healthy
environment:
<<: *app-runtime-env
container_name: dc3-driver-dlms
hostname: dc3-driver-dlms
volumes:
- logs:/dc3-driver/dc3-driver-dlms/dc3/logs
- driver_data:/dc3-driver/dc3-driver-dlms/dc3/data
logging: *default-logging
networks:
dc3net:
aliases:
- dc3-driver-dlms
ethernet-ip:
build:
context: ..
dockerfile: Dockerfile
target: dc3-driver-ethernet-ip
image: ${DC3_IMAGE_REGISTRY:-pnoker}/dc3-driver-ethernet-ip:${DC3_IMAGE_TAG:-2026.9}
restart: always
depends_on:
single:
condition: service_healthy
environment:
<<: *app-runtime-env
container_name: dc3-driver-ethernet-ip
hostname: dc3-driver-ethernet-ip
volumes:
- logs:/dc3-driver/dc3-driver-ethernet-ip/dc3/logs
- driver_data:/dc3-driver/dc3-driver-ethernet-ip/dc3/data
logging: *default-logging
networks:
dc3net:
aliases:
- dc3-driver-ethernet-ip
fins:
build:
context: ..
dockerfile: Dockerfile
target: dc3-driver-fins
image: ${DC3_IMAGE_REGISTRY:-pnoker}/dc3-driver-fins:${DC3_IMAGE_TAG:-2026.9}
restart: always
depends_on:
single:
condition: service_healthy
environment:
<<: *app-runtime-env
container_name: dc3-driver-fins
hostname: dc3-driver-fins
volumes:
- logs:/dc3-driver/dc3-driver-fins/dc3/logs
- driver_data:/dc3-driver/dc3-driver-fins/dc3/data
logging: *default-logging
networks:
dc3net:
aliases:
- dc3-driver-fins
http:
build:
context: ..
dockerfile: Dockerfile
target: dc3-driver-http
image: ${DC3_IMAGE_REGISTRY:-pnoker}/dc3-driver-http:${DC3_IMAGE_TAG:-2026.9}
restart: always
depends_on:
single:
condition: service_healthy
environment:
<<: *app-runtime-env
container_name: dc3-driver-http
hostname: dc3-driver-http
volumes:
- logs:/dc3-driver/dc3-driver-http/dc3/logs
- driver_data:/dc3-driver/dc3-driver-http/dc3/data
logging: *default-logging
networks:
dc3net:
aliases:
- dc3-driver-http
iec104:
build:
context: ..
dockerfile: Dockerfile
target: dc3-driver-iec104
image: ${DC3_IMAGE_REGISTRY:-pnoker}/dc3-driver-iec104:${DC3_IMAGE_TAG:-2026.9}
restart: always
depends_on:
single:
condition: service_healthy
environment:
<<: *app-runtime-env
container_name: dc3-driver-iec104
hostname: dc3-driver-iec104
volumes:
- logs:/dc3-driver/dc3-driver-iec104/dc3/logs
- driver_data:/dc3-driver/dc3-driver-iec104/dc3/data
logging: *default-logging
networks:
dc3net:
aliases:
- dc3-driver-iec104
lwm2m:
build:
context: ..
dockerfile: Dockerfile
target: dc3-driver-lwm2m
image: ${DC3_IMAGE_REGISTRY:-pnoker}/dc3-driver-lwm2m:${DC3_IMAGE_TAG:-2026.9}
restart: always
depends_on:
single:
condition: service_healthy
environment:
<<: *app-runtime-env
container_name: dc3-driver-lwm2m
hostname: dc3-driver-lwm2m
volumes:
- logs:/dc3-driver/dc3-driver-lwm2m/dc3/logs
- driver_data:/dc3-driver/dc3-driver-lwm2m/dc3/data
logging: *default-logging
networks:
dc3net:
aliases:
- dc3-driver-lwm2m
melsec:
build:
context: ..
dockerfile: Dockerfile
target: dc3-driver-melsec
image: ${DC3_IMAGE_REGISTRY:-pnoker}/dc3-driver-melsec:${DC3_IMAGE_TAG:-2026.9}
restart: always
depends_on:
single:
condition: service_healthy
environment:
<<: *app-runtime-env
container_name: dc3-driver-melsec
hostname: dc3-driver-melsec
volumes:
- logs:/dc3-driver/dc3-driver-melsec/dc3/logs
- driver_data:/dc3-driver/dc3-driver-melsec/dc3/data
logging: *default-logging
networks:
dc3net:
aliases:
- dc3-driver-melsec
mysql:
build:
context: ..
dockerfile: Dockerfile
target: dc3-driver-mysql
image: ${DC3_IMAGE_REGISTRY:-pnoker}/dc3-driver-mysql:${DC3_IMAGE_TAG:-2026.9}
restart: always
depends_on:
single:
condition: service_healthy
environment:
<<: *app-runtime-env
container_name: dc3-driver-mysql
hostname: dc3-driver-mysql
volumes:
- logs:/dc3-driver/dc3-driver-mysql/dc3/logs
- driver_data:/dc3-driver/dc3-driver-mysql/dc3/data
logging: *default-logging
networks:
dc3net:
aliases:
- dc3-driver-mysql
oracle:
build:
context: ..
dockerfile: Dockerfile
target: dc3-driver-oracle
image: ${DC3_IMAGE_REGISTRY:-pnoker}/dc3-driver-oracle:${DC3_IMAGE_TAG:-2026.9}
restart: always
depends_on:
single:
condition: service_healthy
environment:
<<: *app-runtime-env
container_name: dc3-driver-oracle
hostname: dc3-driver-oracle
volumes:
- logs:/dc3-driver/dc3-driver-oracle/dc3/logs
- driver_data:/dc3-driver/dc3-driver-oracle/dc3/data
logging: *default-logging
networks:
dc3net:
aliases:
- dc3-driver-oracle
postgresql:
build:
context: ..
dockerfile: Dockerfile
target: dc3-driver-postgresql
image: ${DC3_IMAGE_REGISTRY:-pnoker}/dc3-driver-postgresql:${DC3_IMAGE_TAG:-2026.9}
restart: always
depends_on:
single:
condition: service_healthy
environment:
<<: *app-runtime-env
container_name: dc3-driver-postgresql
hostname: dc3-driver-postgresql
volumes:
- logs:/dc3-driver/dc3-driver-postgresql/dc3/logs
- driver_data:/dc3-driver/dc3-driver-postgresql/dc3/data
logging: *default-logging
networks:
dc3net:
aliases:
- dc3-driver-postgresql
serial:
build:
context: ..
dockerfile: Dockerfile
target: dc3-driver-serial
image: ${DC3_IMAGE_REGISTRY:-pnoker}/dc3-driver-serial:${DC3_IMAGE_TAG:-2026.9}
restart: always
depends_on:
single:
condition: service_healthy
environment:
<<: *app-runtime-env
container_name: dc3-driver-serial
hostname: dc3-driver-serial
volumes:
- logs:/dc3-driver/dc3-driver-serial/dc3/logs
- driver_data:/dc3-driver/dc3-driver-serial/dc3/data
logging: *default-logging
networks:
dc3net:
aliases:
- dc3-driver-serial
dlt645:
build:
context: ..
dockerfile: Dockerfile
target: dc3-driver-dlt645
image: ${DC3_IMAGE_REGISTRY:-pnoker}/dc3-driver-dlt645:${DC3_IMAGE_TAG:-2026.9}
restart: always
depends_on:
single:
condition: service_healthy
environment:
<<: *app-runtime-env
container_name: dc3-driver-dlt645
hostname: dc3-driver-dlt645
volumes:
- logs:/dc3-driver/dc3-driver-dlt645/dc3/logs
- driver_data:/dc3-driver/dc3-driver-dlt645/dc3/data
logging: *default-logging
networks:
dc3net:
aliases:
- dc3-driver-dlt645
dnp3:
build:
context: ..
dockerfile: Dockerfile
target: dc3-driver-dnp3
image: ${DC3_IMAGE_REGISTRY:-pnoker}/dc3-driver-dnp3:${DC3_IMAGE_TAG:-2026.9}
restart: always
depends_on:
single:
condition: service_healthy
environment:
<<: *app-runtime-env
container_name: dc3-driver-dnp3
hostname: dc3-driver-dnp3
volumes:
- logs:/dc3-driver/dc3-driver-dnp3/dc3/logs
- driver_data:/dc3-driver/dc3-driver-dnp3/dc3/data
logging: *default-logging
networks:
dc3net:
aliases:
- dc3-driver-dnp3
iec61850:
build:
context: ..
dockerfile: Dockerfile
target: dc3-driver-iec61850
image: ${DC3_IMAGE_REGISTRY:-pnoker}/dc3-driver-iec61850:${DC3_IMAGE_TAG:-2026.9}
restart: always
depends_on:
single:
condition: service_healthy
environment:
<<: *app-runtime-env
container_name: dc3-driver-iec61850
hostname: dc3-driver-iec61850
volumes:
- logs:/dc3-driver/dc3-driver-iec61850/dc3/logs
- driver_data:/dc3-driver/dc3-driver-iec61850/dc3/data
logging: *default-logging
networks:
dc3net:
aliases:
- dc3-driver-iec61850
kafka:
build:
context: ..
dockerfile: Dockerfile
target: dc3-driver-kafka
image: ${DC3_IMAGE_REGISTRY:-pnoker}/dc3-driver-kafka:${DC3_IMAGE_TAG:-2026.9}
restart: always
depends_on:
single:
condition: service_healthy
environment:
<<: *app-runtime-env
container_name: dc3-driver-kafka
hostname: dc3-driver-kafka
volumes:
- logs:/dc3-driver/dc3-driver-kafka/dc3/logs
- driver_data:/dc3-driver/dc3-driver-kafka/dc3/data
logging: *default-logging
networks:
dc3net:
aliases:
- dc3-driver-kafka
knx:
build:
context: ..
dockerfile: Dockerfile
target: dc3-driver-knx
image: ${DC3_IMAGE_REGISTRY:-pnoker}/dc3-driver-knx:${DC3_IMAGE_TAG:-2026.9}
restart: always
depends_on:
single:
condition: service_healthy
environment:
<<: *app-runtime-env
container_name: dc3-driver-knx
hostname: dc3-driver-knx
volumes:
- logs:/dc3-driver/dc3-driver-knx/dc3/logs
- driver_data:/dc3-driver/dc3-driver-knx/dc3/data
logging: *default-logging
networks:
dc3net:
aliases:
- dc3-driver-knx
lorawan:
build:
context: ..
dockerfile: Dockerfile
target: dc3-driver-lorawan
image: ${DC3_IMAGE_REGISTRY:-pnoker}/dc3-driver-lorawan:${DC3_IMAGE_TAG:-2026.9}
restart: always
depends_on:
single:
condition: service_healthy
environment:
<<: *app-runtime-env
container_name: dc3-driver-lorawan
hostname: dc3-driver-lorawan
volumes:
- logs:/dc3-driver/dc3-driver-lorawan/dc3/logs
- driver_data:/dc3-driver/dc3-driver-lorawan/dc3/data
logging: *default-logging
networks:
dc3net:
aliases:
- dc3-driver-lorawan
mbus:
build:
context: ..
dockerfile: Dockerfile
target: dc3-driver-mbus
image: ${DC3_IMAGE_REGISTRY:-pnoker}/dc3-driver-mbus:${DC3_IMAGE_TAG:-2026.9}
restart: always
depends_on:
single:
condition: service_healthy
environment:
<<: *app-runtime-env
container_name: dc3-driver-mbus
hostname: dc3-driver-mbus
volumes:
- logs:/dc3-driver/dc3-driver-mbus/dc3/logs
- driver_data:/dc3-driver/dc3-driver-mbus/dc3/data
logging: *default-logging
networks:
dc3net:
aliases:
- dc3-driver-mbus
redis:
build:
context: ..
dockerfile: Dockerfile
target: dc3-driver-redis
image: ${DC3_IMAGE_REGISTRY:-pnoker}/dc3-driver-redis:${DC3_IMAGE_TAG:-2026.9}
restart: always
depends_on:
single:
condition: service_healthy
environment:
<<: *app-runtime-env
container_name: dc3-driver-redis
hostname: dc3-driver-redis
volumes:
- logs:/dc3-driver/dc3-driver-redis/dc3/logs
- driver_data:/dc3-driver/dc3-driver-redis/dc3/data
logging: *default-logging
networks:
dc3net:
aliases:
- dc3-driver-redis
sl651:
build:
context: ..
dockerfile: Dockerfile
target: dc3-driver-sl651
image: ${DC3_IMAGE_REGISTRY:-pnoker}/dc3-driver-sl651:${DC3_IMAGE_TAG:-2026.9}
restart: always
depends_on:
single:
condition: service_healthy
environment:
<<: *app-runtime-env
container_name: dc3-driver-sl651
hostname: dc3-driver-sl651
volumes:
- logs:/dc3-driver/dc3-driver-sl651/dc3/logs
- driver_data:/dc3-driver/dc3-driver-sl651/dc3/data
logging: *default-logging
networks:
dc3net:
aliases:
- dc3-driver-sl651
snmp:
build:
context: ..
dockerfile: Dockerfile
target: dc3-driver-snmp
image: ${DC3_IMAGE_REGISTRY:-pnoker}/dc3-driver-snmp:${DC3_IMAGE_TAG:-2026.9}
restart: always
depends_on:
single:
condition: service_healthy
environment:
<<: *app-runtime-env
container_name: dc3-driver-snmp
hostname: dc3-driver-snmp
volumes:
- logs:/dc3-driver/dc3-driver-snmp/dc3/logs
- driver_data:/dc3-driver/dc3-driver-snmp/dc3/data
logging: *default-logging
networks:
dc3net:
aliases:
- dc3-driver-snmp
sqlserver:
build:
context: ..
dockerfile: Dockerfile
target: dc3-driver-sqlserver
image: ${DC3_IMAGE_REGISTRY:-pnoker}/dc3-driver-sqlserver:${DC3_IMAGE_TAG:-2026.9}
restart: always
depends_on:
single:
condition: service_healthy
environment:
<<: *app-runtime-env
container_name: dc3-driver-sqlserver
hostname: dc3-driver-sqlserver
volumes:
- logs:/dc3-driver/dc3-driver-sqlserver/dc3/logs
- driver_data:/dc3-driver/dc3-driver-sqlserver/dc3/data
logging: *default-logging
networks:
dc3net:
aliases:
- dc3-driver-sqlserver
tcp-udp:
build:
context: ..
dockerfile: Dockerfile
target: dc3-driver-tcp-udp
image: ${DC3_IMAGE_REGISTRY:-pnoker}/dc3-driver-tcp-udp:${DC3_IMAGE_TAG:-2026.9}
restart: always
depends_on:
single:
condition: service_healthy
environment:
<<: *app-runtime-env
container_name: dc3-driver-tcp-udp
hostname: dc3-driver-tcp-udp
volumes:
- logs:/dc3-driver/dc3-driver-tcp-udp/dc3/logs
- driver_data:/dc3-driver/dc3-driver-tcp-udp/dc3/data
logging: *default-logging
networks:
dc3net:
aliases:
- dc3-driver-tcp-udp
zigbee:
build:
context: ..
dockerfile: Dockerfile
target: dc3-driver-zigbee
image: ${DC3_IMAGE_REGISTRY:-pnoker}/dc3-driver-zigbee:${DC3_IMAGE_TAG:-2026.9}
restart: always
depends_on:
single:
condition: service_healthy
environment:
<<: *app-runtime-env
container_name: dc3-driver-zigbee
hostname: dc3-driver-zigbee
volumes:
- logs:/dc3-driver/dc3-driver-zigbee/dc3/logs
- driver_data:/dc3-driver/dc3-driver-zigbee/dc3/data
logging: *default-logging
networks:
dc3net:
aliases:
- dc3-driver-zigbee
opc-da:
build:
context: ..
dockerfile: Dockerfile
target: dc3-driver-opc-da
image: ${DC3_IMAGE_REGISTRY:-pnoker}/dc3-driver-opc-da:${DC3_IMAGE_TAG:-2026.9}
restart: always
depends_on:
single:
condition: service_healthy
environment:
<<: *app-runtime-env
container_name: dc3-driver-opc-da
hostname: dc3-driver-opc-da
volumes:
- logs:/dc3-driver/dc3-driver-opc-da/dc3/logs
- driver_data:/dc3-driver/dc3-driver-opc-da/dc3/data
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.9}
restart: always
depends_on:
single:
condition: service_healthy
environment:
<<: *app-runtime-env
container_name: dc3-driver-opc-ua
hostname: dc3-driver-opc-ua
volumes:
- logs:/dc3-driver/dc3-driver-opc-ua/dc3/logs
- driver_data:/dc3-driver/dc3-driver-opc-ua/dc3/data
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.9}
restart: always
depends_on:
single:
condition: service_healthy
environment:
<<: *app-runtime-env
container_name: dc3-driver-plcs7
hostname: dc3-driver-plcs7
volumes:
- logs:/dc3-driver/dc3-driver-plcs7/dc3/logs
- driver_data:/dc3-driver/dc3-driver-plcs7/dc3/data
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.9}
restart: always
depends_on:
single:
condition: service_healthy
environment:
<<: *app-runtime-env
container_name: dc3-driver-virtual
hostname: dc3-driver-virtual
volumes:
- logs:/dc3-driver/dc3-driver-virtual/dc3/logs
- driver_data:/dc3-driver/dc3-driver-virtual/dc3/data
logging: *default-logging
networks:
dc3net:
aliases:
- dc3-driver-virtual
volumes:
logs:
driver_data:
agentic_data:
nginx:
networks:
dc3net:
driver: bridge