Skip to content

环境变量详解 ​

IoT DC3 有两套环境变量文件,读取者完全不同:根目录 .env 给 Docker Compose 做插值,dc3/env/dev.env(.sh) 给本地 Java 进程。读完这页,你能分清哪个变量该写进哪个文件、localhost 端口与容器内端口为何不一样,以及生产前必须改掉的两个密钥默认值。

你在这里:已经从源码本地开发或用 Compose 起栈。下一步看部署模式与镜像源了解整套栈如何拉起。

为什么有两套文件 ​

同一个变量名(如 POSTGRES_HOST),在容器里和在你笔记本上的 Java 进程里,含义不一样。容器之间靠 Compose 网络上的服务名( dc3-postgres)互访;而你本地 IDE 里跑的 Java 进程在宿主机上,只能通过 Compose 发布到宿主机的端口(如 localhost:35432 )连进去。两套文件就是为这两条互不重叠的路径准备的——混用会让本地进程去连一个解析不了的容器名,或让容器去连一个它根本看不到的 localhost。

文件读取者用途注入方式
.env.exampleDocker Compose 模板复制为根目录 .env,定义镜像仓库、镜像标签、发布端口Compose 变量插值
.envDocker Compose本机未跟踪配置,供 dc3/docker-compose*.yml 插值Compose 变量插值
dc3/env/dev.envIDE(EnvFile 插件)本地 Java 进程环境变量,不带 exportIDE EnvFile 插件读取
dc3/env/dev.env.shShell本地 Java 进程环境变量,带 export,用 source 加载Shell 环境注入

根 .env 不会注入本地 Java 进程

根目录 .env 只服务 Docker Compose,不会自动注入到本地 IDE/命令行启动的 Java 进程。本地源码运行必须用 dc3/env/dev.env(.sh),让进程指向 Compose 发布在 localhost 上的依赖端口。在根 .env 里写 POSTGRES_HOST=localhost 也不会改变任何容器的运行时环境。

两条互不注入的路径 ​

下图说明两套文件如何沿各自路径生效。关键是这两条路径互不交叉:Compose 不读 dev.env.sh,本地 Java 进程也不自动读根 .env。

Compose 路径 · 容器世界本地 Java 路径 · 宿主机世界互不注入 —— 两条路径互不交叉cp 复制Compose 插值源EnvFile 插件source 加载插值渲染服务名解析环境变量注入指向 localhost容器别名互访★ localhost 发布端口.env.example仓库内模板.env (根目录)本机未跟踪 · Compose 插值同内容 · 两种注入方式dc3/env/dev.envIDE EnvFile 插件 · 无 exportdc3/env/dev.env.shShell source · 带 exportpodman compose / makedocker-compose*.yml 变量插值容器服务仅 environment / env_file 显式引用的变量注入容器内互访dc3-postgres:5432 · dc3-rabbitmq:5672IDE / java -jarRun Config 挂 EnvFile 或 shell 环境本地 Java 进程auth / manager / data / agentic / driver经发布端口接入localhost:35432 · localhost:35672dc3-postgresinternal: dc3-postgres:5432host ★ localhost:35432dc3-rabbitmqinternal: dc3-rabbitmq:5672host ★ localhost:35672根 .env 不会自动注入本地 Java 进程 —— 在里面写 POSTGRES_HOST=localhost 不影响任何容器,也不会被 IDE 读到dc3/env/dev.env(.sh) 不被 Compose 读取 —— 两套文件用途不同,不是同一个文件,别互相复制本地 Java 路径Compose 路径容器服务依赖容器模板文件边界 / 禁区

host 端口与 internal 端口的对应关系,是理解这张图的核心:

依赖host(本地进程用)internal(容器互访用)
PostgreSQLlocalhost:35432dc3-postgres:5432
RabbitMQ AMQPlocalhost:35672dc3-rabbitmq:5672
EMQX MQTTlocalhost:31883dc3-emqx:1883(EMQX 默认内部端口)

怎么用 ​

Compose 起栈 ​

先从模板创建本地 .env,再用 make 拉起(Makefile 的 COMPOSE 自动探测,docker compose 优先;也可用 COMPOSE='podman compose' 显式指定):

