Hyperledger Fabric學習筆記——學習byfn.sh腳本並手動搭建Fabric網絡

本文主要通過學習官方提供的first-network案例中的byfn.sh腳本,手動搭建一下Fabric網絡,瞭解搭建一個簡單區塊鏈網絡的全過程。

1、銷燬已有網絡

如果之前運行過first-network,則首先銷燬已有網絡,並刪除所有docker容器和各種已經創建的組件。

./byfn.sh down
docker rm -f $(docker ps -aq)
docker rmi -f $(docker images | grep fabcar | awk '{print $3}')

2、導入基本的環境變量

先導入兩個環境變量:

  • 二進制文件所在目錄,即configtxgen等工具所在目錄
  • configtx.yaml文件所在目錄,用於告知configtxgen工具
export PATH=${PWD}/../bin:$PATH
export FABRIC_CFG_PATH=${PWD}

3、版本檢查

byfn.sh中在checkPrereqs函數中還對docker容器和鏡像等進行了版本檢查,本文之前已經用正確的版本進行了配置,故此處略去版本檢查。

4、爲網絡中的實體生成證書及密鑰

使用cryptogen工具根據配置文件crypto-config.yaml爲網絡中的實體生成證書和密鑰,放於crypto-config目錄下,byfn.sh腳本中在完成這一步後,還調用了同一目錄下的ccp-generate.sh腳本爲Org1和Org2生成了CCP文件(供後器SDK使用),在此先忽略。

cryptogen generate --config=./crypto-config.yaml

5、生成四個配置組件

使用configtxgen工具藉助configtx.yaml生成四個配置組件:genesis.block,channel.tx,Org1MSPanchors.tx,Org2MSPanchors.tx,並放置於channel-artifacts下。

configtxgen -profile SampleMultiNodeEtcdRaft -channelID byfn-sys-channel -outputBlock ./channel-artifacts/genesis.block
export CHANNEL_NAME=mychannel
configtxgen -profile TwoOrgsChannel -outputCreateChannelTx ./channel-artifacts/channel.tx -channelID $CHANNEL_NAME
configtxgen -profile TwoOrgsChannel -outputAnchorPeersUpdate ./channel-artifacts/Org1MSPanchors.tx -channelID $CHANNEL_NAME -asOrg Org1MSP
configtxgen -profile TwoOrgsChannel -outputAnchorPeersUpdate ./channel-artifacts/Org2MSPanchors.tx -channelID $CHANNEL_NAME -asOrg Org2MSP

6、啓動docker容器(使用CAs與couchdb)

使用docker-compose基於yaml配置文件啓動容器,建立Fabric網絡。首先以環境變量的形式指定每個組織的CA的私鑰,CA容器的yaml配置文件中會使用該變,在docker-compose命令中將參數設置爲-d是不顯示實時日誌流。執行完後,可以使用docker ps命令查看已啓動容器基本信息,包括一個cli,四個peer,四個couchdb,五個order和兩個ca。最後一個命令可以用來查看網絡信息。

export BYFN_CA1_PRIVATE_KEY=$(cd crypto-config/peerOrganizations/org1.example.com/ca && ls *_sk)
export BYFN_CA2_PRIVATE_KEY=$(cd crypto-config/peerOrganizations/org2.example.com/ca && ls *_sk)
docker-compose -f docker-compose-cli.yaml -f docker-compose-etcdraft2.yaml -f docker-compose-ca.yaml -f docker-compose-couch.yaml up -d

7、創建通道

byfn.sh腳本文件調用cli容器中scripts/script.sh腳本創建通道,將peer節點加入通道,並更新組織的錨節點。首先給出peer0.org1.example.com和peer0.org2.example.com的環境變量,後面需要不斷地切換環境變量,以作爲不同的peer節點執行相關操作。

CORE_PEER_MSPCONFIGPATH=/opt/gopath/src/github.com/hyperledger/fabric/peer/crypto/peerOrganizations/org1.example.com/users/[email protected]/msp

CORE_PEER_ADDRESS=peer0.org1.example.com:7051

CORE_PEER_LOCALMSPID="Org1MSP"

CORE_PEER_TLS_ROOTCERT_FILE=/opt/gopath/src/github.com/hyperledger/fabric/peer/crypto/peerOrganizations/org1.example.com/peers/peer0.org1.example.com/tls/ca.crt

 

CORE_PEER_MSPCONFIGPATH=/opt/gopath/src/github.com/hyperledger/fabric/peer/crypto/peerOrganizations/org2.example.com/users/[email protected]/msp

CORE_PEER_ADDRESS=peer0.org2.example.com:9051

CORE_PEER_LOCALMSPID="Org2MSP"

CORE_PEER_TLS_ROOTCERT_FILE=/opt/gopath/src/github.com/hyperledger/fabric/peer/crypto/peerOrganizations/org2.example.com/peers/peer0.org2.example.com/tls/ca.crt

首先進入CLI容器終端,並以環境變量形式指定通道名稱,然後使用peer channel create命令,將通道配置transaction發送給order節點以創建通道,若通道創建成功,將接收到來自order節點的通道的創世區塊,以通道名稱命名。

