From a45f2f5ec1d486a9a59144d695827818fe63b697 Mon Sep 17 00:00:00 2001 From: pnoker Date: Sat, 9 May 2026 17:58:15 +0800 Subject: [PATCH] fix(container): include agentic compose service --- .env.example | 9 ++++ .github/workflows/docker-ci.yml | 1 + README.md | 7 +++ README.zh.md | 6 ++- .../src/main/resources/application-dev.yml | 1 + .../src/main/resources/application-pre.yml | 26 ++++++++++ .../src/main/resources/application-pro.yml | 26 ++++++++++ .../src/main/resources/application-test.yml | 30 ++++++++++++ dc3/bin/run-podman-db-aliyun.sh | 15 ++++-- dc3/bin/run-podman-elasticsearch-aliyun.sh | 15 ++++-- dc3/bin/run-podman-grafana-aliyun.sh | 15 ++++-- dc3/doc/MODULES.md | 1 + dc3/doc/QUICKSTART.md | 3 +- dc3/doc/TROUBLESHOOTING.md | 2 +- dc3/docker-compose-aliyun.yml | 45 ++++++++++++----- dc3/docker-compose-dev-aliyun.yml | 48 ++++++++++++++----- dc3/docker-compose-dev.yml | 48 ++++++++++++++----- dc3/docker-compose.yml | 45 ++++++++++++----- dc3/env/dev.env | 10 +++- dc3/env/dev.env.sh | 2 + 20 files changed, 292 insertions(+), 63 deletions(-) diff --git a/.env.example b/.env.example index 00a1cf5a4..e64b06710 100644 --- a/.env.example +++ b/.env.example @@ -7,6 +7,7 @@ DC3_IMAGE_TAG=2026.5 DC3_LOG_MAX_SIZE=10M DC3_LOG_MAX_FILE=20 DC3_BIND_HOST=127.0.0.1 +APM_AGENT_ENABLE=false # Base dependency stack POSTGRES_USERNAME=dc3 @@ -24,9 +25,17 @@ DC3_MANAGER_PORT=8400 DC3_MANAGER_GRPC_PORT=9400 DC3_DATA_PORT=8500 DC3_DATA_GRPC_PORT=9500 +DC3_AGENTIC_PORT=8600 DC3_LISTENING_VIRTUAL_DRIVER_PORT=6270 DC3_LISTENING_VIRTUAL_GRPC_PORT=6271 +# Agentic / OpenAI-compatible API defaults +OPENAI_BASE_URL=https://api.openai.com +OPENAI_API_KEY= +OPENAI_MODEL=gpt-4o +OPENAI_TEMPERATURE=0.7 +OPENAI_MAX_TOKENS=2048 + # Optional EMQX stack published ports DC3_EMQX_WS_PORT=38083 DC3_EMQX_WSS_PORT=38084 diff --git a/.github/workflows/docker-ci.yml b/.github/workflows/docker-ci.yml index 6584bc4b1..52ccb561e 100644 --- a/.github/workflows/docker-ci.yml +++ b/.github/workflows/docker-ci.yml @@ -73,6 +73,7 @@ jobs: services=( "dc3-gateway:dc3-gateway" + "dc3-center-agentic:dc3-center/dc3-center-agentic" "dc3-center-auth:dc3-center/dc3-center-auth" "dc3-center-data:dc3-center/dc3-center-data" "dc3-center-manager:dc3-center/dc3-center-manager" diff --git a/README.md b/README.md index 393109ef3..096696035 100644 --- a/README.md +++ b/README.md @@ -103,6 +103,7 @@ Common overrides used by the Compose stacks in `dc3/`: | `DC3_LOG_MAX_SIZE` | `10M` | Maximum size per container log file | | `DC3_LOG_MAX_FILE` | `20` | Number of rotated log files to keep | | `DC3_BIND_HOST` | `127.0.0.1` | Host address used for published ports; set `0.0.0.0` if you need LAN access | +| `APM_AGENT_ENABLE` | `false` | Enables the Java APM agent in application containers | | `POSTGRES_USERNAME` | `dc3` | Username used by the Postgres health check | | `POSTGRES_DB` | `dc3` | Database name used by the Postgres health check | | `DC3_POSTGRES_PORT` | `35432` | Published PostgreSQL port | @@ -112,7 +113,10 @@ Common overrides used by the Compose stacks in `dc3/`: | `DC3_AUTH_PORT` / `DC3_AUTH_GRPC_PORT` | `8300` / `9300` | Auth center HTTP and gRPC ports | | `DC3_MANAGER_PORT` / `DC3_MANAGER_GRPC_PORT` | `8400` / `9400` | Manager center HTTP and gRPC ports | | `DC3_DATA_PORT` / `DC3_DATA_GRPC_PORT` | `8500` / `9500` | Data center HTTP and gRPC ports | +| `DC3_AGENTIC_PORT` | `8600` | Agentic center HTTP port | | `DC3_LISTENING_VIRTUAL_DRIVER_PORT` / `DC3_LISTENING_VIRTUAL_GRPC_PORT` | `6270` / `6271` | Listening virtual driver ports | +| `OPENAI_BASE_URL` / `OPENAI_MODEL` | `https://api.openai.com` / `gpt-4o` | OpenAI-compatible endpoint and chat model for Agentic center | +| `OPENAI_API_KEY` | empty | OpenAI-compatible API key for Agentic center | | `DC3_EMQX_WS_PORT` / `DC3_EMQX_WSS_PORT` | `38083` / `38084` | EMQX WebSocket endpoints | | `DC3_EMQX_MQTT_PORT` / `DC3_EMQX_MQTTS_PORT` | `31883` / `38883` | EMQX MQTT / MQTTS ports | | `DC3_EMQX_DASHBOARD_PORT` | `18083` | EMQX dashboard port | @@ -154,6 +158,9 @@ java -jar dc3-center/dc3-center-data/target/dc3-center-data.jar # Manager Center java -jar dc3-center/dc3-center-manager/target/dc3-center-manager.jar +# Agentic Center +java -jar dc3-center/dc3-center-agentic/target/dc3-center-agentic.jar + # Virtual Driver java -jar dc3-driver/dc3-driver-virtual/target/dc3-driver-virtual.jar diff --git a/README.zh.md b/README.zh.md index e44a00f72..06ad80aac 100644 --- a/README.zh.md +++ b/README.zh.md @@ -89,7 +89,8 @@ cp .env.example .env ``` 根目录 `.env` 用于 `dc3/` 下 Compose 文件的变量插值;应用运行时环境变量仍然位于 `dc3/env/dev.env` 或 -`dc3/env/dev.env.sh`。 +`dc3/env/dev.env.sh`。如果启用 Agentic Center,请在 `.env` 或当前 shell 中配置 `OPENAI_BASE_URL`、 +`OPENAI_API_KEY`、`OPENAI_MODEL` 等 OpenAI 兼容参数。 ## 3.2 准备工作 @@ -121,6 +122,9 @@ java -jar dc3-center/dc3-center-data/target/dc3-center-data.jar # 管理中心 java -jar dc3-center/dc3-center-manager/target/dc3-center-manager.jar +# Agentic 中心 +java -jar dc3-center/dc3-center-agentic/target/dc3-center-agentic.jar + # 虚拟驱动 java -jar dc3-driver/dc3-driver-virtual/target/dc3-driver-virtual.jar diff --git a/dc3-center/dc3-center-agentic/src/main/resources/application-dev.yml b/dc3-center/dc3-center-agentic/src/main/resources/application-dev.yml index c2e3603f5..ad0f89c2a 100644 --- a/dc3-center/dc3-center-agentic/src/main/resources/application-dev.yml +++ b/dc3-center/dc3-center-agentic/src/main/resources/application-dev.yml @@ -1,5 +1,6 @@ spring: env: dev + group: ${user.name} datasource: dynamic: datasource: diff --git a/dc3-center/dc3-center-agentic/src/main/resources/application-pre.yml b/dc3-center/dc3-center-agentic/src/main/resources/application-pre.yml index e15f7fdbb..fb1f78548 100644 --- a/dc3-center/dc3-center-agentic/src/main/resources/application-pre.yml +++ b/dc3-center/dc3-center-agentic/src/main/resources/application-pre.yml @@ -1,2 +1,28 @@ +# Pre-release environment configuration spring: env: pre + datasource: + dynamic: + datasource: + master: + url: jdbc:postgresql://${POSTGRES_HOST:dc3-postgres}:${POSTGRES_PORT:5432}/${POSTGRES_DB:dc3}?currentSchema=${POSTGRES_SCHEMA:dc3_agentic}&applicationName=dc3&ssl=false&stringtype=unspecified&clientEncoding=UTF8&serverTimezone=Asia/Shanghai + username: ${POSTGRES_USERNAME:dc3} + password: ${POSTGRES_PASSWORD:dc3dc3dc3} + grpc: + client: + channels: + dc3-center-auth: + address: 'static://${CENTER_AUTH_HOST:dc3-center-auth}:9300' + enable-keep-alive: true + keep-alive-without-calls: true + negotiation-type: PLAINTEXT + dc3-center-manager: + address: 'static://${CENTER_MANAGER_HOST:dc3-center-manager}:9400' + enable-keep-alive: true + keep-alive-without-calls: true + negotiation-type: PLAINTEXT + dc3-center-data: + address: 'static://${CENTER_DATA_HOST:dc3-center-data}:9500' + enable-keep-alive: true + keep-alive-without-calls: true + negotiation-type: PLAINTEXT diff --git a/dc3-center/dc3-center-agentic/src/main/resources/application-pro.yml b/dc3-center/dc3-center-agentic/src/main/resources/application-pro.yml index dc20ea854..e0c48772a 100644 --- a/dc3-center/dc3-center-agentic/src/main/resources/application-pro.yml +++ b/dc3-center/dc3-center-agentic/src/main/resources/application-pro.yml @@ -1,2 +1,28 @@ +# Production environment configuration spring: env: pro + datasource: + dynamic: + datasource: + master: + url: jdbc:postgresql://${POSTGRES_HOST:dc3-postgres}:${POSTGRES_PORT:5432}/${POSTGRES_DB:dc3}?currentSchema=${POSTGRES_SCHEMA:dc3_agentic}&applicationName=dc3&ssl=false&stringtype=unspecified&clientEncoding=UTF8&serverTimezone=Asia/Shanghai + username: ${POSTGRES_USERNAME:dc3} + password: ${POSTGRES_PASSWORD:dc3dc3dc3} + grpc: + client: + channels: + dc3-center-auth: + address: 'static://${CENTER_AUTH_HOST:dc3-center-auth}:9300' + enable-keep-alive: true + keep-alive-without-calls: true + negotiation-type: PLAINTEXT + dc3-center-manager: + address: 'static://${CENTER_MANAGER_HOST:dc3-center-manager}:9400' + enable-keep-alive: true + keep-alive-without-calls: true + negotiation-type: PLAINTEXT + dc3-center-data: + address: 'static://${CENTER_DATA_HOST:dc3-center-data}:9500' + enable-keep-alive: true + keep-alive-without-calls: true + negotiation-type: PLAINTEXT diff --git a/dc3-center/dc3-center-agentic/src/main/resources/application-test.yml b/dc3-center/dc3-center-agentic/src/main/resources/application-test.yml index 4c3763d1e..c498f1cec 100644 --- a/dc3-center/dc3-center-agentic/src/main/resources/application-test.yml +++ b/dc3-center/dc3-center-agentic/src/main/resources/application-test.yml @@ -1,2 +1,32 @@ +# Test environment configuration will overwrite the content configured in application-*.yml spring: env: test + datasource: + dynamic: + datasource: + master: + url: jdbc:postgresql://${POSTGRES_HOST:dc3-postgres}:${POSTGRES_PORT:5432}/${POSTGRES_DB:dc3}?currentSchema=${POSTGRES_SCHEMA:dc3_agentic}&applicationName=dc3&ssl=false&stringtype=unspecified&clientEncoding=UTF8&serverTimezone=Asia/Shanghai + username: ${POSTGRES_USERNAME:dc3} + password: ${POSTGRES_PASSWORD:dc3dc3dc3} + grpc: + client: + channels: + dc3-center-auth: + address: 'static://${CENTER_AUTH_HOST:dc3-center-auth}:9300' + enable-keep-alive: true + keep-alive-without-calls: true + negotiation-type: PLAINTEXT + dc3-center-manager: + address: 'static://${CENTER_MANAGER_HOST:dc3-center-manager}:9400' + enable-keep-alive: true + keep-alive-without-calls: true + negotiation-type: PLAINTEXT + dc3-center-data: + address: 'static://${CENTER_DATA_HOST:dc3-center-data}:9500' + enable-keep-alive: true + keep-alive-without-calls: true + negotiation-type: PLAINTEXT + +logging: + level: + io.github.pnoker: DEBUG diff --git a/dc3/bin/run-podman-db-aliyun.sh b/dc3/bin/run-podman-db-aliyun.sh index f1f2bc10e..53e940ced 100755 --- a/dc3/bin/run-podman-db-aliyun.sh +++ b/dc3/bin/run-podman-db-aliyun.sh @@ -17,10 +17,15 @@ # along with this program. If not, see . # -set -e +set -euo pipefail -cd dc3 +script_dir="$(cd "$(dirname "${BASH_SOURCE[0]}")" && pwd)" +compose_file="${script_dir}/../docker-compose-db-aliyun.yml" -podman compose -f docker-compose-db-aliyun.yml pull -podman compose -f docker-compose-db-aliyun.yml down -v -podman compose -f docker-compose-db-aliyun.yml up -d \ No newline at end of file +podman compose -f "${compose_file}" pull +if [[ "${RESET_VOLUMES:-false}" == "true" ]]; then + podman compose -f "${compose_file}" down -v +else + podman compose -f "${compose_file}" down +fi +podman compose -f "${compose_file}" up -d diff --git a/dc3/bin/run-podman-elasticsearch-aliyun.sh b/dc3/bin/run-podman-elasticsearch-aliyun.sh index d147a0843..18a30010e 100644 --- a/dc3/bin/run-podman-elasticsearch-aliyun.sh +++ b/dc3/bin/run-podman-elasticsearch-aliyun.sh @@ -17,10 +17,15 @@ # along with this program. If not, see . # -set -e +set -euo pipefail -cd dc3 +script_dir="$(cd "$(dirname "${BASH_SOURCE[0]}")" && pwd)" +compose_file="${script_dir}/../docker-compose-elasticsearch-aliyun.yml" -podman compose -f docker-compose-elasticsearch-aliyun.yml pull -podman compose -f docker-compose-elasticsearch-aliyun.yml down -v -podman compose -f docker-compose-elasticsearch-aliyun.yml up -d \ No newline at end of file +podman compose -f "${compose_file}" pull +if [[ "${RESET_VOLUMES:-false}" == "true" ]]; then + podman compose -f "${compose_file}" down -v +else + podman compose -f "${compose_file}" down +fi +podman compose -f "${compose_file}" up -d diff --git a/dc3/bin/run-podman-grafana-aliyun.sh b/dc3/bin/run-podman-grafana-aliyun.sh index ae4fe3ce5..d9c07bfbc 100644 --- a/dc3/bin/run-podman-grafana-aliyun.sh +++ b/dc3/bin/run-podman-grafana-aliyun.sh @@ -17,10 +17,15 @@ # along with this program. If not, see . # -set -e +set -euo pipefail -cd dc3 +script_dir="$(cd "$(dirname "${BASH_SOURCE[0]}")" && pwd)" +compose_file="${script_dir}/../docker-compose-grafana-aliyun.yml" -podman compose -f docker-compose-grafana-aliyun.yml pull -podman compose -f docker-compose-grafana-aliyun.yml down -v -podman compose -f docker-compose-grafana-aliyun.yml up -d \ No newline at end of file +podman compose -f "${compose_file}" pull +if [[ "${RESET_VOLUMES:-false}" == "true" ]]; then + podman compose -f "${compose_file}" down -v +else + podman compose -f "${compose_file}" down +fi +podman compose -f "${compose_file}" up -d diff --git a/dc3/doc/MODULES.md b/dc3/doc/MODULES.md index 93f6f9011..8f4cdcbde 100644 --- a/dc3/doc/MODULES.md +++ b/dc3/doc/MODULES.md @@ -72,6 +72,7 @@ iot-dc3 (root pom) | dc3-center-auth | dc3-common-auth | 8300 | 9300 | | dc3-center-data | dc3-common-data, facade-grpc | 8500 | 9500 | | dc3-center-manager | dc3-common-manager, facade-grpc | 8400 | 9400 | +| dc3-center-agentic | dc3-common-agentic, facade-grpc | 8600 | - | | dc3-center-single | auth+manager+data (facade-local) | 8200 | 9200 | ## dc3-driver - Protocol Drivers diff --git a/dc3/doc/QUICKSTART.md b/dc3/doc/QUICKSTART.md index 4ed764113..8bde45ed2 100644 --- a/dc3/doc/QUICKSTART.md +++ b/dc3/doc/QUICKSTART.md @@ -110,12 +110,13 @@ make compose-restart STACK=dev | Auth Center | 8300 | 9300 | | Manager Center | 8400 | 9400 | | Data Center | 8500 | 9500 | +| Agentic Center | 8600 | - | ## 9. Recommended local workflow 1. `make dev-db` 2. `mvn -s .mvn/settings.xml clean package` -3. Run Gateway -> Auth -> Data -> Manager -> Driver +3. Run Gateway -> Auth -> Data -> Manager -> Agentic -> Driver 4. Test APIs via Gateway at http://localhost:8000/api/v3/... 5. If using observability stack, start Grafana/ELK after the core platform is stable diff --git a/dc3/doc/TROUBLESHOOTING.md b/dc3/doc/TROUBLESHOOTING.md index 1f40fd5e4..b1540faab 100644 --- a/dc3/doc/TROUBLESHOOTING.md +++ b/dc3/doc/TROUBLESHOOTING.md @@ -40,7 +40,7 @@ Then rebuild. ## 4. Ports already in use -**Symptom**: Application fails to start due to occupied ports (8000/8300/8400/8500/9300/9400/9500). +**Symptom**: Application fails to start due to occupied ports (8000/8300/8400/8500/8600/9300/9400/9500). **Resolution**: Override ports using environment variables or `.env` values. diff --git a/dc3/docker-compose-aliyun.yml b/dc3/docker-compose-aliyun.yml index 074b9bcf3..da34ab84f 100644 --- a/dc3/docker-compose-aliyun.yml +++ b/dc3/docker-compose-aliyun.yml @@ -29,7 +29,7 @@ services: - "${DC3_BIND_HOST:-127.0.0.1}:${DC3_GATEWAY_PORT:-8000}:8000" environment: - NODE_ENV=test - - APM_AGENT_ENABLE=false + - APM_AGENT_ENABLE=${APM_AGENT_ENABLE:-false} container_name: dc3-gateway hostname: dc3-gateway volumes: @@ -48,7 +48,7 @@ services: - "${DC3_BIND_HOST:-127.0.0.1}:${DC3_AUTH_GRPC_PORT:-9300}:9300" environment: - NODE_ENV=test - - APM_AGENT_ENABLE=false + - APM_AGENT_ENABLE=${APM_AGENT_ENABLE:-false} container_name: dc3-center-auth hostname: dc3-center-auth volumes: @@ -67,7 +67,7 @@ services: - "${DC3_BIND_HOST:-127.0.0.1}:${DC3_MANAGER_GRPC_PORT:-9400}:9400" environment: - NODE_ENV=test - - APM_AGENT_ENABLE=false + - APM_AGENT_ENABLE=${APM_AGENT_ENABLE:-false} container_name: dc3-center-manager hostname: dc3-center-manager volumes: @@ -86,7 +86,7 @@ services: - "${DC3_BIND_HOST:-127.0.0.1}:${DC3_DATA_GRPC_PORT:-9500}:9500" environment: - NODE_ENV=test - - APM_AGENT_ENABLE=false + - APM_AGENT_ENABLE=${APM_AGENT_ENABLE:-false} container_name: dc3-center-data hostname: dc3-center-data volumes: @@ -97,6 +97,29 @@ services: aliases: - dc3-center-data + agentic: + image: registry.cn-beijing.aliyuncs.com/dc3/dc3-center-agentic:${DC3_IMAGE_TAG:-2026.5} + restart: always + ports: + - "${DC3_BIND_HOST:-127.0.0.1}:${DC3_AGENTIC_PORT:-8600}:8600" + environment: + - NODE_ENV=test + - APM_AGENT_ENABLE=${APM_AGENT_ENABLE:-false} + - OPENAI_BASE_URL=${OPENAI_BASE_URL:-https://api.openai.com} + - OPENAI_API_KEY=${OPENAI_API_KEY:-} + - OPENAI_MODEL=${OPENAI_MODEL:-gpt-4o} + - OPENAI_TEMPERATURE=${OPENAI_TEMPERATURE:-0.7} + - OPENAI_MAX_TOKENS=${OPENAI_MAX_TOKENS:-2048} + container_name: dc3-center-agentic + hostname: dc3-center-agentic + volumes: + - logs:/dc3-center/dc3-center-agentic/dc3/logs + logging: *default-logging + networks: + dc3net: + aliases: + - dc3-center-agentic + listening-virtual: image: registry.cn-beijing.aliyuncs.com/dc3/dc3-driver-listening-virtual:${DC3_IMAGE_TAG:-2026.5} restart: always @@ -105,7 +128,7 @@ services: - "${DC3_BIND_HOST:-127.0.0.1}:${DC3_LISTENING_VIRTUAL_GRPC_PORT:-6271}:6271" environment: - NODE_ENV=test - - APM_AGENT_ENABLE=false + - APM_AGENT_ENABLE=${APM_AGENT_ENABLE:-false} container_name: dc3-driver-listening-virtual hostname: dc3-driver-listening-virtual volumes: @@ -121,7 +144,7 @@ services: restart: always environment: - NODE_ENV=test - - APM_AGENT_ENABLE=false + - APM_AGENT_ENABLE=${APM_AGENT_ENABLE:-false} container_name: dc3-driver-modbus-tcp hostname: dc3-driver-modbus-tcp volumes: @@ -137,7 +160,7 @@ services: restart: always environment: - NODE_ENV=test - - APM_AGENT_ENABLE=false + - APM_AGENT_ENABLE=${APM_AGENT_ENABLE:-false} container_name: dc3-driver-mqtt hostname: dc3-driver-mqtt volumes: @@ -153,7 +176,7 @@ services: restart: always environment: - NODE_ENV=test - - APM_AGENT_ENABLE=false + - APM_AGENT_ENABLE=${APM_AGENT_ENABLE:-false} container_name: dc3-driver-opc-da hostname: dc3-driver-opc-da volumes: @@ -169,7 +192,7 @@ services: restart: always environment: - NODE_ENV=test - - APM_AGENT_ENABLE=false + - APM_AGENT_ENABLE=${APM_AGENT_ENABLE:-false} container_name: dc3-driver-opc-ua hostname: dc3-driver-opc-ua volumes: @@ -185,7 +208,7 @@ services: restart: always environment: - NODE_ENV=test - - APM_AGENT_ENABLE=false + - APM_AGENT_ENABLE=${APM_AGENT_ENABLE:-false} container_name: dc3-driver-plcs7 hostname: dc3-driver-plcs7 volumes: @@ -201,7 +224,7 @@ services: restart: always environment: - NODE_ENV=test - - APM_AGENT_ENABLE=false + - APM_AGENT_ENABLE=${APM_AGENT_ENABLE:-false} container_name: dc3-driver-virtual hostname: dc3-driver-virtual volumes: diff --git a/dc3/docker-compose-dev-aliyun.yml b/dc3/docker-compose-dev-aliyun.yml index 30c63c7f4..e44e17860 100644 --- a/dc3/docker-compose-dev-aliyun.yml +++ b/dc3/docker-compose-dev-aliyun.yml @@ -32,7 +32,7 @@ services: - "${DC3_BIND_HOST:-127.0.0.1}:${DC3_GATEWAY_PORT:-8000}:8000" environment: - NODE_ENV=test - - APM_AGENT_ENABLE=true + - APM_AGENT_ENABLE=${APM_AGENT_ENABLE:-false} container_name: dc3-gateway hostname: dc3-gateway volumes: @@ -54,7 +54,7 @@ services: - "${DC3_BIND_HOST:-127.0.0.1}:${DC3_AUTH_GRPC_PORT:-9300}:9300" environment: - NODE_ENV=test - - APM_AGENT_ENABLE=true + - APM_AGENT_ENABLE=${APM_AGENT_ENABLE:-false} container_name: dc3-center-auth hostname: dc3-center-auth volumes: @@ -76,7 +76,7 @@ services: - "${DC3_BIND_HOST:-127.0.0.1}:${DC3_MANAGER_GRPC_PORT:-9400}:9400" environment: - NODE_ENV=test - - APM_AGENT_ENABLE=false + - APM_AGENT_ENABLE=${APM_AGENT_ENABLE:-false} container_name: dc3-center-manager hostname: dc3-center-manager volumes: @@ -98,7 +98,7 @@ services: - "${DC3_BIND_HOST:-127.0.0.1}:${DC3_DATA_GRPC_PORT:-9500}:9500" environment: - NODE_ENV=test - - APM_AGENT_ENABLE=false + - APM_AGENT_ENABLE=${APM_AGENT_ENABLE:-false} container_name: dc3-center-data hostname: dc3-center-data volumes: @@ -109,6 +109,32 @@ services: aliases: - dc3-center-data + agentic: + build: + context: ../dc3-center/dc3-center-agentic/ + dockerfile: ./Dockerfile + image: registry.cn-beijing.aliyuncs.com/dc3/dc3-center-agentic:${DC3_IMAGE_TAG:-2026.5} + restart: always + ports: + - "${DC3_BIND_HOST:-127.0.0.1}:${DC3_AGENTIC_PORT:-8600}:8600" + environment: + - NODE_ENV=test + - APM_AGENT_ENABLE=${APM_AGENT_ENABLE:-false} + - OPENAI_BASE_URL=${OPENAI_BASE_URL:-https://api.openai.com} + - OPENAI_API_KEY=${OPENAI_API_KEY:-} + - OPENAI_MODEL=${OPENAI_MODEL:-gpt-4o} + - OPENAI_TEMPERATURE=${OPENAI_TEMPERATURE:-0.7} + - OPENAI_MAX_TOKENS=${OPENAI_MAX_TOKENS:-2048} + container_name: dc3-center-agentic + hostname: dc3-center-agentic + volumes: + - logs:/dc3-center/dc3-center-agentic/dc3/logs + logging: *default-logging + networks: + dc3net: + aliases: + - dc3-center-agentic + listening-virtual: build: context: ../dc3-driver/dc3-driver-listening-virtual/ @@ -120,7 +146,7 @@ services: - "${DC3_BIND_HOST:-127.0.0.1}:${DC3_LISTENING_VIRTUAL_GRPC_PORT:-6271}:6271" environment: - NODE_ENV=test - - APM_AGENT_ENABLE=false + - APM_AGENT_ENABLE=${APM_AGENT_ENABLE:-false} container_name: dc3-driver-listening-virtual hostname: dc3-driver-listening-virtual volumes: @@ -139,7 +165,7 @@ services: restart: always environment: - NODE_ENV=test - - APM_AGENT_ENABLE=false + - APM_AGENT_ENABLE=${APM_AGENT_ENABLE:-false} container_name: dc3-driver-modbus-tcp hostname: dc3-driver-modbus-tcp volumes: @@ -158,7 +184,7 @@ services: restart: always environment: - NODE_ENV=test - - APM_AGENT_ENABLE=false + - APM_AGENT_ENABLE=${APM_AGENT_ENABLE:-false} container_name: dc3-driver-mqtt hostname: dc3-driver-mqtt volumes: @@ -177,7 +203,7 @@ services: restart: always environment: - NODE_ENV=test - - APM_AGENT_ENABLE=false + - APM_AGENT_ENABLE=${APM_AGENT_ENABLE:-false} container_name: dc3-driver-opc-da hostname: dc3-driver-opc-da volumes: @@ -196,7 +222,7 @@ services: restart: always environment: - NODE_ENV=test - - APM_AGENT_ENABLE=false + - APM_AGENT_ENABLE=${APM_AGENT_ENABLE:-false} container_name: dc3-driver-opc-ua hostname: dc3-driver-opc-ua volumes: @@ -215,7 +241,7 @@ services: restart: always environment: - NODE_ENV=test - - APM_AGENT_ENABLE=false + - APM_AGENT_ENABLE=${APM_AGENT_ENABLE:-false} container_name: dc3-driver-plcs7 hostname: dc3-driver-plcs7 volumes: @@ -234,7 +260,7 @@ services: restart: always environment: - NODE_ENV=test - - APM_AGENT_ENABLE=false + - APM_AGENT_ENABLE=${APM_AGENT_ENABLE:-false} container_name: dc3-driver-virtual hostname: dc3-driver-virtual volumes: diff --git a/dc3/docker-compose-dev.yml b/dc3/docker-compose-dev.yml index fb3c9534d..cbbe10202 100644 --- a/dc3/docker-compose-dev.yml +++ b/dc3/docker-compose-dev.yml @@ -32,7 +32,7 @@ services: - "${DC3_BIND_HOST:-127.0.0.1}:${DC3_GATEWAY_PORT:-8000}:8000" environment: - NODE_ENV=test - - APM_AGENT_ENABLE=false + - APM_AGENT_ENABLE=${APM_AGENT_ENABLE:-false} container_name: dc3-gateway hostname: dc3-gateway volumes: @@ -54,7 +54,7 @@ services: - "${DC3_BIND_HOST:-127.0.0.1}:${DC3_AUTH_GRPC_PORT:-9300}:9300" environment: - NODE_ENV=test - - APM_AGENT_ENABLE=false + - APM_AGENT_ENABLE=${APM_AGENT_ENABLE:-false} container_name: dc3-center-auth hostname: dc3-center-auth volumes: @@ -76,7 +76,7 @@ services: - "${DC3_BIND_HOST:-127.0.0.1}:${DC3_MANAGER_GRPC_PORT:-9400}:9400" environment: - NODE_ENV=test - - APM_AGENT_ENABLE=false + - APM_AGENT_ENABLE=${APM_AGENT_ENABLE:-false} container_name: dc3-center-manager hostname: dc3-center-manager volumes: @@ -98,7 +98,7 @@ services: - "${DC3_BIND_HOST:-127.0.0.1}:${DC3_DATA_GRPC_PORT:-9500}:9500" environment: - NODE_ENV=test - - APM_AGENT_ENABLE=false + - APM_AGENT_ENABLE=${APM_AGENT_ENABLE:-false} container_name: dc3-center-data hostname: dc3-center-data volumes: @@ -109,6 +109,32 @@ services: aliases: - dc3-center-data + agentic: + build: + context: ../dc3-center/dc3-center-agentic/ + dockerfile: ./Dockerfile + image: pnoker/dc3-center-agentic:${DC3_IMAGE_TAG:-2026.5} + restart: always + ports: + - "${DC3_BIND_HOST:-127.0.0.1}:${DC3_AGENTIC_PORT:-8600}:8600" + environment: + - NODE_ENV=test + - APM_AGENT_ENABLE=${APM_AGENT_ENABLE:-false} + - OPENAI_BASE_URL=${OPENAI_BASE_URL:-https://api.openai.com} + - OPENAI_API_KEY=${OPENAI_API_KEY:-} + - OPENAI_MODEL=${OPENAI_MODEL:-gpt-4o} + - OPENAI_TEMPERATURE=${OPENAI_TEMPERATURE:-0.7} + - OPENAI_MAX_TOKENS=${OPENAI_MAX_TOKENS:-2048} + container_name: dc3-center-agentic + hostname: dc3-center-agentic + volumes: + - logs:/dc3-center/dc3-center-agentic/dc3/logs + logging: *default-logging + networks: + dc3net: + aliases: + - dc3-center-agentic + listening-virtual: build: context: ../dc3-driver/dc3-driver-listening-virtual/ @@ -120,7 +146,7 @@ services: - "${DC3_BIND_HOST:-127.0.0.1}:${DC3_LISTENING_VIRTUAL_GRPC_PORT:-6271}:6271" environment: - NODE_ENV=test - - APM_AGENT_ENABLE=false + - APM_AGENT_ENABLE=${APM_AGENT_ENABLE:-false} container_name: dc3-driver-listening-virtual hostname: dc3-driver-listening-virtual volumes: @@ -139,7 +165,7 @@ services: restart: always environment: - NODE_ENV=test - - APM_AGENT_ENABLE=false + - APM_AGENT_ENABLE=${APM_AGENT_ENABLE:-false} container_name: dc3-driver-modbus-tcp hostname: dc3-driver-modbus-tcp volumes: @@ -158,7 +184,7 @@ services: restart: always environment: - NODE_ENV=test - - APM_AGENT_ENABLE=false + - APM_AGENT_ENABLE=${APM_AGENT_ENABLE:-false} container_name: dc3-driver-mqtt hostname: dc3-driver-mqtt volumes: @@ -177,7 +203,7 @@ services: restart: always environment: - NODE_ENV=test - - APM_AGENT_ENABLE=false + - APM_AGENT_ENABLE=${APM_AGENT_ENABLE:-false} container_name: dc3-driver-opc-da hostname: dc3-driver-opc-da volumes: @@ -196,7 +222,7 @@ services: restart: always environment: - NODE_ENV=test - - APM_AGENT_ENABLE=false + - APM_AGENT_ENABLE=${APM_AGENT_ENABLE:-false} container_name: dc3-driver-opc-ua hostname: dc3-driver-opc-ua volumes: @@ -215,7 +241,7 @@ services: restart: always environment: - NODE_ENV=test - - APM_AGENT_ENABLE=false + - APM_AGENT_ENABLE=${APM_AGENT_ENABLE:-false} container_name: dc3-driver-plcs7 hostname: dc3-driver-plcs7 volumes: @@ -234,7 +260,7 @@ services: restart: always environment: - NODE_ENV=test - - APM_AGENT_ENABLE=false + - APM_AGENT_ENABLE=${APM_AGENT_ENABLE:-false} container_name: dc3-driver-virtual hostname: dc3-driver-virtual volumes: diff --git a/dc3/docker-compose.yml b/dc3/docker-compose.yml index 1522b5d0b..5601980e3 100644 --- a/dc3/docker-compose.yml +++ b/dc3/docker-compose.yml @@ -29,7 +29,7 @@ services: - "${DC3_BIND_HOST:-127.0.0.1}:${DC3_GATEWAY_PORT:-8000}:8000" environment: - NODE_ENV=test - - APM_AGENT_ENABLE=false + - APM_AGENT_ENABLE=${APM_AGENT_ENABLE:-false} container_name: dc3-gateway hostname: dc3-gateway volumes: @@ -48,7 +48,7 @@ services: - "${DC3_BIND_HOST:-127.0.0.1}:${DC3_AUTH_GRPC_PORT:-9300}:9300" environment: - NODE_ENV=test - - APM_AGENT_ENABLE=false + - APM_AGENT_ENABLE=${APM_AGENT_ENABLE:-false} container_name: dc3-center-auth hostname: dc3-center-auth volumes: @@ -67,7 +67,7 @@ services: - "${DC3_BIND_HOST:-127.0.0.1}:${DC3_MANAGER_GRPC_PORT:-9400}:9400" environment: - NODE_ENV=test - - APM_AGENT_ENABLE=false + - APM_AGENT_ENABLE=${APM_AGENT_ENABLE:-false} container_name: dc3-center-manager hostname: dc3-center-manager volumes: @@ -86,7 +86,7 @@ services: - "${DC3_BIND_HOST:-127.0.0.1}:${DC3_DATA_GRPC_PORT:-9500}:9500" environment: - NODE_ENV=test - - APM_AGENT_ENABLE=false + - APM_AGENT_ENABLE=${APM_AGENT_ENABLE:-false} container_name: dc3-center-data hostname: dc3-center-data volumes: @@ -97,6 +97,29 @@ services: aliases: - dc3-center-data + agentic: + image: pnoker/dc3-center-agentic:${DC3_IMAGE_TAG:-2026.5} + restart: always + ports: + - "${DC3_BIND_HOST:-127.0.0.1}:${DC3_AGENTIC_PORT:-8600}:8600" + environment: + - NODE_ENV=test + - APM_AGENT_ENABLE=${APM_AGENT_ENABLE:-false} + - OPENAI_BASE_URL=${OPENAI_BASE_URL:-https://api.openai.com} + - OPENAI_API_KEY=${OPENAI_API_KEY:-} + - OPENAI_MODEL=${OPENAI_MODEL:-gpt-4o} + - OPENAI_TEMPERATURE=${OPENAI_TEMPERATURE:-0.7} + - OPENAI_MAX_TOKENS=${OPENAI_MAX_TOKENS:-2048} + container_name: dc3-center-agentic + hostname: dc3-center-agentic + volumes: + - logs:/dc3-center/dc3-center-agentic/dc3/logs + logging: *default-logging + networks: + dc3net: + aliases: + - dc3-center-agentic + listening-virtual: image: pnoker/dc3-driver-listening-virtual:${DC3_IMAGE_TAG:-2026.5} restart: always @@ -105,7 +128,7 @@ services: - "${DC3_BIND_HOST:-127.0.0.1}:${DC3_LISTENING_VIRTUAL_GRPC_PORT:-6271}:6271" environment: - NODE_ENV=test - - APM_AGENT_ENABLE=false + - APM_AGENT_ENABLE=${APM_AGENT_ENABLE:-false} container_name: dc3-driver-listening-virtual hostname: dc3-driver-listening-virtual volumes: @@ -121,7 +144,7 @@ services: restart: always environment: - NODE_ENV=test - - APM_AGENT_ENABLE=false + - APM_AGENT_ENABLE=${APM_AGENT_ENABLE:-false} container_name: dc3-driver-modbus-tcp hostname: dc3-driver-modbus-tcp volumes: @@ -137,7 +160,7 @@ services: restart: always environment: - NODE_ENV=test - - APM_AGENT_ENABLE=false + - APM_AGENT_ENABLE=${APM_AGENT_ENABLE:-false} container_name: dc3-driver-mqtt hostname: dc3-driver-mqtt volumes: @@ -153,7 +176,7 @@ services: restart: always environment: - NODE_ENV=test - - APM_AGENT_ENABLE=false + - APM_AGENT_ENABLE=${APM_AGENT_ENABLE:-false} container_name: dc3-driver-opc-da hostname: dc3-driver-opc-da volumes: @@ -169,7 +192,7 @@ services: restart: always environment: - NODE_ENV=test - - APM_AGENT_ENABLE=false + - APM_AGENT_ENABLE=${APM_AGENT_ENABLE:-false} container_name: dc3-driver-opc-ua hostname: dc3-driver-opc-ua volumes: @@ -185,7 +208,7 @@ services: restart: always environment: - NODE_ENV=test - - APM_AGENT_ENABLE=false + - APM_AGENT_ENABLE=${APM_AGENT_ENABLE:-false} container_name: dc3-driver-plcs7 hostname: dc3-driver-plcs7 volumes: @@ -201,7 +224,7 @@ services: restart: always environment: - NODE_ENV=test - - APM_AGENT_ENABLE=false + - APM_AGENT_ENABLE=${APM_AGENT_ENABLE:-false} container_name: dc3-driver-virtual hostname: dc3-driver-virtual volumes: diff --git a/dc3/env/dev.env b/dc3/env/dev.env index bb78984d0..c0fa750e8 100644 --- a/dc3/env/dev.env +++ b/dc3/env/dev.env @@ -20,4 +20,12 @@ MQTT_PASSWORD=dc3dc3dc3 #Grpc CENTER_AUTH_HOST=localhost CENTER_DATA_HOST=localhost -CENTER_MANAGER_HOST=localhost \ No newline at end of file +CENTER_MANAGER_HOST=localhost +CENTER_AGENTIC_HOST=localhost + +# Spring AI +OPENAI_BASE_URL=https://api.openai.com +OPENAI_API_KEY=sk-your-api-key +OPENAI_MODEL=gpt-4o +OPENAI_TEMPERATURE=0.7 +OPENAI_MAX_TOKENS=2048 diff --git a/dc3/env/dev.env.sh b/dc3/env/dev.env.sh index 2ae4ee5fa..96bff1574 100644 --- a/dc3/env/dev.env.sh +++ b/dc3/env/dev.env.sh @@ -44,3 +44,5 @@ export CENTER_AGENTIC_HOST=localhost export OPENAI_BASE_URL=https://api.openai.com export OPENAI_API_KEY=sk-your-api-key export OPENAI_MODEL=gpt-4o +export OPENAI_TEMPERATURE=0.7 +export OPENAI_MAX_TOKENS=2048