bash
cp .env.example .env
make up-db && make up-optional && make up-dev
bash
cp .env.example .env
podman compose -f dc3/docker-compose-dev.yml up -d   # 拉起 dev 栈
podman compose -f dc3/docker-compose-dev.yml config --quiet   # 仅校验配置、不拉起

根 .env 的变量用于 compose 文件插值,例如镜像与发布端口:

yaml
image: ${DC3_IMAGE_REGISTRY:-pnoker}/dc3-gateway:${DC3_IMAGE_TAG:-2026.9}
ports:
  - "${DC3_BIND_HOST:-127.0.0.1}:${DC3_GATEWAY_PORT:-8000}:8000"

Compose 不会把 .env 里每个变量都注入每个容器——只有 compose 文件通过 environment、env_file 显式引用的变量才会进入容器。

本地源码运行 ​

从命令行启动 Java 进程前先 source:

bash
source dc3/env/dev.env.sh

不加载时,本地进程会回退到容器内服务名(dc3-postgres、dc3-rabbitmq、dc3-center-manager)或默认端口,从而连不上本机依赖。JetBrains IDEA 用户改用 dc3/env/dev.env(同样内容、无 export):安装 EnvFile 插件 → 在 Run Configuration 启用 EnvFile → 添加 dc3/env/dev.env。不要把 .env.example 直接当作 IDEA 环境变量文件——它是 Compose 模板,不是 Java 运行时配置。

运行 profile:dev / test / pre / pro ​

NODE_ENV 决定每个服务加载哪份 application-<env>.yml。四档差异不大,但每档都有明确用途:

profile谁在用日志OpenAPI / Swagger密钥闸门MQ 名字前缀
dev本地 IDE / make devDEBUG(io.github.pnoker)开不生效dev_<用户名>.
test所有 Compose 栈的默认DEBUG开不生效无
pre预发默认 INFO开生效(AUTH_HMAC_SECRET 为空或默认值时拒绝启动)无
pro生产默认 INFO关(springdoc 端点不存在)生效无

三个名字相近的变量各管一件事,别混:

  • NODE_ENV:选 profile(Compose 栈默认 test,dev.env 里是 dev);
  • SPRING_ENV:直接指定 spring.env,优先级高于 profile yml,主要影响 MQ 前缀与密钥闸门判定(native 镜像里被烘成 test,见消息总线拓扑);
  • SPRING_GROUP:MQ 前缀里的组名,默认取 OS 用户名。

按场景分组的关键变量 ​

下面按"为某个场景实际需要"的角度分组列出关键变量。完整长表在文末 ::: details 折叠,这里只列你会真正改动或排错时查的那些。变量的 Scope 三类含义:Runtime(本地或容器内 Java 进程都读)、Compose only(仅根 .env 给 Compose)、Per-process(单服务覆盖)。

安全密钥(Runtime) ​

两个密钥是平台的身份根。它们自带默认值仅为方便首次启动,绝不可带进生产。注意 .env.example 有意不设置这两个密钥:本地源码运行由 dc3/env/dev.env 提供 dev 专属值;dev/single 栈的 compose 文件带 dev 回退默认(下表"默认值"即该回退);app/scale/swarm 栈要求在根 .env 显式设置,否则拒绝启动。

变量默认值(dev 栈回退)用途
DC3_SECURITY_KEYdc3.security.key.2026.io.github.pnoker鉴权中心生成/校验登录 Token 的签名密钥
AUTH_HMAC_SECRETio.github.pnoker.dc3Gateway 向后端服务签名 X-Auth-Principal 的 HMAC-SHA256 密钥

生产必须改成强随机值,且切勿提交/打印

DC3_SECURITY_KEY 与 AUTH_HMAC_SECRET 自带默认值,生产环境必须改成强随机值,切勿提交进仓库、写入日志或打印真实密钥。当 Spring profile 为 pre/pro 且 AUTH_HMAC_SECRET 为空或仍等于默认值 io.github.pnoker.dc3 时,服务会 fail-fast 抛 IllegalStateException 拒绝启动——这是有意为之的安全闸门,不要绕过。