docker exec -it cli bash
export CHANNEL_NAME=mychannel
peer channel create -o orderer.example.com:7050 -c $CHANNEL_NAME -f ./channel-artifacts/channel.tx --tls true --cafile /opt/gopath/src/github.com/hyperledger/fabric/peer/crypto/ordererOrganizations/example.com/orderers/orderer.example.com/msp/tlscacerts/tlsca.example.com-cert.pem

8、將節點加入通道

切換peer節點的環境變量,多次執行以下命令,將節點加入通道(這裏僅加入了每個組織各一個節點,案例中將4個節點全部加入):

CORE_PEER_MSPCONFIGPATH=/opt/gopath/src/github.com/hyperledger/fabric/peer/crypto/peerOrganizations/org1.example.com/users/[email protected]/msp
CORE_PEER_ADDRESS=peer0.org1.example.com:7051
CORE_PEER_LOCALMSPID="Org1MSP"
CORE_PEER_TLS_ROOTCERT_FILE=/opt/gopath/src/github.com/hyperledger/fabric/peer/crypto/peerOrganizations/org1.example.com/peers/peer0.org1.example.com/tls/ca.crt

peer channel join -b $CHANNEL_NAME.block

CORE_PEER_MSPCONFIGPATH=/opt/gopath/src/github.com/hyperledger/fabric/peer/crypto/peerOrganizations/org1.example.com/users/[email protected]/msp
CORE_PEER_ADDRESS=peer1.org1.example.com:8051
CORE_PEER_LOCALMSPID="Org1MSP"
CORE_PEER_TLS_ROOTCERT_FILE=/opt/gopath/src/github.com/hyperledger/fabric/peer/crypto/peerOrganizations/org1.example.com/peers/peer1.org1.example.com/tls/ca.crt

peer channel join -b $CHANNEL_NAME.block

CORE_PEER_MSPCONFIGPATH=/opt/gopath/src/github.com/hyperledger/fabric/peer/crypto/peerOrganizations/org2.example.com/users/[email protected]/msp
CORE_PEER_ADDRESS=peer0.org2.example.com:9051
CORE_PEER_LOCALMSPID="Org2MSP"
CORE_PEER_TLS_ROOTCERT_FILE=/opt/gopath/src/github.com/hyperledger/fabric/peer/crypto/peerOrganizations/org2.example.com/peers/peer0.org2.example.com/tls/ca.crt

peer channel join -b $CHANNEL_NAME.block

CORE_PEER_MSPCONFIGPATH=/opt/gopath/src/github.com/hyperledger/fabric/peer/crypto/peerOrganizations/org2.example.com/users/[email protected]/msp
CORE_PEER_ADDRESS=peer1.org2.example.com:10051
CORE_PEER_LOCALMSPID="Org2MSP"
CORE_PEER_TLS_ROOTCERT_FILE=/opt/gopath/src/github.com/hyperledger/fabric/peer/crypto/peerOrganizations/org2.example.com/peers/peer1.org2.example.com/tls/ca.crt

peer channel join -b $CHANNEL_NAME.block

9、爲每個組織指定其在當前通道中的錨節點

切換peer節點的環境變量,多次執行以下命令,爲每個組織指定其在當前通道中的錨節點,每個組織至少有一個錨節點。

CORE_PEER_MSPCONFIGPATH=/opt/gopath/src/github.com/hyperledger/fabric/peer/crypto/peerOrganizations/org1.example.com/users/[email protected]/msp
CORE_PEER_ADDRESS=peer0.org1.example.com:7051
CORE_PEER_LOCALMSPID="Org1MSP"
CORE_PEER_TLS_ROOTCERT_FILE=/opt/gopath/src/github.com/hyperledger/fabric/peer/crypto/peerOrganizations/org1.example.com/peers/peer0.org1.example.com/tls/ca.crt

peer channel update -o orderer.example.com:7050 -c $CHANNEL_NAME -f ./channel-artifacts/${CORE_PEER_LOCALMSPID}anchors.tx --tls true --cafile /opt/gopath/src/github.com/hyperledger/fabric/peer/crypto/ordererOrganizations/example.com/orderers/orderer.example.com/msp/tlscacerts/tlsca.example.com-cert.pem

CORE_PEER_MSPCONFIGPATH=/opt/gopath/src/github.com/hyperledger/fabric/peer/crypto/peerOrganizations/org2.example.com/users/[email protected]/msp
CORE_PEER_ADDRESS=peer0.org2.example.com:9051
CORE_PEER_LOCALMSPID="Org2MSP"
CORE_PEER_TLS_ROOTCERT_FILE=/opt/gopath/src/github.com/hyperledger/fabric/peer/crypto/peerOrganizations/org2.example.com/peers/peer0.org2.example.com/tls/ca.crt

peer channel update -o orderer.example.com:7050 -c $CHANNEL_NAME -f ./channel-artifacts/${CORE_PEER_LOCALMSPID}anchors.tx --tls true --cafile /opt/gopath/src/github.com/hyperledger/fabric/peer/crypto/ordererOrganizations/example.com/orderers/orderer.example.com/msp/tlscacerts/tlsca.example.com-cert.pem

10、運行成功截圖如下:

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章