前言
? 在實際項目中,因為項目的需求變動,一般都會對fabric網(wǎng)絡做一個修改,最常見的變動就是在現(xiàn)有的Fabric網(wǎng)絡中增加一個節(jié)點,現(xiàn)在以之前搭建的fabric網(wǎng)絡(版本1.1),balance-transfer為例做個介紹,整個過程其實也很簡單,生成節(jié)點證書,增加新節(jié)點的docker配置文件并啟動相應的服務,然后將新節(jié)點加到現(xiàn)有的channel當中,并在節(jié)點上安裝智能合約(Chaincode),下午詳情講一下具體的操作步驟。
1、修改crypto-config.yaml文件并生成對應的節(jié)點證書。
首先我們確認我們需要在Org2里增加節(jié)點,那么我們在crypto-config.yaml文件里找到對應Org2的配置,把Template字段里的count參數(shù)修改成2,意思就是在此組織下生成兩個節(jié)點,配置文件如下
- Name: Org2
Domain: org2.xuyao.com
EnableNodeOUs: true
Template:
Count: 2
Users:
Count: 1
修改好配置文件后,我們現(xiàn)在使用cryptogen來生成證書,在在artifacts/channel目錄下執(zhí)行:
./cryptogen extend --config=./crypto-config.yaml
這樣我們就為新節(jié)點生成了證書,可以到Org2相應的目錄上查看,發(fā)現(xiàn)已經(jīng)新生成了一個節(jié)點,加上之前那個,一共有兩個節(jié)點。
peer0.org2.mbasechain.com peer1.org2.mbasechain.com
2、配置docker-compose文件并啟動節(jié)點容器
接下來我們需要新增一個doceker-compose有配置文件,用來啟動一個新節(jié)點容器,我們將新節(jié)點的配置文件全名為:Org2Peer1.yaml
version: '2'
services:
couchdb:
container_name: couchdb
image: hyperledger/fabric-couchdb:latest
ports:
- "5984:5984"
peer1.org1.xuyao.com:
container_name: peer1.org1.xuyao.com
image: hyperledger/fabric-peer:latest
environment:
- CORE_PEER_ID=peer1.org1.xuyao.com
- CORE_PEER_LOCALMSPID=Org1MSP
- CORE_PEER_ADDRESS=peer1.org1.xuyao.com:7051
- CORE_LEDGER_STATE_STATEDATABASE=CouchDB
- CORE_LEDGER_STATE_COUCHDBCONFIG_COUCHDBADDRESS=couchdb:5984
- CORE_VM_ENDPOINT=unix:///host/var/run/docker.sock
- CORE_VM_DOCKER_HOSTCONFIG_NETWORKMODE=artifacts_default
- CORE_LOGGING_LEVEL=debug
- CORE_PEER_GOSSIP_USELEADERELECTION=true
- CORE_PEER_GOSSIP_ORGLEADER=false
- GODEBUG=netdns=go
# The following setting skips the gossip handshake since we are
# are not doing mutual TLS
- CORE_PEER_GOSSIP_SKIPHANDSHAKE=true
- CORE_PEER_MSPCONFIGPATH=/etc/hyperledger/crypto/peer/msp
- CORE_PEER_TLS_ENABLED=true
- CORE_PEER_TLS_KEY_FILE=/etc/hyperledger/crypto/peer/tls/server.key
- CORE_PEER_TLS_CERT_FILE=/etc/hyperledger/crypto/peer/tls/server.crt
- CORE_PEER_TLS_ROOTCERT_FILE=/etc/hyperledger/crypto/peer/tls/ca.crt
working_dir: /opt/gopath/src/github.com/hyperledger/fabric/peer
command: peer node start
ports:
- 7051:7051
- 7053:7053
volumes:
- /var/run/:/host/var/run/
- ./channel/crypto-config/peerOrganizations/org1.mbasechain.com/peers/peer0.org1.xuyao.com/:/etc/hyperledger/crypto/peer
- ../mount/peer0.org1.xuyao.com/var/hyperledger/production:/var/hyperledger/production
depends_on:
- couchdb
這個配置文件跟之前的peer節(jié)點的配置一樣,只要改下相應的參數(shù)即可,接下來我們就來啟動這個節(jié)點。
docker-compose -f Org2Peer1.yaml up -d
啟動過程也和之前的一樣。
3、修改network-config.json配置文件
啟動節(jié)點后,我們需要配置network-config.json,讓應用與節(jié)點之前通信,在peers那塊增加一個通訊節(jié)點就可以
peer1.org2.xuyao.com:
url: grpcs://127.0.0.1:10051
eventUrl: grpcs://127.0.0.1:10053
grpcOptions:
ssl-target-name-override: peer1.org2.xuyao.com
tlsCACerts:
path: artifacts/channel/crypto-config/peerOrganizations/org4.mbasechain.com/peers/peer1.org2.xuyao.com/tls/ca.crt
修改配置后,我們啟動balance-transfer,運行runApp.sh,將項目跑起來。
4、將新節(jié)點加入到所需的Channel中
接下來我們需要將新節(jié)點加到某個Channel里,首先我們通過注冊接口,在Org2里拿到用戶的Token,再拿此Token請求中入Channel接口
curl -s -X POST \
http://localhost:4000/channels/mychannel/peers \
-H "authorization: Bearer $ORG2_TOKEN" \
-H "content-type: application/json" \
-d '{
"peers": ["peer1.org2.xuyao.com"]
}'
5、安裝Chaincode
加入channel后,peer3已經(jīng)可以參與記賬,但是不能指定該節(jié)點進行查詢或交易,這時候需要發(fā)起請求安裝chaincode:
curl -s -X POST \
http://localhost:$PORT/chaincodes \
-H "authorization: Bearer $ORG1_TOKEN" \
-H "content-type: application/json" \
-d '{
"peers": ["peer1.org2.xuyao.com"],
"chaincodeName":"mycc",
"chaincodePath":"github.com/example_cc",
"chaincodeVersion":"v0"
}'
安裝成功后指定新節(jié)點進行查詢或交易操作,會自動生成該節(jié)點的chaincode鏡像,并啟動容器運行chaincode。在已有組織中新加節(jié)點的操作到這里就全部完成了!