基于Hyperledger Fabric搭建自定义业务网络的技术疑问
Fabric 自定义应用开发实操指南
一、能不能直接复制network.sh用?
完全可以复制,但不能直接拿来就用,得根据你的需求调整。network.sh本质是把启动网络、创建通道、部署链码这些手动操作打包成了脚本,里面封装了Docker Compose、peer、configtxgen等工具的命令。
- 复制后要改的关键地方:
- 网络拓扑:比如你要新增组织、修改节点端口,就得把脚本里的
ORG_NAME、PEER_PORT这类环境变量改成你自己的配置 - 通道名称:默认是
mychannel,直接替换成你自定义的通道名即可 - 链码配置:如果你的链码路径、名称和示例不同,要修改脚本里链码安装、实例化的对应代码段
- 证书路径:如果你的证书不是存在默认的
organizations目录,要调整FABRIC_CFG_PATH等相关变量
- 网络拓扑:比如你要新增组织、修改节点端口,就得把脚本里的
二、创建通道和添加用户的具体操作
1. 创建通道(网络已启动的前提下)
Fabric里的通道是私有数据的逻辑隔离空间,需要先生成通道配置交易,再由peer节点提交创建请求。
- 步骤:
- 生成通道配置交易文件:
这里configtxgen -profile TwoOrgsChannel -outputCreateChannelTx ./channel-artifacts/mychannel.tx -channelID mychannelTwoOrgsChannel是configtx.yaml中定义的通道模板,如果你有更多组织,得先在configtx.yaml里新增对应模板,再用该模板生成交易文件 - 通过peer节点创建通道:
运行前要先设置环境变量peer channel create -o orderer.example.com:7050 -c mychannel -f ./channel-artifacts/mychannel.tx --tls true --cafile ${ORDERER_CA}ORDERER_CA为排序节点CA证书的绝对路径,比如:export ORDERER_CA=./organizations/ordererOrganizations/example.com/orderers/orderer.example.com/msp/tlscacerts/tlsca.example.com-cert.pem - 让每个组织的peer节点加入通道:
每个参与通道的peer节点都要执行这条命令,否则无法参与通道内的交易交互peer channel join -b mychannel.block
- 生成通道配置交易文件:
2. 添加应用级用户
Fabric的用户身份由CA颁发的证书+私钥组成,应用必须通过这些凭证才能与网络交互。以Fabric CA为例:
- 步骤:
- 注册用户:用组织管理员身份向CA提交注册请求
fabric-ca-client register --caname ca-org1 --id.name user1 --id.secret user1pw --id.type client --url http://localhost:7054ca-org1是你的CA名称,user1是用户名,user1pw是用户密码,可根据需求自定义 - 登记用户:获取用户的证书和私钥,存储到本地钱包
fabric-ca-client enroll -u http://user1:user1pw@localhost:7054 --caname ca-org1 -M ./wallet/user1 - 应用中加载用户:使用Fabric SDK(如Node.js或Java SDK)读取钱包里的用户凭证,即可用该身份调用链码、查询数据
- 注册用户:用组织管理员身份向CA提交注册请求
三、怎么处理connection-org.yaml的硬编码问题
硬编码的节点地址、证书路径会导致应用无法灵活适配不同环境(比如开发/测试/生产环境的节点配置不同),解决办法有以下几种:
- 替换为环境变量:
把yaml里的硬编码值换成环境变量占位符,比如将url: grpcs://peer0.org1.example.com:7051改为url: grpcs://${PEER0_ORG1_ADDRESS},运行应用前设置对应的环境变量:export PEER0_ORG1_ADDRESS=peer0.org1.example.com:7051 - 使用模板生成配置文件:
编写connection-template.yaml模板,用占位符代替可变值,再通过脚本(比如Python的jinja2)根据不同环境生成对应的connection.yaml文件 - 应用内动态加载配置:
不要直接读取yaml里的硬编码值,在应用启动时从环境变量或配置中心读取节点地址、证书路径等信息,动态构建连接参数
内容的提问来源于stack exchange,提问作者Bishal RaEe
相关产品推荐
相关产品推荐