PostgreSQL(Runtime) ​

本地进程连 localhost:35432;容器内连 dc3-postgres:5432。POSTGRES_SCHEMA 只在单服务进程里做 schema 覆盖(如 dc3_manager、dc3_data),不要全局设。

变量默认值Scope用途
POSTGRES_HOSTlocalhostRuntime本地用 localhost,容器内用 dc3-postgres
POSTGRES_PORT35432Runtimehost 发布端口;internal 为 5432
POSTGRES_USERNAMEdc3Runtime用户名
POSTGRES_PASSWORDdc3dc3dc3Runtime密码
POSTGRES_DBdc3Runtime数据库名
POSTGRES_SCHEMA(未设)Per-process单服务 schema 覆盖
DC3_POSTGRES_PORT35432Compose only容器发布到宿主机的端口

RabbitMQ(Runtime) ​

AMQP host 端口 35672,internal 5672。开启 TLS 时内部端口切到 5671。

变量默认值Scope用途
RABBITMQ_HOSTlocalhostRuntime本地 localhost,容器内 dc3-rabbitmq
RABBITMQ_PORT35672RuntimeAMQP host 端口;internal 5672
RABBITMQ_USERNAMEdc3Runtime用户名
RABBITMQ_PASSWORDdc3dc3dc3Runtime密码
RABBITMQ_VIRTUAL_HOSTdc3Runtimevirtual host
RABBITMQ_SSL_ENABLEDfalseRuntime启用 TLS(true 时走 5671)
DC3_RABBITMQ_PORT35672Compose onlyAMQP 发布端口
DC3_RABBITMQ_MANAGEMENT_PORT15672Compose only管理界面发布端口

消息中间件选择(Runtime) ​

内部异步平面(位号值、命令)的消息载体由 DC3_MQ_TYPE 选择,默认 rabbitmq。选了非 rabbitmq 载体时才会读取对应的连接变量;下表默认值面向 Compose 网络内的服务名,本地源码运行的默认值见 dc3/env/dev.env(如 Kafka 用 localhost:9092)。

变量默认值用途
DC3_MQ_TYPErabbitmq异步平面载体:rabbitmq / kafka / pulsar / mqtt
DC3_MQ_KAFKA_BOOTSTRAPkafka:9092Kafka bootstrap 地址(DC3_MQ_TYPE=kafka 时读取)
DC3_MQ_PULSAR_URLpulsar://pulsar:6650Pulsar 服务 URL(DC3_MQ_TYPE=pulsar 时读取)
DC3_MQ_MQTT_HOSTdc3-rabbitmqMQTT 载体主机(DC3_MQ_TYPE=mqtt 时读取)
DC3_MQ_MQTT_PORT1883MQTT 载体端口(DC3_MQ_TYPE=mqtt 时读取)

EMQX / MQTT(Runtime) ​

MQTT broker host 端口 31883。EMQX 还发布 WebSocket、Dashboard 等多个端口,详见折叠长表。

变量默认值Scope用途
MQTT_BROKER_HOSTlocalhostRuntimebroker 主机
MQTT_BROKER_PORT31883Runtimebroker 端口(EMQX 发布;internal 为 1883)
MQTT_USERNAMEdc3Runtime用户名
MQTT_PASSWORDdc3dc3dc3Runtime密码
DC3_EMQX_MQTT_PORT31883Compose onlyMQTT 发布端口
DC3_EMQX_DASHBOARD_PORT18083Compose onlyDashboard 发布端口

gRPC / facade(Runtime) ​

中心服务之间通过 facade 互联。目标中心的 facade 实现按 dc3.facade.{auth,manager,data}.mode 逐目标择一(缺省即 grpc, local 为同进程直调,见 Facade 模式),本地进程用 CENTER_*_HOST 指到 localhost。

