内容清單
-
- 考試涉及内容
- 配置使用 couchDB
- 定義多組織的啟動配置
-
- 向 channel 中新加一個組織
- 配置 raft 排序服務
- 配置 Hyperledger Fabric 容器
- 定義網絡配置選項(區塊建立選項等)
- 啟用 TLS 通信
- 生成 Genesis Block
- 配置服務發現
考試涉及内容
Install and Configure Network25 %
- Modify the world state database configuration
- Define initial multi-org configuration policy
- Configure Ordering service (Raft)
- Configure Hyperledger Fabric containers
- Define network config options (block creation options, etc)
- Enable TLS for communication
- Generate genesis block
- Configure service discovery node (e.g. peer and orderer addresses)
配置使用 couchDB
參考《Using CouchDB》《CouchDB as the State Database》
可以使用
docker images
指令檢視本機是否有 CouchDB 的鏡像:
docker images hyperledger/fabric-couchdb
如果之前沒有下載下傳過 CouchDB 的鏡像的話,需要使用下邊的語句下載下傳 CouchDB 的鏡像:
docker pull hyperledger/fabric-couchdb
關于 CouchDB 的配置都是在
docker-compose.yaml
檔案中。
- 添加關于 couchdDB 的容器的配置,包括容器名字,使用的鏡像名字,關于使用者名和密碼的環境變量的配置,端口以及網絡的配置
- 關于使用 CouchDB 的相關節點的配置,包括将 CouchDB 的容器添加到
中做為新的依賴,在環境變量中設定depends_on
為CORE_LEDGER_STATE_STATEDATABASE
,并且設定CouchDB
為對應的 CouchDB 的位址(容器名:端口)以及配置登入 CouchDB 的使用者名和密碼CORE_LEDGER_STATE_COUCHDBCONFIG_COUCHDBADDRESS
- 安裝并啟動好 CouchDB 之後,可以使用
的方式檢視 CouchDB 是否成功啟動curl -X GET http://localhost:端口号
定義多組織的啟動配置
參考《Adding an Org to a Channel》
首先需要在
crypto-config.yaml
中添加新的組織的加密檔案配置,來為新的組織生成密鑰、證書等加密檔案。
然後需要在
docker-compose.yml
中添加新的組織對應的容器配置,注意修改相關的對外端口号,避免端口沖突。
最後需要在
configtx.yaml
中添加新的組織的配置資訊。
以上的操作都可以簡單的 copy paste 但是要注意修改對應的組織及節點名字。
向 channel 中新加一個組織
使用
cryptogen extend
來為剛剛配置的新組織生成加密檔案。
使用
configtxgen -printOrg
指令将新的組織的定義導出到 json 檔案。組織的定義包括:
- 組織的政策(policy)定義
- 組織的 NodeOU 定義
- 兩個關鍵的證書:用來頒發證書的CA root 證書,用來進行網絡通信中 gossip 協定需要使用的 TLS root 證書
将新組織添加到 channel 的步驟比較繁瑣。
首先進入 cli 容器,使用
peer channel fetch
指令取回 channel 的 最新的配置區塊(config block)資訊 并存到一個 protobuf 二進制檔案。
然後使用
configtxlator proto_decode
将剛剛得到的 protobuf 檔案解碼成 json 檔案。
使用
jq
指令在原始的 config block json 中添加新的組織資訊。
使用
configtxlator proto_encode
指令将原始的變更後的 json 檔案編碼為 protobuf 檔案。
使用
configtxlator compute_update
指令計算出變化的部分(delta)的 protobuf 檔案。
使用
configtxlator proto_decode
指令将變化部分的 protobuf 檔案解碼為 json 檔案供下一步請求使用。
生成帶有 header 資訊的請求 json 檔案,然後使用
configtxlator proto_encode
指令生成最終要執行的 protobuf 檔案。
使用
peer channel signconfigtx
獲得所需要的組織的簽名(基于背書政策),最後要提供簽名的組織可以使用
peer channel update
簽名并更新 channel 的變動。
在 cli 容器中以新的組織身份登入(配置相關的環境變量),使用
peer channel fetch 0
取得第一個 genesis block。然後使用
peer channel join
将目前組織添加到 channel,可以使用
peer channel list
指令檢視所有加入的 channel 資訊。
然後可以根據安裝使用 chaincode 的加成為新的組織節點安裝 chaincode。
配置 raft 排序服務
參考《Configuring and operating a Raft ordering service》。
在
crypto-config.yaml
配置中的
OrdererOrgs
的
Specs
部分,包含所有 Raft 節點的資訊。
在
configtx.yaml
配置中的
Organizations
的
OrdererEndpoints
部分,配置所有 Raft 節點的 endpoint 資訊。并在
Orderer
部配置設定置 Raft 的
Address
和
Consenters
資訊。
在
docker-compose.yml
中配置所有 Raft 節點的容器配置資訊,并在相對應的 peer 節點以及 cli 的
depends_on
中添加 Raft 容器名字。
配置 Hyperledger Fabric 容器
容器的配置資訊都在
docker-compose.yml
檔案中。
定義網絡配置選項(區塊建立選項等)
啟用 TLS 通信
參考《Securing Communication With Transport Layer Security(TLS)》。
主要是更新
docker-composer.yml
檔案中的 TLS 配置資訊。
可以依據關鍵字,如
CORE_PEER_TLS_CERT_FILE
來查找其他文章中例子配置。
生成 Genesis Block
參考《configtxgen》
使用
configtxgen -output Block
指令将 genesis block 寫入到指定的 protobuf 檔案中。
配置服務發現
參考《Service Discovery CLI》
需要在
docker-compose.yml
中為每一個需要被發現的節點配置
CORE_PEER_GOSSIP_EXTERNALENDPOINT
的值。
在 cli 容器中,使用
discover
指令,通過添加
saveConfig
參數可以将相關的節點及資訊存儲到
--configFile
所指定的檔案當中。
生成配置檔案後,可以使用
discovery
+
peers
來查詢所有 peers 節點的資訊,使用
discovery
+
config
來查詢配置的資訊,使用
discovery
+
endorsers
來查詢背書相關配置資訊(需要用
--chaincode
來指定 chaincode 的名字)。