Fabric 不会从零搭建——官方提供了 test-network 脚本,一键生成 2 组织 + 1 orderer 的完整网络。理解这些脚本背后的身份、创世块和通道配置,是生产部署的基础。
15.2.1 单命令启动
bash
# 下载 fabric-samples
wget https://raw.githubusercontent.com/hyperledger/fabric/main/scripts/bootstrap.sh
bash bootstrap.sh -s # 下载二进制工具和样本代码
# 进入测试网络
cd fabric-samples/test-network
# 一键启动两个组织 + 1 个 orderer 的通道网络
./network.sh up createChannel
# 输出:
# [+] Creating org1, org2 identities
# [+] Starting orderer.example.com
# [+] Creating channel 'mychannel' ...
# [+] Joining org1, org2 peers to 'mychannel'`network.sh` 背后发生了什么?
graph LR
S1[cryptogen / CA] --> S2[生成 MSP 身份]
S2 --> S3[每个组织:admin + peers + users]
S3 --> S4[configtxgen]
S4 --> S5[创世块 genesis.block]
S4 --> S6[通道配置 channel.tx]
S5 --> S7[Orderer 启动]
S6 --> S8[通道创建 + 加入]
style S1 fill:#e3f2fd
style S7 fill:#c8e6c9
工具链:
- cryptogen:批量生成固定的 X.509 证书(开发和快速测试)
- Fabric-CA:材料服务的 CA 服务,用于生产环境的动态注册
- configtxgen:从
configtx.yaml生成创世块和签名交易
15.2.2 核心配置文件
yaml
# configtx.yaml 关键片段演示
capabilities:
channel: V2_0 # 通道级别能力
orderer: V2_0 # orderer 级别
application: V2_0 # 应用级别
organizations:
- &Org1
name: Org1MSP
mspdir: crypto-config/peerOrganizations/org1.example.com/msp
policies: ...
- &Org2
name: Org2MSP
mspdir: crypto-config/peerOrganizations/org2.example.com/msp
profiles:
TwoOrgsOrdererGenesis: # 创世块配置
orderer:
ordererType: etcdraft
organizations: [*Org1, *Org2]
TwoOrgsChannel: # 通道配置
consortiums:
- SampleConsortium
organizations: [*Org1, *Org2]
application:
organizations: [*Org1, *Org2]
# 默认背书策略:需要两个组织的任一 peer 背书
policies:
Endorsement:
rule: "MAJORITY Endorsement"15.2.3 容器架构
text
docker-compose 启动的容器群:
- orderer.example.com (1 个)
- peer0.org1.example.com (Org1)
- peer0.org2.example.com (Org2)
- ca_org1, ca_org2 (可选 CA)
- couchdb0, couchdb1 (状态数据库,可选)
- cli (命令行交互容器)每个 peer 有两个存储:
- 文件系统(LevelDB/CouchDB):当前世界状态的键值存储
- 区块文件:不可变的排序后的区块序列
graph TB
subgraph Peer0["peer0.org1"]
P1[提交/提交容器]
P2[区块文件 /var/hyperledger/fabric/ledgers]
P3[状态数据库 LevelDB / CouchDB]
P4[背书状态]
end
P1 --> P2
P1 --> P3
P1 --> P4
style P2 fill:#ffebee
style P3 fill:#e8f5e9
15.2.4 身份层次
graph TD
Root[Root CA 证书] --> CA1[org1.example.com CA]
Root --> CA2[org2.example.com CA]
CA1 --> Admin1[Org1 Admin]
CA1 --> Peer1[Org1 Peer]
CA1 --> User1[Org1 User1]
CA2 --> Admin2[Org2 Admin]
CA2 --> Peer2[Org2 Peer]
CA2 --> User2[Org2 User2]
style Root fill:#fff3e0
style Admin1 fill:#e8f5e9
style Admin2 fill:#e8f5e9
15.2.5 关闭与清理
bash
./network.sh down
# 删除容器、删除加密材料、删除通道生产环境不会使用 test-network,但理解其结构是部署生产网络的基石:
- 生产上你会用 Fabric-CA 动态注册身份(而非
cryptogen静态文件) - 生产上你会部署 etcd-raft 的 orderer 集群(Raft BFT 共识)
- 生产上你会用外部 CouchDB/LevelDB 集群,而非嵌入式
> ← 15.1 Fabric 架构 | 前往 → 15.3 链码开发 |*
评论
0评论加载中…