变量默认值Scope用途
CENTER_AUTH_HOSTlocalhostRuntime鉴权中心主机
CENTER_MANAGER_HOSTlocalhostRuntime管理中心主机
CENTER_DATA_HOSTlocalhostRuntime数据中心主机
CENTER_AGENTIC_HOSTlocalhostRuntime智能中心主机
DC3_FACADE_AUTH_MODEgrpcRuntime鉴权中心 facade 模式(grpc/local/disabled)
DC3_FACADE_MANAGER_MODEgrpcRuntime管理中心 facade 模式
DC3_FACADE_DATA_MODEgrpcRuntime数据中心 facade 模式
DC3_FACADE_GRPC_DEADLINE_MS3000RuntimegRPC 单次请求 deadline,0 关闭客户端 deadline

DC3_FACADE_MODE 是无效遗留

.env.example 里的 DC3_FACADE_MODE 没有任何代码读取(真实配置键是按目标分的 dc3.facade.{auth,manager,data}.mode, env 形态即上表三行);它只是历史遗留条目,改它不生效。

网关与服务端口(Compose only) ​

网关是唯一对外 HTTP 入口(8000)。各中心 HTTP/gRPC 发布端口如下;SERVER_PORT/GRPC_SERVER_PORT 仅在本地同时跑多个服务、需要错开端口时作单进程覆盖。

变量默认值Scope用途
DC3_GATEWAY_PORT8000Compose only网关 HTTP 发布端口(入口)
DC3_AUTH_PORT8300Compose only鉴权中心 HTTP
DC3_MANAGER_PORT8400Compose only管理中心 HTTP
DC3_DATA_PORT8500Compose only数据中心 HTTP
DC3_AGENTIC_PORT8600Compose only智能中心 HTTP
DC3_AUTH_GRPC_PORT9300Compose only鉴权中心 gRPC
DC3_MANAGER_GRPC_PORT9400Compose only管理中心 gRPC
DC3_DATA_GRPC_PORT9500Compose only数据中心 gRPC
DC3_LISTENING_VIRTUAL_TCP_PORT6270Compose onlyListening Virtual 驱动 TCP 发布
DC3_LISTENING_VIRTUAL_UDP_PORT6271Compose onlyListening Virtual 驱动 UDP 发布(当前实际按 TCP 发布)
DC3_SINGLE_PORT8100Compose only单中心模式 HTTP 发布端口
DC3_SINGLE_GRPC_PORT9100Compose only单中心模式 gRPC 发布端口
DC3_WEB_HTTP_PORT8080Compose onlyWeb 控制台 HTTP 发布端口
DC3_WEB_HTTPS_PORT8443Compose onlyWeb 控制台 HTTPS 发布端口
SERVER_PORT(未设)Per-process单服务 HTTP 端口覆盖
GRPC_SERVER_PORT(未设)Per-process单中心 gRPC 端口覆盖

DC3_LISTENING_VIRTUAL_*_PORT 是宿主机发布端口

DC3_LISTENING_VIRTUAL_TCP_PORT/DC3_LISTENING_VIRTUAL_UDP_PORT 是 Compose 发布到宿主机的端口;进程内部端口用 TCP_PORT/UDP_PORT(Per-process),两者别混。另注意 6271 意图是 UDP 通道,但当前发布点未声明 /udp,实际按 TCP 发布。

Web 控制台与网关 OAuth(Compose only) ​

Web 控制台(dc3-web)经 nginx 反代把 API 请求转给网关;网关的 API 路由默认走内部鉴权头,也可切换为 OAuth RS256 票据模式。

变量默认值用途
APP_API_HOSTdc3-gatewayWeb 控制台反代指向的网关主机(nginx upstream)
APP_API_PORT8000Web 控制台反代指向的网关端口
DC3_GATEWAY_OAUTH_ENABLEDfalse网关 API 路由是否启用 OAuth RS256 票据模式
DC3_GATEWAY_OAUTH_JWKS_URLhttp://dc3-center-auth:8300/auth/oauth2/jwksOAuth JWKS 地址(指向鉴权中心)

Agentic / AI(Runtime) ​

仅当 dc3_model_provider 没有配置可用提供方时,才回退到这组 AGENTIC_FALLBACK_OPENAI_*。会话记忆默认开启(.env.example 与代码内回退默认一致)。主密钥、传输限流和附件配额这几组变量是 2026.10 加进来的,各自的含义在 Agentic 中心的安全清单里讲。

