fabric peer 調(diào)試環(huán)境搭建

fabric peer 本地運(yùn)行

配置單 peer, 單 order, 單cli 測試環(huán)境,方便調(diào)試 peer

1. 修改配置

1.1 修改配置文件

  • configtx.yaml 刪除所有 關(guān)于 Org2 的選項(xiàng)
  • 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 兩個(gè)容器的配置

  • cli 的配置添加extra_host, 到時(shí)候?qū)⒂蛎赶蛩拗鳈C(jī)
extra_hosts:
      - "peer0.org1.example.com:192.168.1.xxx"

1.3 修改 byfn.sh

啟動(dòng)容器后,先不執(zhí)行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 函數(shù)中 共識(shí)策略改成 "OR ('Org1MSP.peer')"

2 啟動(dòng)

2.1 啟動(dòng)容器(order, cli)

兩個(gè)容器啟動(dòng)無誤后

2.2 debug 模式啟動(dòng) peer

peer 啟動(dòng)會(huì)讀取一系列環(huán)境變量, 從系統(tǒng)讀入,或者從 core.yml 文件,為了方便,我們 debug 時(shí)就把用到變量設(shè)置到core.yaml

docker-compose 文件中可以看到,peer 啟動(dòng)需要的一些環(huán)境變量

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 程序中會(huì)將 CORE_PEER_ID 轉(zhuǎn)化成 peer.id, CORE_PEER_CHAINCODEADDRESS 轉(zhuǎn)化為 peer.chaincodeaddress 等,如下

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

 ....

這里注意 幾個(gè) 文件的位置,

tls 的目錄對應(yīng)到 crypto-config/peerOrganizations/org1.example.com/peers/peer1.org1.example.com/tls 這個(gè)目錄。

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 目錄復(fù)制到 sampleconfig2 目錄下。修改 core.yaml 的配置如上 2.2 .

peer 啟動(dòng)默認(rèn)用到 /var/hyperledger 目錄存儲(chǔ)。需要提前創(chuàng)建并改權(quán)限
sudo mkdir /var/hyperledger/ && sudo chown tanhui /var/hyperledger

2.4 本機(jī)添加hosts

peer 會(huì)找 orderer 節(jié)點(diǎn),為本機(jī)添加host

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

最后啟動(dòng) peer

peer node start

2.5 執(zhí)行 script.sh

進(jìn)入 cli 容器

執(zhí)行

./scripts/script.sh mychannel 3 golang 10

如果沒有報(bào)錯(cuò), peerdebug 環(huán)境就搭好了!

如果 createChannel 的時(shí)候報(bào)錯(cuò)如下

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

可能是因?yàn)橹?code>docker 容器殘留的數(shù)據(jù)導(dǎo)致,所以導(dǎo)致證書認(rèn)證失敗。

解決方案:執(zhí)行如下命令刪除卷

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

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時(shí)請結(jié)合常識(shí)與多方信息審慎甄別。
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡書系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

友情鏈接更多精彩內(nèi)容