From 34981c30a78e8bbd7791131059a9210f9928b62c Mon Sep 17 00:00:00 2001
From: 刘光辉 <347230014@qq.com>
Date: 星期四, 17 九月 2026 09:24:09 +0800
Subject: [PATCH] Merge remote-tracking branch 'origin/master' into master

---
 docker-compose.yml |  643 ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
 1 files changed, 643 insertions(+), 0 deletions(-)

diff --git a/docker-compose.yml b/docker-compose.yml
new file mode 100644
index 0000000..a7e1481
--- /dev/null
+++ b/docker-compose.yml
@@ -0,0 +1,643 @@
+# JNPF 鍏ㄦ爤涓�閿惎鍔� = 寰湇鍔� + 鍩虹璁炬柦锛圧edis/PG锛�+ 鍓嶇 cx-web锛屾湰鍦�/鏈嶅姟鍣ㄥ悓涓�浠界紪鎺�
+# 锛圧ocketMQ 宸蹭簬 2026-08-10 绉婚櫎锛屼簨浠舵�荤嚎鏀� Redis pub/sub锛岃琛ヤ竵 #10锛�
+#
+# 鍦板潃鎷撴墤涓夊眰瑙勫垯锛堣瑙� docs/docker-compose-guide.md锛夛細
+#   閰嶇疆/鍙戠幇锛堣ˉ涓� #8 璧凤級锛氶暅鍍忕儳鍏� config/shared 闈欐�侀厤缃� + SimpleDiscoveryClient 闈欐�佸疄渚嬪垪琛紝
+#     鏃犵嫭绔嬫敞鍐�/閰嶇疆涓績瀹瑰櫒锛汥ubbo LogProvider 鏀� registry-less 鐩磋繛 dubbo://cx-platform:20880锛堝師 cx-system锛�2026-08-11 鑱氬悎锛�
+#   鏁版嵁闈紙涓氬姟鈫扨G/Redis锛夛細鏈湴涓庝氦浠樹竴鑷�=鏈嶅姟鍚嶇洿杩�
+#     cx-postgres:5432 绛夛紙release-checklist 搂0.10锛�
+#   瀵瑰瀹e憡锛圓piDomain锛夛細cx-infra锛堟祻瑙堝櫒+鍚庣鍙屾秷璐规柟锛涙湰鍦� hosts + 瀹瑰櫒 extra_hosts 鍙屼晶瑙f瀽锛�
+#
+# 鍓嶆彁锛�
+#   1. 瀹夸富 /etc/hosts 鍚��127.0.0.1 cx-infra銆嶏紙鏈満浠g悊杞欢椤诲姞 cx-infra 鐩磋繛瑙勫垯锛孡026锛�
+#   2. 鏋勫缓鍓嶅厛鎵撳寘锛歮vn clean package -DskipTests
+#   3. 搴撳湪鍝敱 .env 鐨� CUSTOMER_DB_HOST 鍐冲畾锛屼袱绉嶅舰鎬侊細
+#      杩滅瀹㈡埛搴擄紙寮�鍙戞満/娴嬭瘯鐜锛孋USTOMER_DB_HOST=YOUR_DB_HOST锛夛細鏈満涓嶈捣 PG锛屼粈涔堥兘涓嶇敤鍑嗗
+#      鏍堝唴 PG锛堜氦浠�/姝e紡锛孋USTOMER_DB_HOST=cx-postgres锛夛細.env 璁� COMPOSE_PROFILES=localdb锛�
+#        涓斿叏鏂版満鍣ㄥ厛 docker volume create postgres_pgdata 骞剁亴鏁版嵁锛堣 docker/postgres/migration/锛�
+#   4. 瀹夸富涓婁笉鑳芥湁鍚岀鍙h繘绋嬶紙鏃� nohup 鏈嶅姟 / Homebrew redis 鍧囬』鍋滐級
+#
+# 鍩虹璁炬柦闀滃儚缁熶竴 linux/amd64 + 鍗庝负浜� SWR 婧愶紙swr.cn-north-4.myhuaweicloud.com/ddn-k8s/...锛夛細
+#   鏈湴 Apple Silicon 缁� Rosetta 璺戯紝x86 鏈嶅姟鍣ㄥ師鐢燂紱涓�浠� compose 涓や晶闆跺樊寮�
+#
+# 鈿狅笍 绗笁鏂瑰熀纭�璁炬柦闀滃儚鍦ㄦ湰鏂囦欢閲岀敤**鐭悕**锛坈x-redis 绛夛級锛�
+#   瀹冧滑鏄� `make pull-infra` 浠庝笂杩� SWR 闀垮悕 retag 鍑烘潵鐨勬湰鍦板埆鍚嶏紙docker tag 鍙寕鍒悕銆�
+#   涓嶅鍒舵暟鎹級銆�**鍥犳瑁� `docker compose pull` 鎷変笉鍒板畠浠�**鈥斺�旀湰鍦版病鏈夎繖浜� tag 鏃�
+#   Docker 浼氬幓 docker.io 鎵句笉瀛樺湪鐨� library/cx-redis銆傝捣鏍堜竴寰嬭蛋 `make up`
+#   锛堝叾 images 鐩爣宸插惈 pull-infra锛夋垨绂荤嚎鍖呯殑 `make load`銆俻reflight 浼氬湪 up 鍓嶆嫤鎴己澶便��
+#
+# 绔彛绛栫暐锛圔acklog A 瀹夊叏鍔犲浐锛�2026-07-17锛汢acklog F 澧� 80锛夛細
+#   鏈枃浠�=浜や粯鍩虹嚎锛屽彂甯� cx-web 80锛堥〉闈㈠叆鍙o級+ gateway 30000锛圓PI/ApiDomain 鐩磋繛鍙o級锛�
+#   鍏朵綑绔彛锛圥G/Redis/寮曟搸/涓氬姟璋冭瘯鍙o級鍦� docker-compose.override.yml锛堟湰鍦板紑鍙戠敤锛宑ompose 鑷姩鍚堝苟锛屼氦浠樺寘涓嶅惈锛夈��
+#   浜や粯鐜鏁版嵁闈㈡湇鍔″悕鐩磋繛锛堣 docs/release-checklist.md 搂0锛夛紝涓嶄緷璧� hairpin 鍙戝竷绔彛銆�
+#
+# 鍑嵁绛栫暐锛氬瘑鐮�/瀵嗛挜涓�寰嬬粡 .env 娉ㄥ叆锛�${VAR:?} 蹇呭~锛岀己澶辨椂 compose 鐩存帴鎶ラ敊锛夛紝浠撳簱鍙暀 .env.example 鍗犱綅銆�
+#
+# 鐢ㄦ硶锛�
+#   cp .env.example .env                           # 棣栨锛涙湰鍦伴粯璁ゅ�煎彲鐩存帴鐢紝浜や粯蹇呴』鏀瑰��
+#   docker compose build && docker compose up -d   # 鍐峰惎鍔ㄨ嚜鍔ㄤ覆琛岋細PG 鈫� 涓氬姟
+#   docker compose --profile extra up -d           # 闄勫甫 scheduletask锛坅pp 宸插苟鍏� cx-platform锛�
+
+name: cx
+
+# 鍏叡鐜鍙橀噺锛堝崟鐙垚閿氱偣锛屼究浜庢煇鏈嶅姟鍙鐩栦釜鍒彉閲忚�屼笉涓㈠叾浣欙細
+#   environment:
+#     <<: *cx-env
+#     JAVA_TOOL_OPTIONS: -Xms512m -Xmx1536m
+# 锛�
+x-cx-env: &cx-env
+  # 瀹樻柟 Dockerfile ENTRYPOINT 鏃� $JAVA_OPTS 閫忎紶锛屽爢鍙傛暟璧� JVM 鑷姩鎷惧彇鐨� JAVA_TOOL_OPTIONS
+  # stdout/stderr.encoding锛�2026-08-11锛夛細JDK 19+ 璧� System.out 鐨勭紪鐮佺敱 stdout.encoding 鍐冲畾锛�
+  # 涓� Dockerfile 閲屽凡鏈夌殑 -Dfile.encoding=utf8 **鏃犲叧**锛況ocky 鍩虹闀滃儚娌¤ locale
+  # 锛坣ative encoding = ANSI_X3.4-1968锛夛紝浜庢槸涓枃 println 閫愬瓧鍙� `?`鈥斺�攇ateway 鐨�
+  # 銆岀綉鍏冲惎鍔ㄦ垚鍔熴�嶅湪鏃ュ織閲屽氨鏄偅琛� `??????`銆傝蛋 JAVA_TOOL_OPTIONS 鑰屼笉鏄敼 Dockerfile锛�
+  # 鏄负浜嗛浂閲嶅缓銆佷笖涓�澶勮鐩栧叏閮ㄦ湇鍔°��
+  JAVA_TOOL_OPTIONS: -Xms256m -Xmx768m -Dstdout.encoding=UTF-8 -Dstderr.encoding=UTF-8
+  # Spring Boot 鐨� ASCII banner锛氬鍣ㄦ棩蹇楅噷娌′汉鐪嬶紝鐧藉崰 8 琛屻��
+  # 馃敶 寮曞彿涓嶈兘鐪侊細YAML 1.1 閲岃8 off 浼氳瑙f瀽鎴愬竷灏� false锛宑ompose 鎷掔粷甯冨皵鍨� environment 鍊笺��
+  SPRING_MAIN_BANNER_MODE: "off"
+  # 鏃ュ織钀界洏鏍圭洰褰曪紙2026-08-11锛夛細config/shared/logger.yaml 鐨� log.path 鍗犱綅绗︽秷璐癸紝
+  # 涓庝笅鏂� x-cx 鐨� volumes 閭h**鎴愬**鈥斺�旀敼涓�涓繀椤绘敼鍙︿竴涓紝鍚﹀垯鏃ュ織鍙堝洖鍒板鍣ㄥ彲鍐欏眰銆�
+  # 鍚勬湇鍔¤嚜鍔ㄥ啓 /data/jnpf-logs/<spring.application.name>/ 瀛愮洰褰曪紝鏁呬竴涓寕杞界偣澶熷叏閮ㄦ湇鍔$敤銆�
+  JNPF_LOG_DIR: /data/jnpf-logs
+  # resources.yaml: storage-path ${JNPF_FILE_DIR:/Users/Shared/}锛堝鍣ㄥ唴璺緞锛夛紝
+  # 鏂囦欢钀� <鏍�>/jnpf-resources/
+  JNPF_FILE_DIR: /data/jnpf-files/
+  # 琛ヤ竵 #8锛氬煙鍚嶅洓閿紙system-config.yaml 鍗犱綅绗︽秷璐癸紱榛樿鍊煎嵆鏈満寮�鍙戝舰鎬侊紝浜や粯鍦� .env 璁剧湡鍊硷級
+  JNPF_API_DOMAIN: ${JNPF_API_DOMAIN:-http://cx-infra:30000}
+  JNPF_FRONT_DOMAIN: ${JNPF_FRONT_DOMAIN:-http://localhost/}
+  JNPF_APP_DOMAIN: ${JNPF_APP_DOMAIN:-http://localhost/}
+  JNPF_FLOW_DOMAIN: ${JNPF_FLOW_DOMAIN:-http://cx-flow-engine:31000}
+  # 馃敶 Dubbo LogProvider 娑堣垂绔洿杩炲湴鍧�锛�2026-08-11 骞冲彴鑱氬悎蹇呴』鍔狅級銆�
+  # 娑堣垂鏂规槸 jnpf-common-springaop 鐨� RequestLogAspect / ResultException锛屽畠浠殑
+  # @DubboReference 榛樿鍊�**纭紪鐮佷负 dubbo://cx-system:20880**鈥斺�旇�� cx-system 宸插苟鍏�
+  # cx-platform銆佸鍣ㄤ笉澶嶅瓨鍦紝涓嶈鐩栧氨姣忓垎閽熷埛 UnknownHostException: cx-system銆�
+  # 瀹夸富鏍堬紙start-all.sh锛夎鐨勬槸 dubbo://127.0.0.1:20880锛屼笉鍚湇鍔″悕锛屾晠瀹夸富褰㈡��**娴嬩笉鍑�**
+  # 杩欎釜闂锛涘畠鍙湪瀹瑰櫒褰㈡�佹毚闇层�傛敼鏈嶅姟鍚嶆椂杩欓噷蹇呴』璺熺潃鏀广��
+  # 閬楃暀浼樺寲椤癸細鑱氬悎鍚� provider 涓� consumer 鍚屽涓�涓� JVM锛屾湰鍙敤 injvm 璧拌繘绋嬪唴鐩磋皟锛�
+  # 鐪佹帀杩欎竴璺虫湰鍦� TCP 涓庨噸杩炲畾鏃跺櫒锛涗絾閭h鏀瑰钩鍙颁唬鐮佺殑 injvm=false锛屽彟妗堣瘎浼般��
+  JNPF_LOG_PROVIDER_URL: ${JNPF_LOG_PROVIDER_URL:-dubbo://cx-platform:20880}
+  # 瀹㈡埛鍧愭爣锛坅dr-multi-customer-db-isolation 搂3锛夛細涓氬姟搴撶粡 config/shared/datasource.yaml 鐨�
+  # ${CUSTOMER_DB_HOST}/${CUSTOMER_DB_PORT} 鍗犱綅绗︽秷璐癸紝鏁呭繀椤婚�忎紶杩涗笟鍔″鍣ㄣ��
+  # 涓庝笅鏂� cx-flow-engine 鐨� FLOW_DB_URL 鍚屾簮鈥斺�斾袱搴撹涔堜竴璧峰垏瑕佷箞涓�璧蜂笉鍒囥��
+  CUSTOMER_DB_HOST: ${CUSTOMER_DB_HOST:-cx-postgres}
+  CUSTOMER_DB_PORT: ${CUSTOMER_DB_PORT:-5432}
+  # 涓氬姟搴撹处鍙蜂篃閫忎紶锛歝onfig/shared/datasource.yaml 鐨� username/password 鍚屾牱鏄崰浣嶇锛�
+  # 鍚﹀垯姣忓垏涓�涓鎴峰氨寰楁敼杩欎唤鏂囦欢鐨勯粯璁ゅ�硷紝銆屽崟涓�寮�鍏炽�嶅氨鍚嶅瓨瀹炰骸浜嗐��
+  JNPF_APP_DB_USER: ${JNPF_APP_DB_USER:-jnpf_app}
+  JNPF_APP_DB_PASSWORD: ${JNPF_APP_DB_PASSWORD:?缂� JNPF_APP_DB_PASSWORD锛岃 .env.example}
+  # Redis 瀵嗙爜閫忎紶缁欎笟鍔℃湇鍔★紙datasource.yaml 鐨� spring.redis.password 鍗犱綅绗︽秷璐癸級銆�
+  # 姝ゅ墠涓氬姟渚ц鐨勬槸 yaml 鏄庢枃瀛楅潰鍊笺�佷粎 cx-redis 瀹瑰櫒鑷繁鍚冭繖涓� env鈥斺�斾袱杈归潬纰板阀鍚屽�煎伐浣滐紱
+  # 鍙傛暟鍖栧悗浜や粯鐜鏀� .env 涓�澶勫嵆鍙疆鎹紙2026-08-06 鐢ㄦ埛鎸囧嚭鍚庢敹鍙o級銆�
+  JNPF_REDIS_PASSWORD: ${JNPF_REDIS_PASSWORD:?缂� JNPF_REDIS_PASSWORD锛岃 .env.example}
+  # Redis 鍧愭爣閫忎紶锛坉atasource.yaml 鐨� spring.redis.host/port 鍗犱綅绗︽秷璐癸級銆�
+  # JNPF_DOCKER_REDIS_* 鏄鍣ㄤ晶涓撶敤瑕嗙洊锛氬涓� JVM 鍙户缁娇鐢� 127.0.0.1锛屽鍣ㄥ垯閫氳繃
+  # cx-infra(host-gateway) 璁块棶瀹夸富 Redis銆傛湭璁剧疆涓撶敤瑕嗙洊鏃舵部鐢� JNPF_REDIS_*锛屽吋瀹硅繙绔� Redis銆�
+  # 涓ょ粍閮戒笉璁� = 鏍堝唴 cx-redis锛堜氦浠�/鏈満瀹瑰櫒褰㈡�侊紝瑙� .env.example 搂5锛夈��
+  # 馃敶 蹇呴』鍐� ${VAR:-榛樿鍊紏 鑰岄潪瑁� ${VAR}锛氬涓绘湭璁炬椂瑁稿舰寮忔敞鍏ョ┖涓诧紝浼氭妸 yaml 閲岀殑榛樿鍊奸潤榛樻竻绌恒��
+  JNPF_REDIS_HOST: ${JNPF_DOCKER_REDIS_HOST:-${JNPF_REDIS_HOST:-cx-redis}}
+  JNPF_REDIS_PORT: ${JNPF_DOCKER_REDIS_PORT:-${JNPF_REDIS_PORT:-6379}}
+
+x-cx: &cx
+  # 涓氬姟闀滃儚褰撳墠浠� /bin/sh -c 鍚姩 Java锛涚敤 init 杞彂鍋滄淇″彿骞跺洖鏀跺瓙杩涚▼锛�
+  # 閬垮厤 compose 閲嶅缓鏃� PID 鍙樻垚 zombie 鍚庢棤娉曞仠姝㈡棫瀹瑰櫒銆�
+  init: true
+  restart: unless-stopped
+  networks: [cx]
+  extra_hosts:
+    - "cx-infra:host-gateway"
+  environment: *cx-env
+  # 鍐峰惎鍔ㄦ帓闃燂紙C4 琛ラ綈寮轰緷璧栵紱琛ヤ竵 #8 璧蜂笟鍔℃敼鏄惧紡渚濊禆 PG锛夛細
+  # PG healthy 鎵嶆斁涓氬姟锛圕2 娣卞寲鍚�=涓氬姟/娴佺▼寮曟搸搴撶湡灏辩华锛孡022 閲嶈繛绌鸿浆绐楀彛鍚屾牱閫傜敤锛夛紱
+  # Redis=浼氳瘽/缂撳瓨**鍏间簨浠舵�荤嚎**锛�2026-08-10 璧凤紝瑙� config/shared/system-config.yaml锛夛紝
+  # 璧峰湪渚濊禆鍓嶅彧浼氬埛閿欓噸杩炪��
+  # MQ namesrv 宸茬Щ闄わ細RocketMQ 浜� 2026-08-10 闅忎簨浠舵�荤嚎鍒� Redis 涓�骞堕��鏍堛��
+  depends_on:
+    cx-postgres:
+      condition: service_healthy
+      # 杩炶繙绔鎴峰簱鏃舵湰鏈轰笉璧� PG锛坈x-postgres 鍦� localdb profile 鍐咃紝瑙佸叾鏈嶅姟鍧楁敞閲婏級銆�
+      # required:false = 璇ユ湇鍔′笉鍦ㄦ湰娆″惎鍔ㄩ泦鍚堥噷灏辫烦杩囥�佷笖涓嶈嚜鍔ㄦ妸瀹冪殑 profile 鎷夎繘鏉ワ紱
+      # 鍦ㄩ泦鍚堥噷锛圕OMPOSE_PROFILES=localdb锛夊垯鐓ф棫绛夊畠 healthy鈥斺�斾袱绉嶅舰鎬佸叡鐢ㄨ繖涓�浠界紪鎺掋��
+      required: false
+    cx-redis:
+      condition: service_healthy
+  volumes:
+    # 涓庡涓昏繘绋嬪叡浜悓涓�鏂囦欢瀛樺偍鏍癸紙娣峰悎璋冭瘯涓や晶鐪嬪埌鍚屼竴鎵规枃浠讹級锛�
+    # 璺ㄥ钩鍙帮細瀹夸富渚ф牴鐩綍鐢� JNPF_DATA_DIR 鍙傛暟鍖栵紝Win/Linux 鍦ㄤ粨搴撴牴 .env 閲�
+    # 璁� JNPF_DATA_DIR=D:/jnpf-data 鎴� /data/jnpf 鍗冲彲锛屾湰鏈� Mac 榛樿 /Users/Shared
+    - ${JNPF_DATA_DIR:-/Users/Shared}/jnpf-resources:/data/jnpf-files/jnpf-resources
+    # 搴旂敤鏃ュ織钀藉涓伙紙2026-08-11锛夛細涓� x-cx-env 鐨� JNPF_LOG_DIR 鎴愬銆�
+    # 姝ゅ墠鏃ュ織鍐欏湪瀹瑰櫒鍙啓灞傦紝瀹瑰櫒 recreate 鍗冲叏涓€�佷笖涓嶅崰鍙纾佺洏閰嶉銆�
+    # 瀹夸富渚ч暱鎴� logs/<鏈嶅姟鍚�>/log_{error,warn,info,debug,total}.log锛岀洿鎺� tail -f 鍗冲彲锛�
+    # 婊氬姩褰掓。锛堟寜澶�+婊� 10MB锛屼繚鐣� 7 澶╋級杩� <鏈嶅姟鍚�>/{error,info,warn,total}/YYYY-MM-DD/锛屽悓鏍峰湪瀹夸富涓娿��
+    # 馃敶 鍐掑彿宸﹁竟 = 瀹夸富鏈虹洰褰曪紙鏀硅繖涓級锛屽彸杈� = 瀹瑰櫒鍐呯洰褰曪紙鐢� JNPF_LOG_DIR 鍥哄畾锛屽埆鏀癸級銆�
+    # 浜や粯鐜板満鑻ヤ笉鎯冲啓杩涢儴缃茬洰褰曪紝鍦� .env 璁� JNPF_LOG_DIR_HOST=/var/log/jnpf 杩欑被瀹夸富缁濆璺緞銆�
+    # 鈿狅笍 Linux 涓婅鐩綍鐢卞鍣ㄥ唴 root 鍒涘缓锛岄潪 root 鐢ㄦ埛璇绘棩蹇楅渶瑕� sudo銆�
+    - ${JNPF_LOG_DIR_HOST:-./logs}:/data/jnpf-logs
+  logging:
+    # 瀹瑰櫒 stdout 鐨� json-file 杞浆涓婇檺锛涙煡鐪嬬敤 docker compose logs -f <svc>
+    # 锛堟敞鎰忚繖浠藉拰涓婇潰鐨勬枃浠舵棩蹇楁槸涓ゅ锛歴tdout 璧� json-file 瀛� /var/lib/docker锛�
+    #  瀹瑰櫒鍒犻櫎鍗虫秷澶憋紱瑕佺暀瀛樼殑鏃ュ織鐪嬫寕鍑烘潵鐨� logs/ 鐩綍锛�
+    options:
+      max-size: "50m"
+      max-file: "3"
+
+# 鍩虹璁炬柦鍏叡妯℃澘锛堟棤涓氬姟 env銆佹棤鏂囦欢瀛樺偍鍗凤級
+x-infra: &infra
+  restart: unless-stopped
+  networks: [cx]
+  extra_hosts:
+    - "cx-infra:host-gateway"
+  logging:
+    options:
+      max-size: "50m"
+      max-file: "3"
+
+services:
+  # ================= 鍩虹璁炬柦锛圡2 鏀剁紪锛涜皟璇曠鍙h docker-compose.override.yml锛� =================
+
+  cx-postgres:
+    <<: *infra
+    container_name: cx-postgres
+    # 銆屾爤鍐� PG銆嶅彧鏄袱绉嶅簱褰㈡�佷箣涓�锛屾晠鏀惰繘 profile锛岄粯璁や笉鍚姩锛�2026-08-07锛夛細
+    #   寮�鍙戞満 / 娴嬭瘯鐜锛欳USTOMER_DB_HOST 鎸囧悜 CVM 涓婄殑瀹㈡埛瀹炰緥锛屾湰鏈鸿繖涓� PG 鏄浣欑殑
+    #     锛堣捣瀹冭繕浼氬洜 external 鍗� postgres_pgdata 涓嶅瓨鍦ㄨ�岀洿鎺ユ妸鏁存爤鎷︿笅锛�
+    #   浜や粯 / 姝e紡锛氭湰鏈� PG 灏辨槸鍞竴搴擄紝椤诲湪 .env 璁� COMPOSE_PROFILES=localdb 鎵嶄細璧�
+    # 璋佽璁捐繖涓紑鍏虫湁鍞竴鍒ゆ嵁锛欳USTOMER_DB_HOST=cx-postgres 灏卞繀椤昏锛宲reflight 浼氭牳瀵广��
+    # 鏋勫缓涓庣绾挎墦鍖呬笉鍙� profile 褰卞搷锛圡akefile images / assemble-offline-package.sh 鏄惧紡甯︿笂锛夛紝
+    # 鍚﹀垯浜や粯鍖呬細缂� PG 闀滃儚銆�
+    profiles: ["localdb"]
+    # 瀹氫箟鑷� docker/postgres/docker-compose.yml 骞崇Щ锛堣鏂囦欢宸插簾寮冿級锛涢暅鍍忔湰鍦板凡鏋勫缓锛屼氦浠樿蛋 tar
+    image: cx/postgres:18.4
+    build: docker/postgres
+    platform: linux/amd64
+    shm_size: 1g
+    # 绔彛涓嶅湪鍩虹嚎鍙戝竷锛堝涓� psql 璧� override 鐨� 127.0.0.1:5433锛屾垨 docker exec cx-postgres psql锛�
+    environment:
+      TZ: Asia/Shanghai
+      POSTGRES_USER: postgres
+      # 浠� initdb 鏃剁敓鏁堬紱鏃㈡湁 pgdata 鍗锋敼瀵嗙爜椤� ALTER USER锛堣 release-checklist 搂0锛�
+      POSTGRES_PASSWORD: ${JNPF_PG_PASSWORD:?缂� JNPF_PG_PASSWORD锛屽厛 cp .env.example .env}
+      # PG18 瀹樻柟闀滃儚 PGDATA 杩佽嚦 /var/lib/postgresql/18/docker锛寁olume 鎸傜埗鐩綍
+      POSTGRES_INITDB_ARGS: "--locale=C.UTF-8 --encoding=UTF8"
+    volumes:
+      - pgdata:/var/lib/postgresql
+    command:
+      - postgres
+      - -c
+      - shared_preload_libraries=pg_stat_statements,auto_explain
+      - -c
+      - pg_stat_statements.track=all
+      - -c
+      - auto_explain.log_min_duration=1s
+      - -c
+      - timezone=Asia/Shanghai
+      # 9 涓笟鍔℃湇鍔� Druid 姹犵ǔ鎬� ~98 杩炴帴锛岄粯璁� 100 鍦ㄧ湡瀹為〉闈㈡祦閲忎笅鎵撴弧锛�2026-07-17 鍥炲綊瀹炴祴锛�
+      - -c
+      - max_connections=200
+    healthcheck:
+      # C2 娣卞寲锛歱g_isready 鍙獙"鎺ュ彈杩炴帴"锛岀┖鍗�/婕忕亴鐨� PG 鐓ф牱 healthy锛堝叏鏂版満鍣ㄩ潤榛樺け璐ユ牴婧愶級銆�
+      # 杩藉姞涓ゅ簱杩炲緱涓� + 鍏抽敭琛ㄥ湪锛氬潖搴撲笉鏀捐锛屼笅娓革紙涓氬姟/娴佺▼寮曟搸 service_healthy锛夌瓑鐪熷氨缁��
+      # 瀹炵幇瑕佺偣锛氳繛涓婄洰鏍囧簱鏈韩鍗宠瘉鏄�"搴撳瓨鍦ㄤ笖鎺ュ彈杩炴帴"锛坧g_isready 鍐椾綑锛岀渷鎺夛級锛�
+      # jnpf_xxljob 鏃犲叧閿〃锛岀敤 1/count 闄ら浂鎶�宸у苟鍏ラ涓繛鎺ワ紱鍏� 2 娆� psql鈥斺�斿喎鍚姩 13 涓� JVM
+      # 鎵撴弧 CPU 鏃讹紙鏈湴 Rosetta锛夋瘡涓繘绋� spawn 閮芥參锛屽杩涚▼鐗堝疄娴嬭秴 5s timeout 璇垽 unhealthy銆�
+      # 鍙鏍¢獙璧板鍣ㄥ唴 socket=trust锛屼笌瀵嗙爜鏃犲叧锛圠030 涓嶉�傜敤锛夈��
+      # 琛ヤ竵 #8锛氬幓鎺夌涓夊簱鎺㈡椿鈥斺�斿師娉ㄥ唽/閰嶇疆涓績鐨勫簱浠嶅湪 PG 閲岋紙鏈垹锛岃
+      # tasks/jnpf-platform-patches.md 琛ヤ竵 #8锛夛紝浣嗘爤鍐呮棤鏈嶅姟鍐嶆秷璐瑰畠锛屽仴搴锋鏌ヤ笉蹇呭啀绛夊畠銆�
+      test:
+        - CMD-SHELL
+        - >-
+          psql -qU postgres -d jnpf_init -v ON_ERROR_STOP=1
+          -c 'SELECT 1 FROM base_user LIMIT 0'
+          -c "SELECT 1/count(*) FROM pg_database WHERE datname='jnpf_xxljob'" >/dev/null &&
+          psql -qU postgres -d jnpf_flow -v ON_ERROR_STOP=1 -c 'SELECT 1 FROM act_ru_task LIMIT 0' >/dev/null
+      interval: 15s
+      # 鍐峰惎鍔� CPU 楗卞拰绐楀彛杩涚▼ spawn 鎱紙涓婏級锛涚ǔ鎬� <1s锛�20s 鍙槸鍏滃簳
+      timeout: 20s
+      retries: 5
+      # 澶у嵎 crash recovery 鍙兘杩滆秴 5脳15s锛屾斁瀹藉埌 120s锛歴tart_period 鍐呭け璐ヤ笉璁� retries銆�
+      # 涓�鏃︽垚鍔熺珛鍗� healthy锛堜笉鎷栨參姝e父鍐峰惎鍔級锛屽彧寤跺悗"鐪熷潖"鐨� unhealthy 鍒ゅ畾
+      start_period: 120s
+
+  cx-redis:
+    <<: *infra
+    container_name: cx-redis
+    image: cx-redis:8.4.0-alpine
+    platform: linux/amd64
+    # requirepass 缁� .env 娉ㄥ叆锛坈onfig/shared/datasource.yaml 鐨� spring.redis.password 椤诲悓鍊硷級銆�
+    #
+    # 馃敶 2026-08-10 璧峰紑鎸佷箙鍖栵紙姝ゅ墠鏄� `--save ""` 涓嶈惤鐩樹笉鎸傚嵎锛夈��
+    # 鍘熸潵鐨勭悊鐢辨槸銆岀函缂撳瓨/浼氳瘽锛屾暟鎹彲涓紝鍙嶆 jnpf-oauth 姣忔鍚姩浼氭竻鍏ㄥ簱銆嶁�斺��
+    # **閭d釜鐞嗙敱涓嶆垚绔�**锛欽npfListener 鐨勬竻搴撹 `"false".equals(getTestVersion())` 闂ㄦ帶锛�
+    # 鑰� test-version 鍏ㄤ粨搴撴湭閰嶇疆 鈫� null 鈫� 鏉′欢涓� false 鈫� 娓呭簱浠庝笉鎵ц銆�
+    # 瀹炴祴锛圕VM 瀹㈡埛A锛夛細鍞竴鏃� TTL 鐨� key 鏄� `idgenerator_Index:`锛圛D 鐢熸垚鍣ㄧ储寮曪紝鍊煎凡鍒� 174锛夛紝
+    # 涓簡浼氳闆姳 workerId 澶嶇敤 鈫� 涓婚敭鍐茬獊/璺冲彿銆傝瑙� docs/release-checklist.md 搂2.2銆�
+    # 娉ㄦ剰锛氫簨浠舵�荤嚎璧� pub/sub锛�**涓嶆槸**寮�鎸佷箙鍖栫殑鐞嗙敱锛堝湪閫旀秷鎭惤鐩樹篃鏁戜笉鍥烇級銆�
+    command:
+      - redis-server
+      - --protected-mode
+      - "yes"
+      - --requirepass
+      - ${JNPF_REDIS_PASSWORD:?缂� JNPF_REDIS_PASSWORD锛屽厛 cp .env.example .env}
+      # AOF 涓轰富锛坋verysec锛氭渶澶氫涪 1 绉掞級锛孯DB 鍏滃簳渚夸簬鏁村嵎鎼縼
+      - --appendonly
+      - "yes"
+      - --appendfsync
+      - everysec
+      - --save
+      - "900 1"
+      # 馃敶 浜や粯鍩虹嚎姝ゅ墠**鏃㈡棤 maxmemory 涔熸棤 mem_limit**鈥斺�擱edis 鍙互鍚冨厜鏁村彴鏈哄櫒銆�
+      # 512mb 鏄粰涓皬瀹㈡埛鐨勪繚瀹堣捣姝ュ�硷紱姝e紡鐜搴旀寜瀹炴祴瀹氾紝鏂规硶瑙�
+      # docs/release-checklist.md 搂2.2銆屽閲忎笌鍛婅銆嶃��
+      # 涓嶅彉寮忥細鑻ョ粰瀹瑰櫒鍔� mem_limit锛屽繀椤� 鈮� 2 脳 maxmemory + 64M锛圓OF rewrite 鐨� COW 宄板�硷級銆�
+      - --maxmemory
+      - 512mb
+      # 淇濇寔 noeviction锛氫細璇�/缂撳瓨浠ュ杩樻湁鏃� TTL 鐨� idgenerator_Index:锛�
+      # LRU 闈欓粯閫愬嚭浼氬彉鎴愯烦鍙�/涓婚敭鍐茬獊杩欑被璇″紓鏁呴殰锛涙墦婊℃姤閿欏弽鑰岀珛鍒绘毚闇查棶棰樸��
+      # 浠d环鏄墦婊� = 鍐欏叆鍏ㄥけ璐ワ紝鎵�浠�**蹇呴』閰� 70% 鍛婅**锛屽埆绛夋挒澧欍��
+      - --maxmemory-policy
+      - noeviction
+    volumes:
+      - redisdata:/data
+    environment:
+      # redis-cli 鑷姩璇诲彇锛宧ealthcheck 鍏嶆樉寮� -a锛堥伩鍏嶅瘑鐮佸嚭鐜板湪杩涚▼鍙傛暟锛�
+      REDISCLI_AUTH: ${JNPF_REDIS_PASSWORD}
+    healthcheck:
+      test: ["CMD", "redis-cli", "ping"]
+      interval: 10s
+      timeout: 5s
+      retries: 5
+
+  # 鈹�鈹� RocketMQ锛坈x-mq-namesrv / cx-mq-store-init / cx-mq-broker锛夊凡浜� 2026-08-10 鏁翠綋绉婚櫎 鈹�鈹�
+  # 浜嬩欢鎬荤嚎鏀圭敤 Redis pub/sub锛坈onfig/shared/system-config.yaml 鐨� event.event-publish-type: redis锛夛紝
+  # binder 渚濊禆涔熷凡浠� jnpf-common-springaop 鎺掗櫎銆傝鍥炴粴瑙� tasks/jnpf-platform-patches.md 琛ヤ竵 #10銆�
+
+  cx-flow-engine:
+    <<: *infra
+    container_name: cx-flow-engine
+    # 鐙珛娴佺▼寮曟搸锛堝畼鏂� Flowable 7.0.1 + JNPF 瀹氬埗灞傦紝鑷湁婧愮爜宸ョ▼ jnpf-flow-engine/锛岃瑙� docker/flow-engine/README.md锛夛紱
+    # cx-flowable(30004) 缁� FlowDomain=http://cx-flow-engine:31000 鏈嶅姟鍚嶇洿杩炶皟鐢紙搂0.10 鏁版嵁闈㈣鍒欙級銆�
+    # 鏋勫缓鍓嶇疆锛歮vn -f jnpf-flow-engine/pom.xml package + ./docker/flow-engine/prepare-context.sh锛坖ar 涓嶅叆 git锛�
+    image: cx/flow-engine:${CX_VERSION:-1.0.0}
+    build: docker/flow-engine
+    platform: linux/amd64
+    # Dockerfile ENTRYPOINT 鏄� sh -c 褰㈠紡锛圥ID 1 涓嶆敹鍓插瓙杩涚▼锛夛紝鏇惧嚭鍍靛案杩涚▼瀵艰嚧瀹瑰櫒鍋滀笉鎺夛紙L031锛�
+    init: true
+    # 鏁版嵁婧� = PG 鐨� jnpf_flow 搴擄紙闅� pgdata 鍗凤紝Flowable 7 鍚岀増鏈� schema锛夛紱
+    # 杩炲簱璐﹀彿缁� env 娉ㄥ叆锛坈onf/application-dev.yml 鍙暀鍗犱綅锛夛紝A4 璧风敤涓撶敤瑙掕壊 jnpf_flow_app
+    environment:
+      # URL 鐢� :- 甯﹂粯璁ゅ�硷細榛樿瀹瑰櫒缃戠洿杩烇紱
+      # 寮�鍙戞満杩炴祴璇曠幆澧冨叡浜簱鏃跺湪 .env 瑕嗙洊锛坉ocs/adr-single-db-topology.md 搂5.2锛�
+      # 寮曟搸搴撲笌涓氬姟搴撳叡鐢ㄥ悓涓�瀵瑰潗鏍囧彉閲� 鈫� 鐗╃悊涓婁笉鍙兘鍗婂垏锛坅dr-multi-customer-db-isolation 搂4锛夈��
+      # JNPF_FLOW_DB_URL 淇濈暀涓洪�冪敓鍙o紙鏁翠覆瑕嗙洊锛夛紝鏃ュ父涓嶈鐢ㄢ�斺�旂敤瀹冨氨閲嶆柊寮曞叆浜嗗崐鍒囬闄┿��
+      FLOW_DB_URL: ${JNPF_FLOW_DB_URL:-jdbc:postgresql://${CUSTOMER_DB_HOST:-cx-postgres}:${CUSTOMER_DB_PORT:-5432}/jnpf_flow}
+      FLOW_DB_USER: ${JNPF_FLOW_DB_USER:-postgres}
+      FLOW_DB_PASSWORD: ${JNPF_FLOW_DB_PASSWORD:?缂� JNPF_FLOW_DB_PASSWORD锛屽厛 cp .env.example .env}
+    depends_on:
+      cx-postgres:
+        condition: service_healthy
+        # 鍚� x-cx 鐨勮鏄庯細鏍堝唴 PG 鍦� localdb profile 鍐咃紝涓嶅湪鍚姩闆嗗悎鏃惰烦杩囪�岄潪鎶ラ敊
+        required: false
+    healthcheck:
+      # 鏃� actuator锛岀敤 springdoc 鏂囨。绔偣鎺㈡椿
+      test: ["CMD-SHELL", "curl -fsS -o /dev/null http://127.0.0.1:31000/v3/api-docs"]
+      interval: 15s
+      timeout: 5s
+      start_period: 90s
+      retries: 5
+
+  cx-onlyoffice:
+    <<: *infra
+    container_name: cx-onlyoffice
+    # OnlyOffice Document Server 绀惧尯鐗堬細Office 鏂囨。鍦ㄧ嚎棰勮/缂栬緫锛岀敱 cx-biz-common 鐨�
+    # onlyoffice 鑳藉姏妯″潡椹卞姩锛堟柟妗堣 tasks/onlyoffice-integration-plan.md锛夈��
+    # 鐢� *infra 鑰岄潪 *cx锛氬畠涓嶆槸 JNPF JVM锛屼笉闇�瑕� JNPF_* 鐜鍙橀噺涓� PG/Redis/MQ 渚濊禆銆�
+    #
+    # 鈿狅笍 鐗堟湰蹇呴』鍥哄畾锛�9.4.0.1 鏄� Docker Hub 褰撳墠 latest锛圚ub manifest list digest
+    #   sha256:3ab6ebc7c605e5a32b7ae3ff19daed4925090245acc8100ce2230bd766c88212锛夛紱
+    #   tag 9.4.0 / 9.4 鏄洿鏃╃殑鍙︿竴涓� digest锛屼笉瑕佹贩鐢ㄣ��
+    #
+    # 馃敶 2026-08-19锛氱敱 Docker Hub 闀垮悕鏀逛负鐭悕 cx-onlyoffice锛屼笌 cx-redis 鍚屾満鍒垛�斺��
+    #   鍥藉唴缃戠粶 `docker.io/onlyoffice/documentserver` 鎷夊彇瓒呮椂锛坮egistry-1.docker.io:443
+    #   杩炰笉涓婏紝Windows 娴嬭瘯鐜瀹炴祴锛夈�傜煭鍚嶇敱 `make pull-infra` 浠� SWR 闀垮悕
+    #   $SWR/onlyoffice/documentserver:9.4.0.1 retag 鑰屾潵锛屾晠瑁� `docker compose pull`
+    #   鍚屾牱鎷変笉鍒板畠锛堣瑙佹湰鏂囦欢椤堕儴 搂鐭悕绾﹀畾涓� docs/docker-compose-guide.md 搂11.1锛夈��
+    #   SWR 渚ф槸宸茶В寮�鐨� amd64 鍗曟灦鏋� manifest锛坉igest
+    #   sha256:66e06b404e11d532832501acf5a78bc759940c58859a80676330f71aedb1ef99锛�
+    #   config sha256:4934c364adccc2898d0998951fb09d455496454de417cce2a74b7b1e808daab0锛夛紝
+    #   涓庝笂闈� Hub 鐨� manifest-list digest 澶╃劧涓嶅悓锛�**涓嶈兘鎹鍒ゆ柇鍐呭涓嶄竴鑷�**銆�
+    #   鉁� 2026-08-19 宸插疄璇佷袱婧愬唴瀹瑰悓涓�锛坉igest 姣斾笉浜嗭細鏈満杩炰笉閫� Hub锛屼笖鏈湴 Hub tag
+    #   鍦� containerd image store 涓嬪彧鍓� index 寮曠敤锛宨nspect 鍑烘潵 Architecture 绌恒��
+    #   RootFS.Layers=0锛屾棤浠庡彇灞傦級銆傛敼鍦ㄥ鍣ㄥ唴姣旓紝涓や晶瀹屽叏涓�鑷达細
+    #     路 dpkg 鍖呯増鏈�   onlyoffice-documentserver 9.4.0-129锛坅md64锛�
+    #     路 鏍稿績浜岃繘鍒�    server/DocService/docservice
+    #                     sha256:556df4aab7b1a87123046a4459baee34e60f57deaf7bcd189bccd6f271bd8fcb
+    #   骞朵笖 SWR 闀滃儚鍗曡捣瀹瑰櫒 20s 鍐呰窇閫氬畼鏂� /healthcheck銆�
+    image: cx-onlyoffice:9.4.0.1
+    platform: linux/amd64
+    environment:
+      # JWT 鏄� DS 涓庡悗绔箣闂寸殑鍞竴淇′换鍑嵁锛氬悗绔鍙戠紪杈戝櫒 config銆丏S 绛惧彂淇濆瓨鍥炶皟锛�
+      # 涓や晶鍏辩敤鍚屼竴 secret銆備笌 config/shared/jnpf-biz-common.yaml 鐨�
+      # onlyoffice.jwt-secret 鍚屾簮锛堥兘璇� .env 鐨� ONLYOFFICE_JWT_SECRET锛夆�斺��
+      # 涓よ竟涓嶄竴鑷寸殑琛ㄧ幇鏄紪杈戝櫒涓�鐩磋浆鍦堟垨鍥炶皟闈欓粯澶辫触锛屼笖鏃ュ織涓嶆槑鏄俱��
+      JWT_ENABLED: "true"
+      JWT_SECRET: ${ONLYOFFICE_JWT_SECRET:?缂� ONLYOFFICE_JWT_SECRET锛屽厛 cp .env.example .env}
+    volumes:
+      # DS 鍐呯疆 PostgreSQL 瀛樻枃妗g紦瀛樹笌缂栬緫鐘舵�侊紝涓嶆寕鍗峰垯閲嶅惎涓㈠け锛堣〃鐜颁负缂栬緫涓殑
+      # 鏂囨。鍥炲埌涓婁竴涓繚瀛樼偣锛夈�傚瓧浣撲笉鎸傝浇鈥斺�旈暅鍍忚嚜甯� 22 涓腑鏂囧瓧浣撳凡澶熺敤锛堝疄娴嬶級銆�
+      - onlyoffice-data:/var/www/onlyoffice/Data
+      - onlyoffice-log:/var/log/onlyoffice
+      - onlyoffice-db:/var/lib/postgresql
+    healthcheck:
+      # DS 瀹樻柟鎺㈡椿绔偣锛屽氨缁椂杩斿洖瀛楅潰閲� true
+      test: ["CMD-SHELL", "curl -fsS http://127.0.0.1/healthcheck | grep -q true"]
+      interval: 15s
+      timeout: 10s
+      retries: 5
+      # 棣栨鍚姩瑕佸垵濮嬪寲鍐呯疆 PG + 鐢熸垚瀛椾綋绱㈠紩锛孯osetta 涓婂亸鎱�
+      start_period: 90s
+
+  # ================= JNPF 涓氬姟鏈嶅姟锛圡1锛� =================
+  cx-gateway:
+    <<: *cx
+    container_name: cx-gateway
+    image: cx/gateway:${CX_VERSION:-1.0.0}
+    build: { context: ., dockerfile: dockerfile/gateway/Dockerfile, args: { BASE_IMAGE: "${BASE_IMAGE:-bellsoft/liberica-openjre-rocky:21}" } }
+    ports: ["30000:30000"]
+    # 璇存槑锛�2026-08-11 涓�搴﹀湪杩欓噷鍔犺繃 -Dlogging.level.jnpf.util.Ip2RegionUtil=OFF 鏉ュ帇
+    # 銆宨p2region xdb 鎵句笉鍒般�嶇殑涓ゆ潯 ERROR銆傝ˉ涓� #15 浠庢牴涓婅В鍐冲悗锛坓ateway 鑷甫鍚屽寘鏇胯韩绫�
+    # jnpf/util/Ip2RegionUtil.java锛岃璇ユ枃浠舵敞閲婏級宸叉挙鎺夆�斺�斿帇鍣厤缃暀鐫�浼氭帺鐩栫湡闂锛�
+    # 涔熶細璁╀汉璇互涓洪偅涓ゆ潯閿欒杩樺湪銆傛湰鏈嶅姟鐜板湪瀹屽叏璧� x-cx-env 鐨勫叕鍏辩幆澧冨彉閲忋��
+    healthcheck: &hc-30000
+      test: ["CMD-SHELL", "exec 3<>/dev/tcp/127.0.0.1/30000"]
+      interval: 30s
+      # 鍐峰惎鍔� CPU 楗卞拰涓嬩笟鍔$湡瀹炲惎鍔� 4-6 鍒嗛挓锛�180s 浼氱粡鍘�"鐬椂 unhealthy 鍐嶈嚜鎰�"鐨勮瀵兼��
+      # 锛堜笁杞喎鍚姩瀹炴祴锛夛紱start_period 鍐呭け璐ヤ笉璁� retries銆佹垚鍔熺珛鍗� healthy锛屾斁瀹芥棤鍓綔鐢紙L034锛�
+      start_period: 300s
+      retries: 3
+
+  # ================= 骞冲彴鑱氬悎鏈嶅姟锛�2026-08-11锛�=================
+  # system / permission / oauth / visualdev / visualdata / message / file / app / flowable
+  # 涔濅釜妯″潡鍚堜竴涓� JVM锛屽彇浠d笅闈節涓凡娉ㄩ噴鐨� cx-* 瀹瑰櫒銆�
+  # 瀹炴祴锛歊SS 绾� 1.07GB锛堝姣斾節涓嫭绔嬪鍣ㄧ害 6.7GB锛夛紝fat jar 328MB锛堝姣斾節涓悇 198MB锛夈��
+  # 鏈嶅姟鍚嶄笉鍙樷�斺�攃onfig/shared/discovery.yaml 閲屼節涓� jnpf-* 鍚嶅瓧鍏ㄩ儴鍒悕鍒� cx-platform:30002锛�
+  # 缃戝叧 router.yaml 涓� 60 涓� @FeignClient 涓�琛屾湭鏀广��
+  cx-platform:
+    <<: *cx
+    container_name: cx-platform
+    image: cx/platform:${CX_VERSION:-1.0.0}
+    build: { context: ., dockerfile: dockerfile/platform/Dockerfile, args: { BASE_IMAGE: "${BASE_IMAGE:-bellsoft/liberica-openjre-rocky:21}" } }
+    environment:
+      <<: *cx-env
+      # 涔濅釜妯″潡鐨勭被鍏冩暟鎹悓澶勪竴涓� JVM锛屽爢姣斿崟妯″潡鏈嶅姟澶т竴妗o紙妯℃澘榛樿 -Xms256m -Xmx768m锛夈��
+      # 瀹炴祴鍫� used 绾� 361MB锛�1536m 鐣欒冻浣欓噺锛涘嵆渚垮姝ゆ�诲崰鐢ㄤ粛杩滀綆浜庝節瀹瑰櫒褰㈡�併��
+      # 鈿狅笍 鏈鏁翠綋瑕嗙洊 x-cx-env 鐨勫悓鍚嶅�硷紝缂栫爜鍙傛暟蹇呴』璺熺潃鎶勪竴浠斤紝鍚﹀垯鏈湇鍔′腑鏂囨棩蹇楀彉闂彿銆�
+      JAVA_TOOL_OPTIONS: -Xms512m -Xmx1536m -Dstdout.encoding=UTF-8 -Dstderr.encoding=UTF-8
+      # 鍘� jnpf-system 鏄� Dubbo LogProvider 鍞竴 provider锛堣ˉ涓� #8锛夛紝鑱氬悎鍚庢湰鏈嶅姟鎺ョ銆�
+      # 涓嶈姝ら」 鈫� 姣忎釜璇锋眰鐨� RequestLogAspect 閮借皟鐢ㄥけ璐ャ��
+      DUBBO_PROTOCOL_PORT: "20880"
+    healthcheck:
+      <<: *hc-30000
+      test: ["CMD-SHELL", "exec 3<>/dev/tcp/127.0.0.1/30002"]
+
+  # 鈹�鈹� cx-oauth 宸插苟鍏� cx-platform锛�2026-08-11锛夛紝鏁存娉ㄩ噴淇濈暀浠ヤ究鍥炴粴 鈹�鈹�
+  # cx-oauth:
+  #   <<: *cx
+  #   container_name: cx-oauth
+  #   image: cx/oauth:${CX_VERSION:-1.0.0}
+  #   build: { context: ., dockerfile: dockerfile/oauth/Dockerfile, args: { BASE_IMAGE: "${BASE_IMAGE:-bellsoft/liberica-openjre-rocky:21}" } }
+  #   healthcheck:
+  #     <<: *hc-30000
+  #     test: ["CMD-SHELL", "exec 3<>/dev/tcp/127.0.0.1/30001"]
+
+
+  # 鈹�鈹� cx-system 宸插苟鍏� cx-platform锛�2026-08-11锛夛紝鏁存娉ㄩ噴淇濈暀浠ヤ究鍥炴粴 鈹�鈹�
+  # cx-system:
+  #   <<: *cx
+  #   container_name: cx-system
+  #   image: cx/system:${CX_VERSION:-1.0.0}
+  #   build: { context: ., dockerfile: dockerfile/system/Dockerfile, args: { BASE_IMAGE: "${BASE_IMAGE:-bellsoft/liberica-openjre-rocky:21}" } }
+  #   environment:
+  #     <<: *cx-env
+  #     # 琛ヤ竵 #8锛歫npf-system 鏄� Dubbo LogProvider 鍞竴 provider锛屽浐瀹氬崗璁鍙d緵鐩磋繛
+  #     DUBBO_PROTOCOL_PORT: "20880"
+  #   healthcheck:
+  #     <<: *hc-30000
+  #     test: ["CMD-SHELL", "exec 3<>/dev/tcp/127.0.0.1/30002"]
+
+
+  # 鈹�鈹� cx-visualdev 宸插苟鍏� cx-platform锛�2026-08-11锛夛紝鏁存娉ㄩ噴淇濈暀浠ヤ究鍥炴粴 鈹�鈹�
+  # cx-visualdev:
+  #   <<: *cx
+  #   container_name: cx-visualdev
+  #   image: cx/visualdev:${CX_VERSION:-1.0.0}
+  #   build: { context: ., dockerfile: dockerfile/visualdev/Dockerfile, args: { BASE_IMAGE: "${BASE_IMAGE:-bellsoft/liberica-openjre-rocky:21}" } }
+  #   healthcheck:
+  #     <<: *hc-30000
+  #     test: ["CMD-SHELL", "exec 3<>/dev/tcp/127.0.0.1/30003"]
+
+
+  # 鈹�鈹� cx-flowable 宸插苟鍏� cx-platform锛�2026-08-11锛夛紝鏁存娉ㄩ噴淇濈暀浠ヤ究鍥炴粴 鈹�鈹�
+  # cx-flowable:
+  #   <<: *cx
+  #   container_name: cx-flowable
+  #   image: cx/flowable:${CX_VERSION:-1.0.0}
+  #   build: { context: ., dockerfile: dockerfile/flowable/Dockerfile, args: { BASE_IMAGE: "${BASE_IMAGE:-bellsoft/liberica-openjre-rocky:21}" } }
+  #   healthcheck:
+  #     <<: *hc-30000
+  #     test: ["CMD-SHELL", "exec 3<>/dev/tcp/127.0.0.1/30004"]
+
+
+  # 鈹�鈹� cx-file 宸插苟鍏� cx-platform锛�2026-08-11锛夛紝鏁存娉ㄩ噴淇濈暀浠ヤ究鍥炴粴 鈹�鈹�
+  # cx-file:
+  #   <<: *cx
+  #   container_name: cx-file
+  #   image: cx/file:${CX_VERSION:-1.0.0}
+  #   build: { context: ., dockerfile: dockerfile/file/Dockerfile, args: { BASE_IMAGE: "${BASE_IMAGE:-bellsoft/liberica-openjre-rocky:21}" } }
+  #   healthcheck:
+  #     <<: *hc-30000
+  #     test: ["CMD-SHELL", "exec 3<>/dev/tcp/127.0.0.1/30005"]
+
+
+  # 鈹�鈹� cx-message 宸插苟鍏� cx-platform锛�2026-08-11锛夛紝鏁存娉ㄩ噴淇濈暀浠ヤ究鍥炴粴 鈹�鈹�
+  # cx-message:
+  #   <<: *cx
+  #   container_name: cx-message
+  #   image: cx/message:${CX_VERSION:-1.0.0}
+  #   build: { context: ., dockerfile: dockerfile/message/Dockerfile, args: { BASE_IMAGE: "${BASE_IMAGE:-bellsoft/liberica-openjre-rocky:21}" } }
+  #   healthcheck:
+  #     <<: *hc-30000
+  #     test: ["CMD-SHELL", "exec 3<>/dev/tcp/127.0.0.1/30008"]
+
+
+  # 鈹�鈹� cx-permission 宸插苟鍏� cx-platform锛�2026-08-11锛夛紝鏁存娉ㄩ噴淇濈暀浠ヤ究鍥炴粴 鈹�鈹�
+  # cx-permission:
+  #   <<: *cx
+  #   container_name: cx-permission
+  #   image: cx/permission:${CX_VERSION:-1.0.0}
+  #   build: { context: ., dockerfile: dockerfile/permission/Dockerfile, args: { BASE_IMAGE: "${BASE_IMAGE:-bellsoft/liberica-openjre-rocky:21}" } }
+  #   healthcheck:
+  #     <<: *hc-30000
+  #     test: ["CMD-SHELL", "exec 3<>/dev/tcp/127.0.0.1/30010"]
+
+
+  cx-lims:
+    <<: *cx
+    container_name: cx-lims
+    image: cx/lims:${CX_VERSION:-1.0.0}
+    build: { context: ., dockerfile: dockerfile/lims/Dockerfile, args: { BASE_IMAGE: "${BASE_IMAGE:-bellsoft/liberica-openjre-rocky:21}" } }
+    environment:
+      <<: *cx-env
+      # Spring relaxed binding 鈫� audit.spool-dir锛圓uditSdkAutoConfiguration @Value("${audit.spool-dir:./audit-spool}")锛夈��
+      # cx-lims 鏄綋鍓�**鍞竴**鐨� audit-sdk 瀹夸富锛屼篃灏辨槸鍞竴闇�瑕� spool 鍏滃簳鐨勬湇鍔°��
+      AUDIT_SPOOL_DIR: /jnpf/audit-spool
+      # M2 Task A1锛歛udit-sdk 宸叉帴鍏� lims銆俽elaxed binding 鑷姩鏄犲皠鍒� audit.enabled锛堟�诲紑鍏筹紝
+      # AuditSdkAutoConfiguration @ConditionalOnProperty锛夛紝鏃犻渶鍦� application.yml 閲嶅澹版槑鍗犱綅绗︺��
+      # 鍙屾�佹柇瑷�瑙� tasks/audit-m2-startup-check.sh銆�
+      AUDIT_ENABLED: ${AUDIT_ENABLED:-true}
+      # 2026-08-11锛欰UDIT_LAYER1_ENABLED / AUDIT_LAYER1_PER_TABLE_MASKED_COLUMNS 闅忓眰 1 鏁村绉婚櫎銆�
+      # 灞� 1 鑷氦浠樿捣涓�鐩撮粯璁� false锛宎udit_events 琛ㄥ唴 source_layer=1 闆惰锛屽睘鏈惎鐢ㄥ嵆璐熷�恒��
+    volumes:
+      # 鈿狅笍 鏈嶅姟绾� volumes 浼�**鏁翠綋瑕嗙洊** x-cx 閿氱偣鐨勯偅浠斤紝涓嶆槸杩藉姞鈥斺�旀墍浠� jnpf-resources
+      # 涓庢棩蹇楁寕杞介兘寰楀湪杩欓噷鍐嶅啓涓�閬嶏紝婕忎竴琛岃鏈嶅姟灏遍潤榛橀��鍥炲鍣ㄥ唴璺緞锛�2026-08-11 韪╄繃锛夈��
+      - ${JNPF_DATA_DIR:-/Users/Shared}/jnpf-resources:/data/jnpf-files/jnpf-resources
+      - ${JNPF_LOG_DIR_HOST:-./logs}:/data/jnpf-logs
+      - audit-spool-lims:/jnpf/audit-spool
+    healthcheck:
+      <<: *hc-30000
+      test: ["CMD-SHELL", "exec 3<>/dev/tcp/127.0.0.1/30019"]
+
+  # eln 涓氬姟妯″潡锛圓DR 鍞崠鍗曞厓鍒讹級锛歱rofile 闅旂锛岄粯璁� make up 涓嶈捣锛堟湰鍦� VM 鍐呭瓨璐︼紝L024锛夈��
+  # 璧风敤锛歞ocker compose --profile eln up -d
+  cx-eln:
+    <<: *cx
+    container_name: cx-eln
+    image: cx/eln:${CX_VERSION:-1.0.0}
+    profiles: ["eln"]
+    build: { context: ., dockerfile: dockerfile/eln/Dockerfile, args: { BASE_IMAGE: "${BASE_IMAGE:-bellsoft/liberica-openjre-rocky:21}" } }
+    healthcheck:
+      <<: *hc-30000
+      test: ["CMD-SHELL", "exec 3<>/dev/tcp/127.0.0.1/30013"]
+
+  # 鈺愨晲 cx-audit锛�30014锛夊凡浜� 2026-08-11 閫�褰� 鈺愨晲
+  # 瀹¤鏁翠綋鎼叆 jnpf-biz-common锛堣涓嬶級锛孞VM/瀹瑰櫒/闀滃儚鍚勫噺涓�涓��
+  # 鏈嶅姟鍚� jnpf-audit 鍦� config/shared/discovery.yaml 閲屼繚鐣欎负**鍒悕**鎸囧悜 cx-biz-common:30015锛�
+  # 鏁� lims 鐨� Feign 鎶曢�掍笌 /api/audit/** 璺敱涓�琛屾湭鏀广��
+  # 鍘熷厛杩欓噷鐨� AUDIT_SPOOL_DIR + audit-spool-audit 鍗锋槸**浠庢湭鐢熸晥鐨勯厤缃�**锛歴pool 灞� audit-sdk锛�
+  # 鑰� audit 鏈嶅姟绔殑渚濊禆閾撅紙server鈫抍ontroller鈫抌iz鈫抋pi锛変粠涓嶅惈 sdk鈥斺�旈��褰瑰墠瀹炴祴璇ュ嵎鍐呭缁堜负绌恒��
+
+  # 鍏叡涓氬姟鑳藉姏鑱氬悎鏈嶅姟锛坖npf-biz-common锛夛細榛樿鍚姩锛堟棤 profiles锛屽尯鍒簬 cx-eln锛夈��
+  # 涓�涓� JVM 鎵胯浇澶氫釜鑳藉姏妯″潡锛坥nlyoffice銆乤udit鈥︼級锛屽噯鍏ョ邯寰嬭 specs/2026-08-07-biz-common-design.md 搂3
+  cx-biz-common:
+    <<: *cx
+    container_name: cx-biz-common
+    image: cx/biz-common:${CX_VERSION:-1.0.0}
+    build: { context: ., dockerfile: dockerfile/biz-common/Dockerfile, args: { BASE_IMAGE: "${BASE_IMAGE:-bellsoft/liberica-openjre-rocky:21}" } }
+    # 鍙湁鏈湇鍔℃秷璐硅繖涓瘑閽ワ紝鏁呬笉杩涘叕鍏� *cx-env 閿氱偣锛屽崟鐙鐩栵紙淇濈暀閿氱偣鍏朵綑鍙橀噺锛夈��
+    # 馃敶 婕忎簡瀹冧細闈欓粯澶辫触鑰屼笉鏄姤閿欙細config/shared/jnpf-biz-common.yaml 閲屽啓鐨勬槸
+    # ${ONLYOFFICE_JWT_SECRET}锛岃�� Spring Boot 鐨� Binder 瀵硅В鏋愪笉浜嗙殑鍗犱綅绗︽槸鍘熸牱鏀捐锛�
+    # 鍚庣浼氭嬁瀛楅潰閲� "${ONLYOFFICE_JWT_SECRET}" 褰撳瘑閽ョ鍚嶏紝DS 楠岀蹇呯劧澶辫触锛�
+    # 琛ㄧ幇涓虹紪杈戝櫒閲屻�屾枃妗e畨鍏ㄤ护鐗岀殑鏍煎紡涓嶆纭�嶁�斺��2026-08-08 瀹炶俯銆�
+    environment:
+      <<: *cx-env
+      ONLYOFFICE_JWT_SECRET: ${ONLYOFFICE_JWT_SECRET:?缂� ONLYOFFICE_JWT_SECRET锛屽厛 cp .env.example .env}
+    healthcheck:
+      <<: *hc-30000
+      test: ["CMD-SHELL", "exec 3<>/dev/tcp/127.0.0.1/30015"]
+
+  cx-dms:
+    <<: *cx
+    container_name: cx-dms
+    image: cx/dms:${CX_VERSION:-1.0.0}
+    build: { context: ., dockerfile: dockerfile/dms/Dockerfile, args: { BASE_IMAGE: "${BASE_IMAGE:-bellsoft/liberica-openjre-rocky:21}" } }
+    healthcheck:
+      <<: *hc-30000
+      test: ["CMD-SHELL", "exec 3<>/dev/tcp/127.0.0.1/30016"]
+
+  # 鈹�鈹� cx-visualdata 宸插苟鍏� cx-platform锛�2026-08-11锛夛紝鏁存娉ㄩ噴淇濈暀浠ヤ究鍥炴粴 鈹�鈹�
+  # cx-visualdata:
+  #   <<: *cx
+  #   container_name: cx-visualdata
+  #   image: cx/visualdata:${CX_VERSION:-1.0.0}
+  #   build: { context: ., dockerfile: dockerfile/visualdata/Dockerfile, args: { BASE_IMAGE: "${BASE_IMAGE:-bellsoft/liberica-openjre-rocky:21}" } }
+  #   healthcheck:
+  #     <<: *hc-30000
+  #     test: ["CMD-SHELL", "exec 3<>/dev/tcp/127.0.0.1/30011"]
+
+  # ================= 鍓嶇锛圔acklog F锛�=================
+  # nginx 闈欐�佹墭绠� dist + /api銆�/websocket 鍙嶄唬 gateway锛涢潪 JVM 鐢� *infra 妯℃澘锛坸-cx 鐨�
+  # JAVA_TOOL_OPTIONS/鏂囦欢鍗�/depends_on 鍧囦笉閫傜敤锛夈�備笉鍔� depends_on锛歯ginx.conf 鐢ㄥ彉閲�
+  # proxy_pass + resolver 鎯版�цВ鏋愶紝gateway 鏈捣鏃� nginx 鐓у父鍚姩銆侀噸寤烘崲 IP 鑷姩閲嶈В鏋愩��
+  # dist 鐢� make web-dist 蹇収杩� docker/frontend/dist/锛堢嫭绔� build context鈥斺�旀牴 .dockerignore
+  # 鏄� deny-all 鐧藉悕鍗曪紝context: . 鎷夸笉鍒板墠绔枃浠讹級銆�
+  cx-web:
+    <<: *infra
+    container_name: cx-web
+    image: cx/web:${CX_VERSION:-1.0.0}
+    build:
+      context: docker/frontend
+      args:
+        NGINX_BASE_IMAGE: "${NGINX_BASE_IMAGE:-nginx:1.27-alpine}"
+    ports:
+      - "80:80"
+      # - "443:443"    # TLS 鐜板満鍚敤锛堣瘉涔� + nginx.conf 443 鍧楋紝涓夋瑙佷氦浠樺寘 INSTALL.md 搂5锛�
+    volumes:
+      # 鎸傝浇涓哄噯锛堢幇鍦哄厤鏋勫缓鏀瑰弽浠�/寮� TLS锛夛紝闀滃儚鍐� COPY 鐨勫悓浠� conf 浣滆嚜鍖呭惈鍏滃簳
+      - ./docker/frontend/nginx.conf:/etc/nginx/conf.d/default.conf:ro
+      # - ./docker/frontend/certs:/etc/nginx/certs:ro    # TLS 璇佷功鎸傝浇鐐�
+    healthcheck:
+      # alpine 鏃� bash 鐢ㄤ笉浜� &hc-30000 鐨� /dev/tcp锛沚usybox wget 鎺㈤潤鎬佸叆鍙e嵆鍙�
+      test: ["CMD", "wget", "-qO", "/dev/null", "http://127.0.0.1/"]
+      interval: 30s
+      timeout: 5s
+      retries: 3
+      start_period: 10s
+
+  # ---- 浠ヤ笅 2 涓湰鍦版殏鏈娇鐢紝鎸夐渶 --profile extra 鍚姩 ----
+
+  cx-scheduletask:
+    <<: *cx
+    profiles: [extra]
+    container_name: cx-scheduletask
+    image: cx/scheduletask:${CX_VERSION:-1.0.0}
+    build: { context: ., dockerfile: dockerfile/scheduletask/Dockerfile, args: { BASE_IMAGE: "${BASE_IMAGE:-bellsoft/liberica-openjre-rocky:21}" } }
+    healthcheck:
+      <<: *hc-30000
+      test: ["CMD-SHELL", "exec 3<>/dev/tcp/127.0.0.1/30009"]
+
+  # 鈹�鈹� cx-app 宸插苟鍏� cx-platform锛�2026-08-11锛夛紝鏁存娉ㄩ噴淇濈暀浠ヤ究鍥炴粴 鈹�鈹�
+  # cx-app:
+  #   <<: *cx
+  #   profiles: [extra]
+  #   container_name: cx-app
+  #   image: cx/app:${CX_VERSION:-1.0.0}
+  #   build: { context: ., dockerfile: dockerfile/app/Dockerfile, args: { BASE_IMAGE: "${BASE_IMAGE:-bellsoft/liberica-openjre-rocky:21}" } }
+  #   healthcheck:
+  #     <<: *hc-30000
+  #     test: ["CMD-SHELL", "exec 3<>/dev/tcp/127.0.0.1/30012"]
+
+
+networks:
+  cx:
+    name: cx
+
+volumes:
+  # Redis 鎸佷箙鍖栧嵎锛圓OF+RDB锛夈�傛櫘閫氬唴閮ㄥ嵎锛歚down -v` 浼氬垹锛�
+  # 浣� idgenerator_Index: 涓㈠け鍙奖鍝嶉洩鑺� workerId 鍒嗛厤锛岄噸寤哄嵆鍙紝涓嶆槸璺ㄦ満杩佺Щ鏁版嵁銆�
+  redisdata:
+  # 澶嶇敤 PG 杩佺Щ鏈熷垱寤虹殑鏃㈡湁鍗凤紙鍘� docker/postgres 椤圭洰锛夛紱external=compose 姘镐笉鍒犻櫎锛堝惈 down -v锛夛紝
+  # 鍏ㄦ柊鏈哄櫒闇�鍏� docker volume create postgres_pgdata 鍐嶇亴鏁版嵁锛坉ocker/postgres/migration/锛�
+  pgdata:
+    name: postgres_pgdata
+    external: true
+  # audit-sdk spool 鍏滃簳鐩綍锛堜袱绾ч檷绾х殑鏈�鍚庝竴绾э級锛歱er-service 鐙珛鍗凤紙Codex 鎵规浜� #2锛�
+  # 澶氬疄渚嬪叡浜� spool 鍗蜂細鏈夊鍎跨绾﹂闄╋紝per-service 闅旂瑙勯伩锛夈��
+  # 2026-08-11锛歛udit-spool-audit 闅� cx-audit 閫�褰逛竴骞跺垹闄わ紙瀹冧粠鏈鍐欏叆杩団�斺�攕pool 灞� sdk锛�
+  # 鑰� audit 鏈嶅姟绔笉鍚� sdk锛岄��褰瑰墠瀹炴祴鍗峰唴涓虹┖锛夈�傚綋鍓嶅彧鏈� SDK 瀹夸富 cx-lims 闇�瑕併��
+  audit-spool-lims:
+  # OnlyOffice DS 鐘舵�侊細Data=鏂囨。缂撳瓨涓庤浆鎹骇鐗╋紝db=鍐呯疆 PG锛堢紪杈戜細璇濈姸鎬侊級锛宭og=鏃ュ織銆�
+  # 鍧囦负鍙噸寤烘暟鎹紙涓㈠け鍙奖鍝嶇紪杈戜腑鐨勬湭淇濆瓨鍐呭锛屽凡淇濆瓨鐨勬枃妗e湪 jnpf-file 瀛樺偍閲岋級锛�
+  # 鏁呯敤鏅�氬唴閮ㄥ嵎锛屼笉璁� external
+  onlyoffice-data:
+  onlyoffice-log:
+  onlyoffice-db:

--
Gitblit v1.8.0