变量默认值用途
AGENTIC_FALLBACK_OPENAI_BASE_URLhttps://api.openai.comfallback OpenAI 兼容 API 地址
AGENTIC_FALLBACK_OPENAI_API_KEY(空)fallback API key(端点需鉴权时填)
AGENTIC_FALLBACK_OPENAI_MODELgpt-4ofallback 模型名
AGENTIC_FALLBACK_OPENAI_TEMPERATURE0.7采样温度(0.0–2.0)
AGENTIC_FALLBACK_OPENAI_MAX_TOKENS2048最大输出 token
AGENTIC_MEMORY_SCHEMA_INITneverSpring AI JDBC 记忆表初始化模式(always/never/create_if_not_exists)
AGENTIC_MEMORY_ENABLEDtrue是否启用持久化会话记忆
AGENTIC_TOOL_CALLING_ENABLEDtrue是否启用工具调用
AGENTIC_MEMORY_MAX_MESSAGES50每个对话窗口保留的最大消息数
AGENTIC_ATTACHMENT_STORAGE_PATHdc3/data/agentic/attachments附件存储路径
DC3_AGENTIC_MASTER_KEY(空)provider API key 落库加密的 AES-256-GCM 主密钥(Base64 256 位;空则从 DC3_SECURITY_KEY 派生,生产必须显式设置)
AGENTIC_TRANSPORT_ACQUIRE_TIMEOUT_SECONDS30等待模型并发槽位的秒数,超时按 UNAVAILABLE 报错而非无限排队
AGENTIC_TRANSPORT_GLOBAL_MAX_CONCURRENT_REQUESTS16全局在途模型请求上限(兜底模型与未缓存配置)
AGENTIC_TRANSPORT_FALLBACK_ENABLEDfalse平台级兜底模型开关(生产保持关闭:它绕过按租户核算)
AGENTIC_TRANSPORT_PER_TENANT_QPS0每租户每秒聊天请求数,0 关闭
AGENTIC_TRANSPORT_CACHE_TTL_SECONDS300provider / 模型 / 客户端进程内缓存 TTL(秒)
AGENTIC_CHECK_CACHE_MAXIMUM_SIZE256连通性检查结果缓存上限(条)
AGENTIC_ATTACHMENT_ALLOWED_EXTENSIONSpng,jpg,jpeg,gif,webp,csv,txt,json,md,pdf附件扩展名白名单(任何字节落盘前校验)
AGENTIC_ATTACHMENT_TENANT_MAX_COUNT2000每租户附件数量上限
AGENTIC_ATTACHMENT_TENANT_MAX_BYTES1073741824每租户附件总字节上限(默认 1 GiB)
AGENTIC_ATTACHMENT_NAME_MAX_LENGTH128附件文件名最大长度(字符)

AGENTIC_MEMORY_SCHEMA_INIT 的建表绑定以代码为准

AGENTIC_MEMORY_SCHEMA_INIT 默认 never,意在控制记忆表初始化模式。但该变量经 compose 注入容器后,仓库内未见 application*.yml 把它绑定到 Spring AI 的 initialize-schema;记忆表实际由 initdb 脚本预建。是否真能通过设为 always 触发自动建表,请以代码为准,不要当成已接线的可用开关。

真实 API key 不进文档/日志/提交历史

AGENTIC_FALLBACK_OPENAI_API_KEY 等敏感值绝不能写入文档、日志或提交历史。正式提供方应配置在 dc3_model_provider 表,fallback 仅作兜底。

AGENTIC_ATTACHMENT_STORAGE_PATH 在 .env.example 与代码内回退默认不一致

上表 AGENTIC_ATTACHMENT_STORAGE_PATH(dc3/data/agentic/attachments)取自 .env.example——走 cp .env.example .env

  • source 路径时会被显式注入该值。但 application-agentic.yml 的代码内回退默认是 dc3/data/upload/agentic/attachment。 不走 .env.example 路径时以代码为准。其余各行(含 AGENTIC_MEMORY_ENABLED=true)两处默认一致。

