fabric peer 调试环境搭建

aside section ._1OhGeD · · 900 次点击 · · 开始浏览    
这是一个创建于 的文章,其中的信息可能已经有所发展或是发生改变。

fabric peer 本地运行

配置单 peer, 单 order, 单cli 测试环境,方便调试 peer

1. 修改配置

1.1 修改配置文件

  • configtx.yaml 删除所有 关于 Org2 的选项
  • crypto-config.ymal PeerOrgs.Template.Count 改为 1

1.2 修改 docker-compose-cli.yml

删除 peer1.org1.example.com, peer1.org2.example.com, peer0.org2.example.com 等容器(以及依赖)

只留 orderer.example.com, cli 两个容器的配置

  • cli 的配置添加extra_host, 到时候将域名指向宿主机
extra_hosts:
      - "peer0.org1.example.com:192.168.1.xxx"

1.3 修改 byfn.sh

启动容器后,先不执行script.sh

注释

1.4 修改 script.sh 脚本

  • joinChannel 方法替换如下
joinChannel () {
    joinChannelWithRetry 0 1    
    sleep $DELAY
}
  • script.sh 中 install or instantiate 都改为对 peer0.org1 的操作, 如下
if [ "${NO_CHAINCODE}" != "true" ]; then

    ## Install chaincode on peer0.org1 and peer0.org2
    echo "Installing chaincode on peer0.org1..."
    installChaincode 0 1

    # Instantiate chaincode on peer0.org1
    echo "Instantiating chaincode on peer0.org1..."
    instantiateChaincode 0 1

    # Query chaincode on peer0.org1
    echo "Querying chaincode on peer0.org1..."
    chaincodeQuery 0 1 100

    # Invoke chaincode on peer0.org1 and peer0.org1
    echo "Sending invoke transaction on peer0.org1 peer0.org1..."
    chaincodeInvoke 0 1

    # Query on chaincode on peer1.org1, check if the result is 90
    echo "Querying chaincode on peer1.org1..."
    chaincodeQuery 0 1 90
    
fi

utils.sh(被 script.sh 引用) , instantiateChaincode 函数中 共识策略改成 "OR ('Org1MSP.peer')"

2 启动

2.1 启动容器(order, cli)

两个容器启动无误后

2.2 debug 模式启动 peer

peer 启动会读取一系列环境变量, 从系统读入,或者从 core.yml 文件,为了方便,我们 debug 时就把用到变量设置到core.yaml

docker-compose 文件中可以看到,peer 启动需要的一些环境变量

CORE_PEER_ID=peer0.org1.example.com
CORE_PEER_ADDRESS=peer0.org1.example.com:7051
CORE_PEER_LISTENADDRESS=0.0.0.0:7051
CORE_PEER_CHAINCODEADDRESS=peer0.org1.example.com:7052
CORE_PEER_CHAINCODELISTENADDRESS=0.0.0.0:7052
CORE_PEER_GOSSIP_BOOTSTRAP=peer1.org1.example.com:8051
CORE_PEER_GOSSIP_EXTERNALENDPOINT=peer0.org1.example.com:7051
CORE_PEER_LOCALMSPID=Org1MSP
CORE_PEER_TLS_ENABLED=true
CORE_PEER_GOSSIP_USELEADERELECTION=true
CORE_PEER_GOSSIP_ORGLEADER=false
CORE_PEER_PROFILE_ENABLED=true
CORE_PEER_TLS_CERT_FILE=/etc/hyperledger/fabric/tls/server.crt
CORE_PEER_TLS_KEY_FILE=/etc/hyperledger/fabric/tls/server.key
CORE_PEER_TLS_ROOTCERT_FILE=/etc/hyperledger/fabric/tls/ca.crt

peer 程序中会将 CORE_PEER_ID 转化成 peer.id, CORE_PEER_CHAINCODEADDRESS 转化为 peer.chaincodeaddress 等,如下

peer:
    id: peer0.org1.example.com
     address: peer0.org1.example.com:7051
     localMspId: Org1MSP
     
     tls:
            cert:
                    file: ./tls/server.crt

 ....

这里注意 几个 文件的位置,

tls 的目录对应到 crypto-config/peerOrganizations/org1.example.com/peers/peer1.org1.example.com/tls 这个目录。

2.3 Goland 下的配置

新建 build config

这里的 working directory 指向的是 sampleconfig2(sampleconfig 目录拷贝而来), 将 crypto-config/peerOrganizations/org1.example.com/peers/peer1.org1.example.com/tlscrypto-config/peerOrganizations/org1.example.com/peers/peer1.org1.example.com/msp 目录复制到 sampleconfig2 目录下。修改 core.yaml 的配置如上 2.2 .

peer 启动默认用到 /var/hyperledger 目录存储。需要提前创建并改权限
sudo mkdir /var/hyperledger/ && sudo chown tanhui /var/hyperledger

2.4 本机添加hosts

peer 会找 orderer 节点,为本机添加host

127.0.0.1    orderer.example.com
127.0.0.1    peer0.org1.example.com

最后启动 peer

peer node start

2.5 执行 script.sh

进入 cli 容器

执行

./scripts/script.sh mychannel 3 golang 10

如果没有报错, peerdebug 环境就搭好了!

如果 createChannel 的时候报错如下

Principal deserialization failure (the supplied identity is not valid: x509: certificate signed by unknown authority) for identity 0

可能是因为之前docker 容器残留的数据导致,所以导致证书认证失败。

解决方案:执行如下命令删除卷

docker-compose -f docker-compose-cli.yaml down --volumes --remove-orphans
sudo docker rm -f $(docker ps -a | grep "hyperledger/*" | awk "{print \$1}")
sudo  docker volume prune

我用的材料: first-network.zip


有疑问加站长微信联系(非本文作者)

本文来自:简书

感谢作者:aside section ._1OhGeD

查看原文:fabric peer 调试环境搭建

入群交流(和以上内容无关):加入Go大咖交流群,或添加微信:liuxiaoyan-s 备注:入群;或加QQ群:692541889

900 次点击  
加入收藏 微博
暂无回复
添加一条新回复 (您需要 登录 后才能回复 没有账号 ?)
  • 请尽量让自己的回复能够对别人有帮助
  • 支持 Markdown 格式, **粗体**、~~删除线~~、`单行代码`
  • 支持 @ 本站用户;支持表情(输入 : 提示),见 Emoji cheat sheet
  • 图片支持拖拽、截图粘贴等方式上传