Skip to content

04 · 部署拓扑

本章基于 cbdc-biz/docker/compose-*.ymlcbdc-network/Makefilecbdc-infra/Makefilescripts/start-kms-system.sh 的代码实证。

三段启动顺序

来源:cbdc-chain/scripts/start-kms-system.shmain :1277setup_network :997start_biz :1056)。

flag 选项(scripts/start-kms-system.sh):

flag用途
--skip-build跳过镜像构建(scripts/start-kms-system.sh:179
--skip-rtgs不启动 rtgs-mock(:183
--quick快速重启模式:teardown 并重启 biz 与 network,跳过 setup,保持已起的 KMS / CA(:187teardown_quick :904-920
--local-kms本地 KMS / CA 模式(:191

cbdc-network 编排

来源:cbdc-network/Makefile(聚合 target 见 :199-263)、cbdc-network/configs/cbdc-network/.env.example

target用途
make setup-kmsclean setup-fabric-kms fetch-fabric-ca-root gen-compose-kms:调用 cbdc-tool 生成 out/ 下 crypto + 配置 + docker-compose.yaml(KMS 模式,Makefile:237
make setupclean setup-fabric gen-compose:同上但走 cryptogen 非 KMS 模式(Makefile:201
make startstart-fabriccd out && docker compose up -dMakefile:124-126251
make create-nsfxconfig namespace create cbdc,创建并等待 cbdc namespace(Makefile:139-150
make list-nsfxconfig namespace list
make teardownteardown-fabricdocker compose down -v + 删除 cbdc_net 网络(不删 out/,不删镜像;删 out/make cleanMakefile:185-193255

configs/ 模板:

  • test-full-kms.yaml / test-full-kms-postgres.yaml / test-full-kms-yugabyte.yaml — KMS 模式
  • test-full.yaml — 纯 cryptogen,4 个 OrdererOrg
  • test-simple.yaml — 最简,仅 OrdererOrg1

out/ 是 setup 阶段生成

cbdc-network/out/make setup / make setup-kms 之前不存在,由 cbdc-tool 的 config-builder setup(crypto + 配置)与 config-builder gen-composedocker-compose.yaml)生成(Makefile:87-115)。make start 即在 out/docker compose up -d

cbdc-biz 编排

来源:cbdc-biz/docker/cbdc-biz/Makefile

compose 文件清单:

文件服务 / 用途
compose-build-base.yml构建 Go 依赖基础镜像 cbdc-biz-builder-base
compose-build.yml构建 5 业务 app 镜像:auditor / issuer / endorser / bizhub / institution
compose-local-run.yml本地启 postgres + 5 应用
compose-local-run-infra.yml本地启 kms + ca--local-kms 用)
compose-rtgs-mock.ymlrtgs-smb(SMB 共享)+ rtgs-responder(模拟 RTGS)

compose-local-run.yml 服务:postgres / auditor / issuer / endorser1 / bizhub / institution-001docker/compose-local-run.yml:40-218)。该文件不含 Redis 服务;BizHub 的 Redis 地址为 host.docker.internal:6379conf/bizhub/core.yaml:68),指向 compose 外的 Redis。postgres 容器名 cbdc_local_db,启动时建库 cbdc_wholesale / cbdc_retail / cbdc_issuer / cbdc_endorser1 / cbdc_auditor / cbdc_bizhub / cbdc_institutioncompose-local-run.yml:50-56)。

cbdc-infra 编排

来源:cbdc-infra/Makefile:13-36cbdc-infra/cbdc-tool/Dockerfilecbdc-infra/.env-example

target输出镜像
make build-cbdc-tool${IMAGE_PREFIX}/cbdc-tool:${TAG}Makefile:18-22
make build-pushbuild-all + push cbdc-toolcbdc-ca-server-kmsMakefile:26-29
make versiongit describe --match infra/*Makefile:33-36

build-ca-server-kms 未定义

Makefile:15build-all 依赖 build-ca-server-kmsbuild-push 推送 cbdc-ca-server-kms 镜像,但该 Makefile 内没有定义 build-ca-server-kms target;启动脚本也直接调用它(scripts/start-kms-system.sh:951)。Makefile 内唯一可单独执行的构建 target 是 build-cbdc-tool

cbdc-tool 镜像以 ghcr.io/built-by-sign/fabric-x-tool 为基础镜像(自带 fxconfig / config-builder 等 fx 工具链),并从 sign-kms 镜像拷入 libkms_pkcs11.socbdc-infra/cbdc-tool/Dockerfile:5-20)。

Fabric-X 网络层(Arma + Committer)

来源:fabric-x-orderer · 架构fabric-x-committer · 架构cbdc-network/configs/test-full-kms.yaml 的拓扑配置 [未核 — 此处只引用代码与包 wiki]。

Orderer 4 个角色(Arma BFT):Router / Batcher / Consenter / Assembler,详见 fabric-x-orderer · 02-架构

Committer 5 个微服务:Sidecar / Coordinator / Verifier / Validator-Committer / Query Service,详见 fabric-x-committer · 02-架构

端口汇总(实测)

业务平面

服务端口出处
Endorser gRPC9300cbdc-biz/conf/endorser1/core.yaml:7
Endorser FSC P2P9301:24
Issuer gRPC9100cbdc-biz/conf/issuer/core.yaml:9
Issuer FSC P2P9101:30
Auditor gRPC9750cbdc-biz/conf/auditor/core.yaml:16
Auditor FSC P2P9751:67
Institution-001 gRPC9500cbdc-biz/conf/institution-001/core.yaml:8
Institution-001 FSC P2P9501:46
Institution-001 HTTP REST9502cbdc-biz/app/institution/internal/server/http.go:37-38cbdc-biz/docker/compose-local-run.yml:202
BizHub gRPC9000cbdc-biz/conf/bizhub/core.yaml:50

账本平面 — Orderer(每 Org 4 进程,按 Org 偏移 +100)

来源:cbdc-network/configs/test-full.yaml:26-113fabric-x-orderer · 02-架构

OrgRouterBatcherConsenterAssembler
OrdererOrg17050705170527053
OrdererOrg27150715171527153
OrdererOrg37250725172527253
OrdererOrg47350735173527353

test-full.yaml 默认 4 个 OrdererOrg(test-full.yaml:27-126);test-simple.yaml 仅启 Org1,Org2–4 被注释(test-simple.yaml:49-113)。

账本平面 — Committer

来源:cbdc-network/configs/test-full.yaml:128-157fabric-x-committer/service/vc/config.go:66fabric-x-committer · 02-架构

子组件端口出处
committer-validator5100cbdc-network/configs/test-full.yaml:140
committer-verifier5200:144
committer-coordinator5300:148
committer-sidecar5400:152
committer-query-service5500:156
committer-db (Postgres)5435:133
各 committer 进程 metrics2116fabric-x-committer/service/vc/config.go:66DefaultMonitoringPort

身份与存储

服务端口出处
Fabric CA REST7054cbdc-network/.env.examplefabric-ca
KMS gRPC9200sign-kms · API
KMS HTTP / Web UI9201
Postgres(biz 层)5432cbdc-biz/conf/bizhub/core.yaml:66(容器 cbdc_local_db
Redis6379cbdc-biz/conf/bizhub/core.yaml:68(institution-001 的 Redis 配置默认注释,见 conf/institution-001/core.yaml:30-34
RTGS / SMB445cbdc-biz/conf/bizhub/core.yaml:96

监控栈

文档描述存在,仓库内无对应代码

以下端口来自本仓库外部的部署文档(本仓库不含该文件,无法核验),cbdc-chain 顶层不存在 cbdc-monitoring/ 目录,端口取决于实际部署方使用的镜像。

组件端口(文档值)
Grafana3000
OpenTelemetry Collector (OTLP gRPC)4317
VictoriaMetrics8428
vmagent8429
victoria-logs9428
victoria-traces10428

业务平面 metrics 端口 [未核]

本仓库外部的部署文档(本仓库不含该文件)列出 bizhub:9010 / issuer:9110 / endorser:9310 / institution:9510 / auditor:9760,但 cbdc-biz/conf/*/core.yamlcbdc-biz/app/*/internal/server/ 中未直接搜到这些端口;实际监听值取决于 signet / OpenTelemetry 注入逻辑(见 05 · 数据流)。

启动依赖图

来源:scripts/start-kms-system.sh + cbdc-network/Makefile + cbdc-biz/Makefile + cbdc-biz/docker/compose-local-run.yml

关键依赖约束:

  1. cbdc-tool 先于 orderer / committercbdc-network/Makefile: setup-kms 调用 cbdc-tool 生成 out/,否则 orderer 启动时找不到 crypto material。
  2. 账本层先于业务层 — Issuer / Institution 启动会 dial Orderer broadcast 与 Committer query;账本未起则 retry 死循环。
  3. bizhub 先于 institutioncompose-local-run.ymlinstitution-001 depends_on bizhubservice_healthycompose-local-run.yml:216-220)。
  4. endorser 注册 audit responder — Endorser 启动时注册 AuditResponderView / AuditAndEndorseViewcbdc-biz/app/endorser/cmd/endorser/main.go:107-109);转账流必须经 endorser 背书(见 composition/05-data-flow)。compose-local-run.yml 中 endorser1 / issuer 仅 depends_on postgres(:153-155:124-126),跨服务先后由各应用 dial 后的 retry 保证。
  5. monitoring 完全独立 — 启停不影响业务平面;监控栈缺失只丢可观测数据,不阻塞链上交易。

--quick 模式 teardown 并重启 biz 与 network(含账本层),仅保持已起的 KMS / CA、跳过 setup(见上方 三段启动顺序)。

镜像版本管理

来源:cbdc-chain/README.md:241-256、各子项目 Makefile。

子项目git tag 前缀示例
cbdc-bizbiz/biz/v0.0.6
cbdc-networknetwork/network/v0.1.0
cbdc-infrainfra/infra/v0.0.3

各子项目 make versiongit describe --match <prefix>/* 自动生成。

多银行部署

[未核]

cbdc-biz/app/ 下仅 1 个 institution 应用(目录 app/institution,compose 实例名 institution-001);多银行实例化的具体编排 [未核] — compose 文件与 conf 目录中未发现现成的多银行模板。

biz.institution_code 配置在 cbdc-biz/conf/institution-001/core.yaml:16(值 "001"),缺失时 main.go panic(app/institution/cmd/institution/main.go:127-128)。bizhub/core.yamlinstitutions 列表已预留追加更多机构(code: '002' 等)的注释模板(conf/bizhub/core.yaml:32-40)。

监控栈

文档描述存在,仓库内无对应代码

cbdc-chain/docs/ARCHITECTURE.md 描述过 cbdc-monitoring/(VictoriaMetrics + Grafana + OTel Collector + Fluent Bit),但 cbdc-chain 顶层不存在该目录。

应用代码侧实现了 OpenTelemetry 注入点(cbdc-biz/pkg/signet/ / pkg/observability/),实际监控栈应部署在公司其他仓库或运维基础设施上。本仓库内不提供监控栈编排。

signetOTLP_ENDPOINT env(来自 cbdc-biz/.env.example),具体由部署方接到合适的 OpenTelemetry 接收端。

[未核]

  • cbdc-monitoring/ 的实际部署位置(在哪个仓库)。
  • 多银行 institution 实例的完整 compose 模板。
  • 各 AZ 之间的网络要求(仓库内无相关配置)。
  • 生产环境的 KMS / Postgres / Redis 副本配置(compose 文件为本地开发用)。