批处理与消费(Runtime) ​

MQTT 上报与位号值落库各有一组批处理参数。位号值按"批量条数 + 接收超时"双阈值刷批——POINT_BATCH_SIZE 条或 POINT_BATCH_RECEIVE_TIMEOUT_MILLIS 毫秒先到先刷;并发消费与失败重试由 POINT_CONCURRENT_CONSUMERS 等参数控制。

变量默认值用途
MQTT_BATCH_SPEED100MQTT 批量大小阈值(条/批)
MQTT_BATCH_INTERVAL5MQTT 批处理间隔(秒)
POINT_BATCH_SIZE500位号值批量大小阈值(条/批)
POINT_BATCH_RECEIVE_TIMEOUT_MILLIS100位号值接收超时(毫秒,与批量阈值先到先刷)
POINT_CONCURRENT_CONSUMERS4位号值初始并发消费者数
POINT_MAX_CONCURRENT_CONSUMERS16位号值最大并发消费者数
POINT_PREFETCH_COUNT1000每个消费者预取条数
POINT_RETRY_MAX_RETRIES3消费失败最大重试次数
POINT_RETRY_INITIAL_INTERVAL_MILLIS1000重试初始间隔(毫秒)
POINT_RETRY_MULTIPLIER2重试间隔乘数
POINT_RETRY_MAX_INTERVAL_MILLIS10000重试最大间隔(毫秒)

MQTT 侧仍是"数量阈值 + 间隔"一对参数,按 MQTT_BATCH_INTERVAL 秒定时把累积缓冲一次性刷出。

镜像源(Compose only) ​

中国大陆网络可把 REGISTRY 设为 cn 走阿里云镜像。注意:Makefile 读 REGISTRY,Compose 插值读 DC3_IMAGE_REGISTRY ,两者各管一段。

变量默认值用途
REGISTRYautoMakefile 镜像源选择器(仅接受 auto/global/cn,其它值会报错)
DC3_IMAGE_REGISTRYpnoker镜像命名空间
DC3_IMAGE_TAG2026.9所有服务/依赖镜像标签
DC3_BASE_TAG2026.10依赖镜像所基于的 dc3-docker 基础镜像线(独立于 DC3_IMAGE_TAG)
DC3_VERSIONlatestWeb 控制台镜像版本(dc3-web 只发布 latest 与正式版本)
DC3_BIND_HOST127.0.0.1发布端口绑定地址(0.0.0.0 对外)

可观测性(Compose only / Runtime) ​

可选栈(EMQX、ELK、Prometheus、Grafana)通过 make up-optional 拉起,端口与 JVM 参数如下。

变量默认值Scope用途
GF_SERVER_ROOT_URLhttp://localhost:3000RuntimeGrafana 对外 root URL
DC3_GRAFANA_PORT3000Compose onlyGrafana 发布端口
DC3_KIBANA_PORT5601Compose onlyKibana 发布端口
DC3_ES_JAVA_OPTS-Xms512m -Xmx512mRuntimeElasticsearch JVM 堆
DC3_LS_JAVA_OPTS-Xms256m -Xmx256mRuntimeLogstash JVM 堆
APM_AGENT_ENABLEfalseRuntime是否启用 Java APM agent
DC3_JAEGER_UI_PORT16686Compose onlyJaeger UI 发布端口
DC3_JAEGER_OTLP_GRPC_PORT4317Compose onlyJaeger OTLP gRPC 发布端口
DC3_JAEGER_OTLP_HTTP_PORT4318Compose onlyJaeger OTLP HTTP 发布端口
完整变量参考(折叠)

Security & Authentication(Runtime) ​

变量默认值用途
DC3_SECURITY_KEYdc3.security.key.2026.io.github.pnoker登录 Token 签名密钥
AUTH_HMAC_SECRETio.github.pnoker.dc3X-Auth-Principal HMAC-SHA256 密钥

PostgreSQL ​

变量默认值Scope
POSTGRES_HOSTlocalhostRuntime
POSTGRES_PORT35432Runtime
POSTGRES_USERNAMEdc3Runtime
POSTGRES_PASSWORDdc3dc3dc3Runtime
POSTGRES_DBdc3Runtime
POSTGRES_SCHEMA(未设)Per-process
DC3_POSTGRES_PORT35432Compose only

RabbitMQ ​

变量默认值Scope
RABBITMQ_HOSTlocalhostRuntime
RABBITMQ_PORT35672Runtime
RABBITMQ_USERNAMEdc3Runtime
RABBITMQ_PASSWORDdc3dc3dc3Runtime
RABBITMQ_VIRTUAL_HOSTdc3Runtime
RABBITMQ_MQTT_EXCHANGEdc3.e.mqttRuntime
RABBITMQ_SSL_ENABLEDfalseRuntime
RABBITMQ_SSL_ALGORITHMTLSRuntime
RABBITMQ_SSL_VALIDATE_SERVER_CERTIFICATEfalseRuntime
RABBITMQ_SSL_VERIFY_HOSTNAMEfalseRuntime
RABBITMQ_CONTAINER_PORT5672Runtime
DC3_RABBITMQ_PORT35672Compose only
DC3_RABBITMQ_TLS_PORT35671Compose only
DC3_RABBITMQ_MANAGEMENT_PORT15672Compose only

消息中间件选择 ​

变量默认值Scope
DC3_MQ_TYPErabbitmqRuntime
DC3_MQ_KAFKA_BOOTSTRAPkafka:9092Runtime
DC3_MQ_PULSAR_URLpulsar://pulsar:6650Runtime
DC3_MQ_MQTT_HOSTdc3-rabbitmqRuntime
DC3_MQ_MQTT_PORT1883Runtime

EMQX / MQTT ​

变量默认值Scope
MQTT_BROKER_HOSTlocalhostRuntime
MQTT_BROKER_PORT31883Runtime
MQTT_USERNAMEdc3Runtime
MQTT_PASSWORDdc3dc3dc3Runtime
MQTT_BATCH_SPEED100Runtime
MQTT_BATCH_INTERVAL5Runtime
DC3_EMQX_WS_PORT38083Compose only
DC3_EMQX_WSS_PORT38084Compose only
DC3_EMQX_MQTT_PORT31883Compose only
DC3_EMQX_MQTTS_PORT38883Compose only
DC3_EMQX_DASHBOARD_PORT18083Compose only

gRPC / facade ​

变量默认值Scope
CENTER_AUTH_HOSTlocalhostRuntime
CENTER_MANAGER_HOSTlocalhostRuntime
CENTER_DATA_HOSTlocalhostRuntime
CENTER_AGENTIC_HOSTlocalhostRuntime
DC3_FACADE_AUTH_MODEgrpcRuntime
DC3_FACADE_MANAGER_MODEgrpcRuntime
DC3_FACADE_DATA_MODEgrpcRuntime
DC3_FACADE_GRPC_DEADLINE_MS3000Runtime
DC3_AUTH_GRPC_PORT9300Compose only
DC3_MANAGER_GRPC_PORT9400Compose only
DC3_DATA_GRPC_PORT9500Compose only

HTTP Gateway & 服务端口 ​

变量默认值Scope
DC3_GATEWAY_PORT8000Compose only
DC3_AUTH_PORT8300Compose only
DC3_MANAGER_PORT8400Compose only
DC3_DATA_PORT8500Compose only
DC3_AGENTIC_PORT8600Compose only
SERVER_PORT(未设)Per-process
GRPC_SERVER_PORT(未设)Per-process
DC3_LISTENING_VIRTUAL_TCP_PORT6270Compose only
DC3_LISTENING_VIRTUAL_UDP_PORT6271Compose only
DC3_SINGLE_PORT8100Compose only
DC3_SINGLE_GRPC_PORT9100Compose only
DC3_WEB_HTTP_PORT8080Compose only
DC3_WEB_HTTPS_PORT8443Compose only
TCP_PORT(未设)Per-process
UDP_PORT(未设)Per-process
GATEWAY_ROUTE_AUTH_TOKEN_URI(未设)Per-process
GATEWAY_ROUTE_AUTH_URI(未设)Per-process
GATEWAY_ROUTE_MANAGER_URI(未设)Per-process
GATEWAY_ROUTE_DATA_URI(未设)Per-process
GATEWAY_ROUTE_AGENTIC_URI(未设)Per-process

Web 控制台与网关 OAuth ​

变量默认值Scope
APP_API_HOSTdc3-gatewayCompose only
APP_API_PORT8000Compose only
DC3_GATEWAY_OAUTH_ENABLEDfalseCompose only
DC3_GATEWAY_OAUTH_JWKS_URLhttp://dc3-center-auth:8300/auth/oauth2/jwksCompose only

Agentic / AI(Runtime) ​

变量默认值
AGENTIC_FALLBACK_OPENAI_BASE_URLhttps://api.openai.com
AGENTIC_FALLBACK_OPENAI_API_KEY(空)
AGENTIC_FALLBACK_OPENAI_MODELgpt-4o
AGENTIC_FALLBACK_OPENAI_TEMPERATURE0.7
AGENTIC_FALLBACK_OPENAI_MAX_TOKENS2048
AGENTIC_MEMORY_SCHEMA_INITnever
AGENTIC_MEMORY_ENABLEDtrue
AGENTIC_MEMORY_MAX_MESSAGES50
AGENTIC_TOOL_CALLING_ENABLEDtrue
AGENTIC_ATTACHMENT_STORAGE_PATHdc3/data/agentic/attachments

批处理与消费 / 驱动租约 / 镜像 / 可观测性 ​

变量默认值Scope
POINT_BATCH_SIZE500Runtime
POINT_BATCH_RECEIVE_TIMEOUT_MILLIS100Runtime
POINT_CONCURRENT_CONSUMERS4Runtime
POINT_MAX_CONCURRENT_CONSUMERS16Runtime
POINT_PREFETCH_COUNT1000Runtime
POINT_RETRY_MAX_RETRIES3Runtime
POINT_RETRY_INITIAL_INTERVAL_MILLIS1000Runtime
POINT_RETRY_MULTIPLIER2Runtime
POINT_RETRY_MAX_INTERVAL_MILLIS10000Runtime
DC3_DRIVER_LEASE_SECONDS30Runtime
DC3_DRIVER_LEASE_RENEW_CRON0/10 * * * * ?Runtime
DC3_DRIVER_LEASE_QUEUE_EXPIRES_MILLIS300000Runtime
REGISTRYautoCompose only
DC3_IMAGE_REGISTRYpnokerCompose only
DC3_IMAGE_TAG2026.9Compose only
DC3_BASE_TAG2026.10Compose only
DC3_VERSIONlatestCompose only
DC3_LOG_MAX_SIZE10MCompose only
DC3_LOG_MAX_FILE20Compose only
DC3_BIND_HOST127.0.0.1Compose only
GF_SERVER_ROOT_URLhttp://localhost:3000Runtime
DC3_GRAFANA_PORT3000Compose only
DC3_KIBANA_PORT5601Compose only
DC3_ES_JAVA_OPTS-Xms512m -Xmx512mRuntime
DC3_LS_JAVA_OPTS-Xms256m -Xmx256mRuntime
APM_AGENT_ENABLEfalseRuntime
DC3_JAEGER_UI_PORT16686Compose only
DC3_JAEGER_OTLP_GRPC_PORT4317Compose only
DC3_JAEGER_OTLP_HTTP_PORT4318Compose only
NODE_ENVdevRuntime

约束与常见误区 ​

  • 改 .env.example 不会影响运行——必须先 cp .env.example .env。
  • dc3/env/dev.env 与根 .env 用途不同,不是同一个文件,别互相复制。
  • 服务发布端口统一用 DC3_*_PORT;进程内部仍用 SERVER_PORT、GRPC_SERVER_PORT 等 Spring Boot 原生命名。
  • Per-process 变量(POSTGRES_SCHEMA、SERVER_PORT、TCP_PORT 等)只作单服务覆盖,不要全局滥用。
  • Compose 应用栈可以用与本地源码不同的 NODE_ENV。

延伸阅读 ​

基于 AGPL-3.0 协议发布